kondate 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 38db840e774d8575edff8aa3dbbd3d90d46e9dbb
4
- data.tar.gz: 4988f05f9ff465ead90e59abc233c6101f46d0f7
3
+ metadata.gz: bfe91929a45399f7e8a221f3fb5e213e397c08ec
4
+ data.tar.gz: 6b9b197d8d7c53862c9df96a01c15ab88ac95775
5
5
  SHA512:
6
- metadata.gz: dcfa3c75c22e6915c0fe3f234b9c1046476ebcf311a346e5f029eeb9fb9722f63d0f8862513af02147127ab8eadf0920660a9ebfe9c4786967bc9d73d7fea988
7
- data.tar.gz: 9caa081558c981e425fbb34d567b7be60bc1ccd7e7dd2f7a60c5951ad0e7c1eec07ec821ff920f729376bebd257a26d4680c24759ab6523036f7e05bdf577d40
6
+ metadata.gz: 600de96b908537679071fd2aa4fa1a44c6e843834118ebb89f50b02106e021662e4f49cda5bc7c44e39ca145cf938370181a13daa246ce5d98cbb9db1a8b4c0d
7
+ data.tar.gz: c624cf7f23eda9397538da28ebf161dbcc36236745112db1395112f6f27ca88e84344f213e4a029a65c28ef8b2d9a75dc7f2001ad2f60ed1a034964fab647358
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # 0.1.2 (2015/11/24)
2
+
3
+ Enhancments:
4
+
5
+ * Support environments properties.
6
+
1
7
  # 0.1.1 (2015/11/24)
2
8
 
3
9
  Changes:
data/README.md CHANGED
@@ -47,25 +47,26 @@ $ bundle exec kondate serverspec <host>
47
47
  ```
48
48
  .
49
49
  ├── .kondate.conf # kondate configuration
50
- ├── bootstrap.rb # itamae bootstrap
51
- ├── hosts.yml # manages hostnames and its roles
52
- ├── properties # manages run_lists and attributes
53
- │   ├── nodes # host specific properties
54
- │   └── roles # role properties
55
-    └── sample.yml
56
- ├── secrets # manages secrets attributes such as passwords
50
+ ├── bootstrap.rb # itamae bootstrap
51
+ ├── hosts.yml # manages hostnames and its roles
52
+ ├── properties # manages run_lists and attributes
53
+ │   ├── nodes # host specific properties
54
+ │   ├── roles # role properties
55
+    └── environments # environment properties
56
+ ├── secrets # manages secrets attributes such as passwords
57
57
  │   └── properties
58
58
  │   ├── nodes
59
- │   └── roles
60
- ├── recipes # itamae recipes
61
- │   ├── middleware # middleware recipes
59
+ │   ├── roles
60
+ │   └── environments
61
+ ├── recipes # itamae recipes
62
+ │   ├── middleware # middleware recipes
62
63
  │   │   └── base
63
64
  │   │   └── default.rb
64
- │   └── roles # role recipes
65
- └── spec # serverspec specs
66
- ├── middleware # middleware recipes specs
65
+ │   └── roles # role recipes
66
+ └── spec # serverspec specs
67
+ ├── middleware # middleware recipes specs
67
68
  │   └── base_spec.rb
68
- ├─ roles # role recipes specs
69
+ ├─ roles # role recipes specs
69
70
  └── spec_helper.rb
70
71
  ```
71
72
 
@@ -80,8 +81,10 @@ middleware_recipes_serverspec_dir: spec/middleware
80
81
  roles_recipes_serverspec_dir: spec/roles
81
82
  nodes_properties_dir: properties/nodes
82
83
  roles_properties_dir: properties/roles
84
+ environments_properties_dir: properties/environments
83
85
  secret_nodes_properties_dir: secrets/properties/nodes
84
86
  secret_roles_properties_dir: secrets/properties/roles
87
+ secret_environments_properties_dir: secrets/properties/environments
85
88
  plugin_dir: lib
86
89
  host_plugin:
87
90
  type: file
@@ -117,10 +120,10 @@ You can create your own host plugin. See `Host Plugin` section for more details.
117
120
  Property files are places to write recipes to run and attributes values.
118
121
 
119
122
  ```
120
- ├── properties # manages run_lists and attributes
121
- │   ├── nodes # host specific properties
122
- │   └── roles # role properties
123
-    └── sample.yml
123
+ ├── properties # manages run_lists and attributes
124
+ │   ├── nodes # host specific properties
125
+ │   ├── roles # role properties
126
+    └── environments # environment properties
124
127
  ```
125
128
 
126
129
  An example looks like below:
@@ -141,7 +144,7 @@ attributes:
141
144
 
142
145
  The attributes variables are accessible like `attrs['rbenv']['versions']` in recipes, which is equivalent and short version of `node['attributes']['rbenv']['versions']`.
143
146
 
144
- You can also prepare a host-specific property file such as:
147
+ You can also prepare host-specific property files such as:
145
148
 
146
149
  properties/nodes/#{host}.yml
147
150
 
@@ -151,7 +154,19 @@ attributes:
151
154
  worker_processes: 8
152
155
  ```
153
156
 
154
- These files are merged on kondate execution in order of `role` + `node` (`node` file overwrites `role` file).
157
+ In addition, you can also prepare environment property files such as:
158
+
159
+ properties/environments/development.yml
160
+
161
+ ```
162
+ attributes:
163
+ global:
164
+ aws_region: ap-northeast-1
165
+ ```
166
+
167
+ The `global` is a reserved name, the `global` is used to only store global attributes, and do not run `global` recipe.
168
+
169
+ These files are merged on kondate execution in order of `environment` + `role` + `node` (`node` > `role` > `environment` in the strong order).
155
170
 
156
171
  ### secret properties
157
172
 
@@ -161,7 +176,8 @@ Secret properties are places to write confidential attributes.
161
176
  ├── secrets # manages secrets attributes such as passwords
162
177
  │   └── properties
163
178
  │   ├── nodes
164
- │   └── roles
179
+ │   ├── roles
180
+ │   └── environments
165
181
  ```
166
182
 
167
183
  An example looks like below:
@@ -250,21 +266,28 @@ require 'yaml'
250
266
 
251
267
  module Kondate
252
268
  module HostPlugin
253
- class File
269
+ # YAML format
270
+ #
271
+ # host1: [role1, role2]
272
+ # host2: [role1, role2]
273
+ class File < Base
254
274
  # @param [HashWithIndifferentAccess] config
255
275
  def initialize(config)
276
+ super
256
277
  raise ConfigError.new('file: path is not configured') unless config.path
257
278
  @path = config.path
258
279
  end
259
280
 
281
+ # @param [String] host hostname
282
+ # @return [String] environment name
283
+ def get_environment(host)
284
+ ENV['ENVIRONMENT']
285
+ end
286
+
260
287
  # @param [String] host hostname
261
288
  # @return [Array] array of roles
262
289
  def get_roles(host)
263
- # YAML format
264
- #
265
- # host1: [role1, role2]
266
- # host2: [role1, role2]
267
- YAML.load_file(@path)[host]
290
+ YAML.load_file(@path)[host]['roles']
268
291
  end
269
292
  end
270
293
  end
data/lib/kondate.rb CHANGED
@@ -8,3 +8,4 @@ require "kondate/property_builder"
8
8
  require "kondate/hash_ext"
9
9
  require "kondate/string_util"
10
10
  require "kondate/error"
11
+ require "kondate/host_plugin/base"
data/lib/kondate/cli.rb CHANGED
@@ -34,6 +34,7 @@ module Kondate
34
34
  templates_dir = File.join(Kondate::ROOT, 'lib', 'kondate', 'templates')
35
35
  templates_dir_length = templates_dir.length
36
36
  Find.find(templates_dir).select {|f| File.file?(f) }.each do |src|
37
+ next if File.basename(src) == '.gitkeep'
37
38
  dst = File.join(target_dir, src[templates_dir_length+1 .. -1])
38
39
  dst_dir = File.dirname(dst)
39
40
  unless Dir.exist?(dst_dir)
@@ -94,8 +95,9 @@ module Kondate
94
95
 
95
96
  ENV['TARGET_NODE_FILE'] = property_file
96
97
  recipes = YAML.load_file(property_file)['attributes'].keys.map {|recipe|
98
+ next if recipe == 'global'
97
99
  File.join(Config.middleware_recipes_serverspec_dir, recipe)
98
- }
100
+ }.compact
99
101
  recipes << File.join(Config.roles_recipes_serverspec_dir, role)
100
102
  t.pattern = '{' + recipes.join(',') + '}_spec.rb'
101
103
  end
@@ -41,8 +41,10 @@ module Kondate
41
41
  'roles_recipes_serverspec_dir' => roles_recipes_serverspec_dir,
42
42
  'nodes_properties_dir' => nodes_properties_dir,
43
43
  'roles_properties_dir' => roles_properties_dir,
44
+ 'environments_properties_dir' => environments_properties_dir,
44
45
  'secret_nodes_properties_dir' => secret_nodes_properties_dir,
45
46
  'secret_roles_properties_dir' => secret_roles_properties_dir,
47
+ 'secret_environments_properties_dir' => secret_environments_properties_dir,
46
48
  }
47
49
  end
48
50
 
@@ -70,6 +72,10 @@ module Kondate
70
72
  config[:roles_properties_dir] || 'properties/roles'
71
73
  end
72
74
 
75
+ def environments_properties_dir
76
+ config[:environments_properties_dir] || 'properties/environments'
77
+ end
78
+
73
79
  def secret_nodes_properties_dir
74
80
  config[:secret_nodes_properties_dir] || 'secrets/properties/nodes'
75
81
  end
@@ -78,6 +84,10 @@ module Kondate
78
84
  config[:secret_roles_properties_dir] || 'secrets/properties/roles'
79
85
  end
80
86
 
87
+ def secret_environments_properties_dir
88
+ config[:secret_environments_properties_dir] || 'secrets/properties/environments'
89
+ end
90
+
81
91
  def plugin_dir
82
92
  File.expand_path(config[:plugin_dir] || 'lib')
83
93
  end
@@ -0,0 +1,24 @@
1
+ module Kondate
2
+ module HostPlugin
3
+ class Base
4
+ attr_reader :config
5
+
6
+ # @param [HashWithIndifferentAccess] config
7
+ def initialize(config)
8
+ @config = config
9
+ end
10
+
11
+ # @param [String] host hostname
12
+ # @return [String] environment name
13
+ def get_environment(host)
14
+ ENV['ENVIRONMENT']
15
+ end
16
+
17
+ # @param [String] host hostname
18
+ # @return [Array] array of roles
19
+ def get_roles(host)
20
+ raise NotImplementedError
21
+ end
22
+ end
23
+ end
24
+ end
@@ -2,17 +2,27 @@ require 'yaml'
2
2
 
3
3
  module Kondate
4
4
  module HostPlugin
5
- class File
5
+ # YAML format
6
+ #
7
+ # host1: [role1, role2]
8
+ # host2: [role1, role2]
9
+ class File < Base
10
+ # @param [HashWithIndifferentAccess] config
6
11
  def initialize(config)
12
+ super
7
13
  raise ConfigError.new('file: path is not configured') unless config.path
8
14
  @path = config.path
9
15
  end
10
16
 
17
+ # @param [String] host hostname
18
+ # @return [String] environment name
19
+ def get_environment(host)
20
+ ENV['ENVIRONMENT']
21
+ end
22
+
23
+ # @param [String] host hostname
24
+ # @return [Array] array of roles
11
25
  def get_roles(host)
12
- # YAML format
13
- #
14
- # host1: [role1, role2]
15
- # host2: [role1, role2]
16
26
  YAML.load_file(@path)[host]
17
27
  end
18
28
  end
@@ -9,6 +9,16 @@ module Kondate
9
9
  @host = host
10
10
  end
11
11
 
12
+ def environment
13
+ @environment ||=
14
+ begin
15
+ vagrant? ? '' : Config.host_plugin.get_environment(@host)
16
+ rescue => e
17
+ $stderr.puts "cannot get environment from host:#{@host}, #{e.class} #{e.message}"
18
+ ''
19
+ end
20
+ end
21
+
12
22
  def roles
13
23
  @roles ||=
14
24
  begin
@@ -58,6 +68,14 @@ module Kondate
58
68
  File.join(Config.secret_roles_properties_dir, "#{role}.yml")
59
69
  end
60
70
 
71
+ def environment_file(environment)
72
+ File.join(Config.environments_properties_dir, "#{environment}.yml")
73
+ end
74
+
75
+ def secret_environment_file(environment)
76
+ File.join(Config.secret_environments_properties_dir, "#{environment}.yml")
77
+ end
78
+
61
79
  def get_content(yaml_file)
62
80
  content = File.exist?(yaml_file) ? YAML.load_file(yaml_file) : {}
63
81
  content.is_a?(Hash) ? content : {}
@@ -69,16 +87,22 @@ module Kondate
69
87
  #
70
88
  # This file is automatically created and removed
71
89
  def install(role, filter_recipes = nil)
72
- node_property = get_content(node_file)
73
- secret_node_property = get_content(secret_node_file)
74
- role_property = get_content(role_file(role))
75
- secret_role_property = get_content(secret_role_file(role))
90
+ node_property = get_content(node_file)
91
+ secret_node_property = get_content(secret_node_file)
92
+ role_property = get_content(role_file(role))
93
+ secret_role_property = get_content(secret_role_file(role))
94
+ environment_property = get_content(environment_file(environment))
95
+ secret_environment_property = get_content(secret_environment_file(environment))
76
96
 
77
97
  property = HashExt.new.deep_merge!({
78
- 'role' => role,
79
- 'roles' => roles,
80
- 'attributes' => {},
81
- }).deep_merge!(role_property).
98
+ 'environment' => environment,
99
+ 'role' => role,
100
+ 'roles' => roles,
101
+ 'attributes' => {},
102
+ }).
103
+ deep_merge!(environment_property).
104
+ deep_merge!(secret_environment_property).
105
+ deep_merge!(role_property).
82
106
  deep_merge!(secret_role_property).
83
107
  deep_merge!(node_property).
84
108
  deep_merge!(secret_node_property).to_h
@@ -93,7 +117,7 @@ module Kondate
93
117
  if property['attributes'].empty?
94
118
  nil
95
119
  else
96
- Tempfile.open("provisioning_") do |fp|
120
+ Tempfile.open("kondate_") do |fp|
97
121
  YAML.dump(property, fp)
98
122
  end.path
99
123
  end
@@ -5,8 +5,10 @@ middleware_recipes_serverspec_dir: spec/middleware
5
5
  roles_recipes_serverspec_dir: spec/roles
6
6
  nodes_properties_dir: properties/nodes
7
7
  roles_properties_dir: properties/roles
8
+ environments_properties_dir: properties/environments
8
9
  secret_nodes_properties_dir: secrets/properties/nodes
9
10
  secret_roles_properties_dir: secrets/properties/roles
11
+ secret_environments_properties_dir: secrets/properties/environments
10
12
  plugin_dir: lib
11
13
  host_plugin:
12
14
  type: file
@@ -3,6 +3,7 @@ require 'kondate'
3
3
 
4
4
  recipes = node['attributes'].keys
5
5
  recipes.each do |recipe|
6
+ next if recipe == 'global'
6
7
  include_recipe(File.join(Kondate::Config.middleware_recipes_dir, recipe, "default.rb"))
7
8
  end
8
9
  if File.exist?(File.join(Kondate::Config.roles_recipes_dir, node[:role], "default.rb"))
File without changes
File without changes
File without changes
File without changes
@@ -1,3 +1,3 @@
1
1
  module Kondate
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kondate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - sonots
@@ -142,15 +142,24 @@ files:
142
142
  - lib/kondate/config.rb
143
143
  - lib/kondate/error.rb
144
144
  - lib/kondate/hash_ext.rb
145
+ - lib/kondate/host_plugin/base.rb
145
146
  - lib/kondate/host_plugin/file.rb
146
147
  - lib/kondate/property_builder.rb
147
148
  - lib/kondate/string_util.rb
148
149
  - lib/kondate/templates/.kondate.conf
149
150
  - lib/kondate/templates/bootstrap.rb
150
151
  - lib/kondate/templates/hosts.yml
152
+ - lib/kondate/templates/properties/environments/.gitkeep
153
+ - lib/kondate/templates/properties/nodes/.gitkeep
151
154
  - lib/kondate/templates/properties/roles/sample.yml
152
155
  - lib/kondate/templates/recipes/middleware/base/default.rb
156
+ - lib/kondate/templates/recipes/roles/.gitkeep
157
+ - lib/kondate/templates/secrets/properties/environments/.gitkeep
158
+ - lib/kondate/templates/secrets/properties/nodes/.gitkeep
159
+ - lib/kondate/templates/secrets/properties/roles/.gitkeep
160
+ - lib/kondate/templates/spec/middleware/.gitkeep
153
161
  - lib/kondate/templates/spec/middleware/base_spec.rb
162
+ - lib/kondate/templates/spec/roles/.gitkeep
154
163
  - lib/kondate/templates/spec/spec_helper.rb
155
164
  - lib/kondate/version.rb
156
165
  homepage: https://github.com/sonots/kondate