kondate 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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