chapp 0.3.0 → 0.4.0

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: a55bf03c52c00bafbe28fa2f50706f45b0bdf0f5
4
- data.tar.gz: 5a386ad53a944249f1915531c3edd8eb53789a38
3
+ metadata.gz: df5a3ee559314be541400ce3f160eb2249a3eb33
4
+ data.tar.gz: c30c0a7a36926f19790ae97662f8f1994b436c7c
5
5
  SHA512:
6
- metadata.gz: 69b6a02ba6e2cd304007a3721ee56aa3cc9360e0b145010e0527a4b6fdb82413d0a616d2992afef06c9ab27077d60db664b3d78a5304ffe927d97fcd8d4bffdb
7
- data.tar.gz: e74ced9f3850c76c3fc8b075dc3a88fc03935fa8971ff337500a8187d7a5de759d628dc7e3b0ae2b9753c7db57ed77711647f20b6e80fbd1ed6f3df8a73d8dc1
6
+ metadata.gz: 7ffa4a00648cd946eae3a84c5261e29fb794af24dee1f6cd98bf883c17ac8972f61d5c4afb728beab8979982c93d6307b503e9d311c82b9a15ab30500e9be6d7
7
+ data.tar.gz: 85952443b0773e367700db08ef5eb1c6e8f4c113b22f7ea3b8fb122384e23b0d71472002f73c94c3f05a788b5edf7aebd15661c6457c04c90a790f009aad1651
@@ -6,8 +6,9 @@ module Chapp
6
6
 
7
7
  attr_reader :id, :attributes, :instances
8
8
 
9
- def initialize id, attributes, instances, db
9
+ def initialize id, id_hash, attributes, instances, db
10
10
  @id = id
11
+ @id_hash = id_hash
11
12
  @db = db
12
13
  @attributes = attributes
13
14
  @instances = instances
@@ -17,7 +18,7 @@ module Chapp
17
18
 
18
19
  def config
19
20
  unless @config
20
- @config = @db.app_config @id
21
+ @config = @db.app_config @id_hash
21
22
  end
22
23
 
23
24
  @config
@@ -27,7 +28,7 @@ module Chapp
27
28
  unless @connected_apps
28
29
  @connected_apps = Array.new
29
30
 
30
- @db.connected_app_ids(@id).each do |app_id|
31
+ @db.connected_app_ids(id_hash).each do |app_id|
31
32
  @connected_apps << @db.app(app_id)
32
33
  end
33
34
  end
@@ -3,10 +3,11 @@ require 'chapp'
3
3
  module Chapp
4
4
  class NodeApp < Chapp::App
5
5
 
6
- def initialize id, db, config, attributes, node_name, fqdn
7
- @id = id
6
+ def initialize app_config, db, attributes, node_name, fqdn
7
+ @id = app_config.id
8
+ @id_hash = app_config.id_hash
8
9
  @db = db
9
- @config = config
10
+ @config = app_config
10
11
  @fqdn = fqdn
11
12
  @node_name = node_name
12
13
  @attributes = attributes
@@ -17,7 +18,7 @@ module Chapp
17
18
 
18
19
  def instances
19
20
  unless @instances
20
- app = @db.app id
21
+ app = @db.app @id_hash
21
22
  app_instances = app.instances
22
23
  @instances = []
23
24
 
@@ -3,68 +3,66 @@ require 'chef/node/attribute'
3
3
 
4
4
  module Chapp
5
5
  class AppConfig
6
-
6
+
7
7
  # TODO: Define allowed characters (.)
8
-
8
+
9
9
  DEFAULT_RECIPE = "default"
10
-
10
+
11
11
  attr_reader :used_apps
12
12
  attr_reader :dependencies
13
-
13
+
14
14
  def self.from_file app_file
15
15
  appString = IO.read app_file
16
-
16
+
17
17
  app = AppConfig.new
18
18
  app.instance_eval appString
19
-
19
+
20
20
  app
21
21
  end
22
-
22
+
23
23
  def self.from_hash app_hash
24
24
  app = AppConfig.new
25
-
26
- app.group app_hash["group"]
25
+
26
+ app.name_space app_hash["name_space"]
27
27
  app.name app_hash["name"]
28
-
28
+
29
29
  app.pre_run_list app_hash["pre_run_list"]
30
30
  app.post_run_list app_hash["post_run_list"]
31
-
31
+
32
32
  app.run_list app_hash["run_list"]
33
-
33
+
34
34
  app_hash["dependencies"].each do |cookbook, version_constraint|
35
35
  app.depends cookbook, version_constraint
36
36
  end
37
-
38
- app_hash["used_apps"].each do |type, app_ids|
39
- app_ids.each do |app_id|
40
- app.uses type, app_id
41
- end
37
+
38
+ app_hash["used_apps"].each do |app_id|
39
+ app.uses app_id
42
40
  end
43
-
41
+
44
42
  app.cloud app_hash["cloud"]
45
-
43
+
46
44
  app.node Chef::Node::Attribute.new({}, app_hash["node"], {}, {}).default
47
45
  app.environment app_hash["environment"]
48
-
46
+
49
47
  if app_hash.include? "type"
50
48
  app.type app_hash["type"]
51
49
  end
52
-
50
+
53
51
  if app_hash.include? "recipe"
54
52
  app.recipe app_hash["recipe"]
55
53
  end
56
-
54
+
57
55
  if app_hash.include? "cookbook"
58
56
  app.cookbook app_hash["cookbook"]
59
57
  end
60
-
58
+
61
59
  app
62
60
  end
63
-
61
+
64
62
  def initialize
65
- @group = nil
63
+ @name_space = Hash.new
66
64
  @name = nil
67
- @used_apps = Hash.new
65
+ @used_apps = Array.new
68
66
  @cloud = Hash.new
69
67
  @dependencies = Hash.new
70
68
  @pre_run_list = Array.new
@@ -76,52 +74,55 @@ module Chapp
76
74
  @recipe = nil
77
75
  @cookbook = nil
78
76
  end
79
-
80
- def group group=nil
81
- set_or_return :group, group
77
+
78
+ def name_space name_space=nil
79
+ set_or_return :name_space, name_space
82
80
  end
83
-
81
+
84
82
  def name name=nil
85
83
  set_or_return :name, name
86
84
  end
87
-
85
+
88
86
  def id
89
- "#{group}_#{name}"
87
+ hash = name_space.clone
88
+ hash["name"] = name
89
+ hash.sort_by{|k,v| k.to_s}.map{|k,v| "#{k}_#{v}"}.join("_")
90
+ end
91
+
92
+ def id_hash
93
+ hash = name_space.clone
94
+ hash["name"] = name
95
+ hash
90
96
  end
91
-
97
+
92
98
  def role_name
93
99
  "chapp_#{id}"
94
100
  end
95
-
101
+
96
102
  def environment_name
97
103
  "chapp_#{id}"
98
104
  end
99
-
100
- def uses type, app
101
-
102
- unless @used_apps.has_key? type
103
- @used_apps[type] = Array.new
104
- end
105
-
106
- @used_apps[type].push app
105
+
106
+ def uses app_id
107
+ @used_apps << app_id
107
108
  end
108
-
109
+
109
110
  def cookbook cookbook=nil
110
111
  set_or_return_with_default :cookbook, @name, cookbook
111
112
  end
112
-
113
+
113
114
  def recipe recipe=nil
114
115
  set_or_return_with_default :recipe, DEFAULT_RECIPE, recipe
115
116
  end
116
-
117
+
117
118
  def type type=nil
118
119
  set_or_return_with_default :type, cookbook, type
119
120
  end
120
-
121
+
121
122
  def depends cookbook, version_constraint
122
123
  @dependencies.store cookbook, version_constraint
123
124
  end
124
-
125
+
125
126
  def pre_run_list *recipes
126
127
  if recipes.length > 0
127
128
  @pre_run_list = recipes
@@ -129,7 +130,7 @@ module Chapp
129
130
  @pre_run_list
130
131
  end
131
132
  end
132
-
133
+
133
134
  def post_run_list *recipes
134
135
  if recipes.length > 0
135
136
  @post_run_list = recipes
@@ -137,57 +138,57 @@ module Chapp
137
138
  @post_run_list
138
139
  end
139
140
  end
140
-
141
+
141
142
  def node node=nil
142
143
  set_or_return :node, node
143
144
  end
144
-
145
+
145
146
  def cloud cloud=nil
146
147
  set_or_return :cloud, cloud
147
148
  end
148
-
149
+
149
150
  def run_list run_list=nil
150
151
  set_or_return :run_list, run_list
151
152
  end
152
-
153
+
153
154
  def environment environment=nil
154
155
  set_or_return :environment, environment
155
156
  end
156
-
157
+
157
158
  def to_hash
158
159
  hash = Hash.new
159
-
160
- hash.store "group", group
160
+
161
+ hash.store "name_space", name_space
161
162
  hash.store "name", name
162
163
  hash.store "used_apps", used_apps
163
-
164
+
164
165
  hash.store "cloud", cloud
165
-
166
+
166
167
  hash.store "pre_run_list", pre_run_list
167
168
  hash.store "post_run_list", post_run_list
168
-
169
+
169
170
  hash.store "dependencies", dependencies
170
-
171
+
171
172
  hash.store "node", node.to_hash
172
173
  hash.store "environment", environment
173
-
174
+
174
175
  if @type
175
176
  hash.store "type", type
176
177
  end
177
-
178
+
178
179
  if @recipe
179
180
  hash.store "recipe", recipe
180
181
  end
181
-
182
+
182
183
  if @cookbook
183
184
  hash.store "cookbook", cookbook
184
185
  end
185
-
186
+
186
187
  hash
187
188
  end
188
-
189
+
189
190
  private
190
-
191
+
191
192
  def set_or_return(symbol, arg)
192
193
  iv_symbol = "@#{symbol.to_s}".to_sym
193
194
  if arg.nil?
@@ -196,7 +197,7 @@ module Chapp
196
197
  self.instance_variable_set(iv_symbol, arg)
197
198
  end
198
199
  end
199
-
200
+
200
201
  def set_or_return_with_default(symbol, default_val, arg)
201
202
  iv_symbol = "@#{symbol.to_s}".to_sym
202
203
  if arg.nil?
@@ -210,6 +211,6 @@ module Chapp
210
211
  self.instance_variable_set(iv_symbol, arg)
211
212
  end
212
213
  end
213
-
214
+
214
215
  end
215
- end
216
+ end
@@ -18,17 +18,19 @@ module Chapp
18
18
  def app_config app_id
19
19
 
20
20
  unless app_exists? app_id
21
- raise AppNotExistsException.new, "App [#{app_id}] does not exist"
21
+ raise AppNotExistsException.new, "App #{app_id_hash} does not exist"
22
22
  end
23
23
 
24
- AppConfig.from_hash apps_config_databag_item(app_id).raw_data["app"]
24
+ AppConfig.from_hash apps_config_databag_item(hash_to_app_id(app_id)).raw_data["app"]
25
+
25
26
  end
26
27
 
27
28
  def app_exists? app_id
28
- apps_config_databag.has_key? app_id
29
+ apps_config_databag.has_key? hash_to_app_id(app_id)
29
30
  end
30
31
 
31
32
  def connected_app_ids app_id
33
+ # TODO: Does not work
32
34
  app_ids = Array.new
33
35
 
34
36
  query = Chef::Search::Query.new
@@ -49,6 +51,7 @@ module Chapp
49
51
 
50
52
  attributes = app_config.node
51
53
  attributes["chapp"]["app_id"] = app_config.id
54
+ attributes["chapp"]["app_hash_id"] = app_config.id_hash
52
55
 
53
56
  # Build/Save role
54
57
  role = Chef::Role.new
@@ -84,20 +87,23 @@ module Chapp
84
87
 
85
88
  end
86
89
 
87
- def delete_app app_name
90
+ def delete_app app_id_hash
88
91
  # TODO (not necessary for now)
89
92
  # Delete role/environment, app config databag item, app attribute databag item, app instances
90
93
  end
91
94
 
92
95
  def app app_id
96
+
97
+ id = hash_to_app_id(app_id)
98
+
93
99
  app_instances = []
94
100
  app_attributes = {}
95
101
  latest_time = 0
96
102
 
97
103
  query = Chef::Search::Query.new
98
104
  # TODO Figure out how to get role name more appropriately
99
- query.search(:node, "role:chapp_#{app_id}") do |node|
100
- app_instances.push Chapp::AppInstance.new(app_id, node.name, node["fqdn"])
105
+ query.search(:node, "role:chapp_#{id}") do |node|
106
+ app_instances.push Chapp::AppInstance.new(id, node.name, node["fqdn"])
101
107
 
102
108
  if node.has_key?("ohai_time") && node.has_key?("chapp") && node["chapp"].has_key?("app_attributes") && node["ohai_time"] > latest_time
103
109
  latest_time = node["ohai_time"]
@@ -105,7 +111,7 @@ module Chapp
105
111
  end
106
112
  end
107
113
 
108
- Chapp::App.new app_id, app_attributes, app_instances, self
114
+ Chapp::App.new id, app_id, app_attributes, app_instances, self
109
115
  end
110
116
 
111
117
  def write_app_instance app_instance
@@ -116,21 +122,15 @@ module Chapp
116
122
  # TODO: Delete node/client (not necessary for now)
117
123
  end
118
124
 
119
- def app_attributes app_id
120
- databag = app_attributes_databag
121
-
122
- unless databag.has_key? app_id
123
- raise AppAttributesNotExistsException.new, "Attributes for app [#{app_id}] do not exist"
124
- end
125
-
126
- app_attributes_databag_item(app_id).raw_data["app_attributes"]
127
- end
128
-
129
125
  class AppAttributesNotExistsException < StandardError; end
130
126
  class AppNotExistsException < StandardError; end
131
127
 
132
128
  private
133
129
 
130
+ def hash_to_app_id app_id_hash
131
+ app_id_hash.sort.map{|k,v| "#{k}_#{v}"}.join("_")
132
+ end
133
+
134
134
  def apps_config_databag
135
135
  get_or_create_databag APPS_CONFIG_DATA_BAG_NAME
136
136
  end
@@ -1,67 +1,73 @@
1
1
  require 'chapp'
2
- require 'aws'
2
+ require 'aws-sdk'
3
+ require 'chef_metal/transport/ssh'
3
4
 
4
5
  module Chapp
5
6
  class EC2Provisioner < Chapp::Provisioner
6
-
7
+
7
8
  # Knife config
8
9
  ACCESS_KEY = "ec2_access_key_id"
9
10
  SECRET_KEY = "ec2_secret_access_key"
10
11
  KEY_PAIR = "ec2_key_pair"
11
-
12
+
12
13
  # App config
13
14
  IMAGE_ID = "image_id"
14
15
  INSTANCE_TYPE = "instance_type"
15
-
16
+
16
17
  def build_server app_config, properties
17
-
18
+
18
19
  errors = []
19
-
20
+
20
21
  access_key = Chef::Config[ACCESS_KEY]
21
22
  secret_key = Chef::Config[SECRET_KEY]
22
23
  key_pair = Chef::Config[KEY_PAIR]
23
-
24
+
24
25
  if access_key.nil?
25
26
  errors << "#{ACCESS_KEY} must be specified in your knife config"
26
27
  end
27
-
28
+
28
29
  if secret_key.nil?
29
30
  errors << "#{SECRET_KEY} must be specified in your knife config"
30
31
  end
31
-
32
+
32
33
  if key_pair.nil?
33
34
  errors << "#{KEY_PAIR} must be specified in your knife config"
34
35
  end
35
-
36
+
36
37
  unless app_config.cloud.has_key? IMAGE_ID
37
38
  errors << "#{IMAGE_ID} must be specified in your app's cloud config"
38
39
  end
39
-
40
+
40
41
  unless app_config.cloud.has_key? INSTANCE_TYPE
41
42
  errors << "#{INSTANCE_TYPE} must be specified in your app's cloud config"
42
43
  end
43
-
44
+
44
45
  image_id = app_config.cloud[IMAGE_ID]
45
46
  instance_type = app_config.cloud[INSTANCE_TYPE]
46
-
47
+
47
48
  ec2 = AWS::EC2.new(:access_key_id => access_key, :secret_access_key => secret_key)
48
-
49
+
49
50
  instance = ec2.instances.create(
50
51
  :image_id => image_id,
51
52
  :instance_type => instance_type,
52
53
  :key_pair => ec2.key_pairs[key_pair]
53
54
  )
54
-
55
+
55
56
  puts "Waiting for new instance with id #{instance.id} to become available..."
56
57
  sleep 1 while instance.status == :pending
57
-
58
+
58
59
  puts "#{instance.dns_name} is ready"
60
+ puts "Waiting for host to finish booting ..."
59
61
 
60
62
  # TODO: Wait for SSH to become available
61
- sleep 70
63
+ ssh = ChefMetal::Transport::SSH.new instance.dns_name, "root", {:keys => [Chef::Config[:knife][:identity_file]]}, {}, {}
64
+
65
+ while !ssh.available?
66
+ sleep 5
67
+ end
62
68
 
63
69
  instance.dns_name
64
70
  end
65
-
71
+
66
72
  end
67
73
  end
@@ -2,30 +2,31 @@ require 'chapp'
2
2
  require 'chapp/app/node_app'
3
3
 
4
4
  module Chapp
5
-
5
+
6
6
  class Wiring
7
-
7
+
8
8
  attr_reader :node
9
-
9
+
10
10
  def initialize app_config, db, node
11
11
  @used_apps = Hash.new
12
-
12
+
13
13
  @db = db
14
14
  @node = node
15
- @app = Chapp::NodeApp.new app_config.id, db, app_config, node.default["chapp"]["app_attributes"],
16
- Chef::Config[:node_name], node["fqdn"]
17
-
18
- app_config.used_apps.each do |type, app_ids|
15
+ @app = Chapp::NodeApp.new app_config, db, node.default["chapp"]["app_attributes"],
16
+ Chef::Config[:node_name], node["fqdn"]
17
+
18
+ app_config.used_apps.each do |app_id|
19
+ used_app = @db.app app_id
20
+ type = used_app.config.type
21
+
19
22
  unless @used_apps.has_key? type
20
23
  @used_apps[type] = Array.new
21
24
  end
22
-
23
- app_ids.each do |app_id|
24
- @used_apps[type] << app_id
25
- end
25
+
26
+ @used_apps[type] << used_app
26
27
  end
27
28
  end
28
-
29
+
29
30
  def app type=nil
30
31
  if type.nil?
31
32
  @app
@@ -33,23 +34,23 @@ module Chapp
33
34
  unless @used_apps.has_key? type
34
35
  raise "App does not use app of type [#{type}]"
35
36
  end
36
-
37
+
37
38
  if @used_apps[type].size > 1
38
39
  raise "App uses many apps of [#{type}]"
39
40
  end
40
-
41
- @db.app @used_apps[type].first
41
+
42
+ @used_apps[type].first
42
43
  end
43
44
  end
44
-
45
+
45
46
  def apps type
46
47
  unless @used_apps.has_key? type
47
48
  raise "App does not use app of type [#{type}]"
48
49
  end
49
-
50
- @db.app @used_apps[type]
50
+
51
+ @used_apps[type]
51
52
  end
52
-
53
+
53
54
  end
54
-
55
+
55
56
  end
@@ -6,88 +6,86 @@ require 'chapp'
6
6
  class Chef
7
7
  class Knife
8
8
  class AppInstanceCreate < Chef::Knife::Bootstrap
9
-
9
+
10
10
  banner "knife app instance create app_id [properties] (options)"
11
11
  category "app instance"
12
-
12
+
13
13
  def initialize arguments
14
14
  bootstrap = Chef::Knife::Bootstrap.new
15
-
15
+
16
16
  bootstrap.options.each do |name, args|
17
17
  AppInstanceCreate.option name, args
18
18
  end
19
-
19
+
20
20
  Chef::Knife::Bootstrap.load_deps
21
-
21
+
22
22
  super arguments
23
23
  end
24
-
24
+
25
25
  # This method will be executed when you run this knife command.
26
26
  def run
27
-
27
+
28
28
  # Get Arguments
29
29
  if @name_args.size < 1
30
30
  ui.info("Please specify an app_id")
31
31
  show_usage
32
32
  exit 1
33
33
  end
34
-
35
- app_id = @name_args[0]
34
+
35
+ app_id = {}
36
+ @name_args[0].split(" ").each do |id_arg|
37
+ key_value = id_arg.split("=")
38
+ app_id[key_value.first] = key_value.last
39
+ end
40
+
36
41
  properties = parse_properties @name_args[1, @name_args.size]
37
-
42
+
38
43
  db = Chapp.database
39
44
  provisioner = Chapp.provisioner
40
-
45
+
41
46
  app_config = db.app_config app_id
42
-
47
+
43
48
  # Provision the server and retrieve the host name
44
49
  host = provisioner.build_server app_config, properties
45
-
50
+
46
51
  properties.each do |key, value|
47
52
  @config[key.to_sym] = value
48
53
  end
49
-
54
+
50
55
  # Tells bootstrap what environment to use
51
56
  Chef::Config[:environment] = app_config.environment_name
52
-
57
+
53
58
  # Tells bootstrap what run_list to use
54
59
  @config[:run_list] = "role[#{app_config.role_name}]"
55
-
60
+
56
61
  # Tells bootstrap what node name to use
57
62
  @config[:chef_node_name] = host
58
-
63
+
59
64
  # Tells bootstrap what ip/fqdn to use
60
65
  @name_args = host
61
-
66
+
62
67
  # Runs bootstrap
63
68
  super
64
-
65
- # We have to save the node here since bootstrap wont actually assign the run_list
66
- node = Node.new
67
- node.name host
68
- node.run_list = Chef::RunList.new "role[#{app_config.role_name}]"
69
- node.chef_environment = app_config.environment_name
70
- node.save
71
69
  end
72
-
70
+
73
71
  private
74
-
72
+
75
73
  def parse_properties properties
76
74
  hash = Hash.new
77
-
75
+
78
76
  properties.each do |property|
79
77
  key_value = property.split "="
80
-
78
+
81
79
  unless key_value.size == 2
82
80
  raise "Property #{property} is missing ="
83
81
  end
84
-
82
+
85
83
  hash[key_value.first] = key_value[1]
86
84
  end
87
-
85
+
88
86
  hash
89
87
  end
90
-
88
+
91
89
  end
92
90
  end
93
- end
91
+ end
@@ -4,73 +4,79 @@ require 'chapp'
4
4
  class Chef
5
5
  class Knife
6
6
  class AppShow < Chef::Knife
7
-
7
+
8
8
  banner "knife app show app_id (options)"
9
9
  category "app"
10
-
10
+
11
11
  # This method will be executed when you run this knife command.
12
12
  def run
13
-
13
+
14
14
  # Get Arguments
15
15
  if @name_args.size != 1
16
16
  ui.info("Please specify an app_id")
17
17
  show_usage
18
18
  exit 1
19
19
  end
20
-
21
- app_id = @name_args[0]
22
-
20
+
21
+ app_id = {}
22
+ @name_args[0].split(" ").each do |id_arg|
23
+ key_value = id_arg.split("=")
24
+ app_id[key_value.first] = key_value.last
25
+ end
26
+
23
27
  app = Chapp.database.app app_id
24
-
28
+
25
29
  app_config = app.config
26
-
30
+
27
31
  puts "App :"
28
32
  puts " id : #{app_config.id}"
29
- puts " group : #{app_config.group}"
33
+
34
+ puts " name_space :"
35
+ print_hash app_config.name_space
36
+
30
37
  puts " name : #{app_config.name}"
31
38
  puts " type : #{app_config.type}"
32
39
  puts " cookbook : #{app_config.cookbook}"
33
40
  puts " recipe : #{app_config.recipe}"
34
- puts " cloud : #{app_config.cloud}"
35
-
41
+
42
+ puts " cloud :"
43
+ print_hash app_config.cloud
44
+
36
45
  puts " used_apps :"
37
- app_config.used_apps.each do |type, used_app_ids|
38
- puts " #{type} :"
39
- used_app_ids.each do |used_app_id|
40
- puts " #{used_app_id}"
41
- end
46
+ app_config.used_apps.each do |used_app|
47
+ print_hash used_app
42
48
  end
43
-
49
+
44
50
  puts " node :"
45
51
  print_hash app_config.node
46
-
52
+
47
53
  puts " dependencies :"
48
54
  app_config.dependencies.each do |cookbook, version_constraint|
49
55
  puts " #{cookbook} #{version_constraint}"
50
56
  end
51
-
57
+
52
58
  puts " pre_run_list :"
53
59
  app_config.pre_run_list.each do |run_list_item|
54
60
  puts " #{run_list_item}"
55
61
  end
56
-
62
+
57
63
  puts " post_run_list :"
58
64
  app_config.post_run_list.each do |run_list_item|
59
65
  puts " #{run_list_item}"
60
66
  end
61
-
67
+
62
68
  puts ""
63
-
69
+
64
70
  puts "App Attributes :"
65
71
  print_hash app.attributes, 2
66
-
72
+
67
73
  puts "App Instances :"
68
74
  app.instances.each do |app_instance|
69
75
  puts " #{app_instance.fqdn}"
70
76
  end
71
-
77
+
72
78
  end
73
-
79
+
74
80
  def print_hash hash, spacing=4
75
81
  hash.each do |key, value|
76
82
  if !value.is_a? Hash
@@ -81,7 +87,7 @@ class Chef
81
87
  end
82
88
  end
83
89
  end
84
-
90
+
85
91
  end
86
92
  end
87
- end
93
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Baugher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-16 00:00:00.000000000 Z
11
+ date: 2014-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef
@@ -25,19 +25,47 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '11.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: aws
28
+ name: aws-sdk
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: '2.10'
33
+ version: '1.47'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: '2.10'
40
+ version: '1.47'
41
+ - !ruby/object:Gem::Dependency
42
+ name: chef-metal
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.13'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.13'
55
+ - !ruby/object:Gem::Dependency
56
+ name: cheffish
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.6.2
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 0.6.2
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rake
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -94,9 +122,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
122
  version: '0'
95
123
  requirements: []
96
124
  rubyforge_project: nowarning
97
- rubygems_version: 2.0.3
125
+ rubygems_version: 2.0.14
98
126
  signing_key:
99
127
  specification_version: 4
100
128
  summary: A Chef knife plugin for creating Chef Apps
101
129
  test_files: []
102
- has_rdoc: