knife-cfn 0.1.10 → 0.1.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -34,6 +34,46 @@ class Chef
34
34
  :long => "--long",
35
35
  :description => "Use long stack names (ARN) instead of friendly names"
36
36
 
37
+ option :aws_credential_file,
38
+ :long => "--aws-credential-file FILE",
39
+ :description => "File containing AWS credentials as used by aws cmdline tools",
40
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_credential_file] = key }
41
+
42
+ option :aws_profile,
43
+ :long => "--aws-profile PROFILE",
44
+ :description => "AWS profile, from credential file, to use",
45
+ :default => 'default',
46
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_profile] = key }
47
+
48
+ option :aws_access_key_id,
49
+ :short => "-A ID",
50
+ :long => "--aws-access-key-id KEY",
51
+ :description => "Your AWS Access Key ID",
52
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_access_key_id] = key }
53
+
54
+ option :aws_secret_access_key,
55
+ :short => "-K SECRET",
56
+ :long => "--aws-secret-access-key SECRET",
57
+ :description => "Your AWS API Secret Access Key",
58
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_secret_access_key] = key }
59
+
60
+ option :aws_session_token,
61
+ :long => "--aws-session-token TOKEN",
62
+ :description => "Your AWS Session Token, for use with AWS STS Federation or Session Tokens",
63
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_session_token] = key }
64
+
65
+ option :region,
66
+ :long => "--region REGION",
67
+ :description => "Your AWS region",
68
+ :proc => Proc.new { |key| Chef::Config[:knife][:region] = key }
69
+
70
+ option :use_iam_profile,
71
+ :long => "--use-iam-profile",
72
+ :description => "Use IAM profile assigned to current machine",
73
+ :boolean => true,
74
+ :default => false,
75
+ :proc => Proc.new { |key| Chef::Config[:knife][:use_iam_profile] = key }
76
+
37
77
  def run
38
78
  $stdout.sync = true
39
79
 
@@ -18,29 +18,69 @@ require 'chef/knife/cfn_base'
18
18
  class Chef
19
19
  class Knife
20
20
  class CfnEvents < Chef::Knife::CfnBase
21
-
21
+
22
22
  deps do
23
23
  require 'fog'
24
24
  require 'readline'
25
25
  require 'chef/json_compat'
26
26
  require 'chef/knife/bootstrap'
27
27
  Chef::Knife::Bootstrap.load_deps
28
- end
28
+ end
29
29
 
30
30
  banner "knife cfn events <stack name>"
31
31
 
32
+ option :aws_credential_file,
33
+ :long => "--aws-credential-file FILE",
34
+ :description => "File containing AWS credentials as used by aws cmdline tools",
35
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_credential_file] = key }
36
+
37
+ option :aws_profile,
38
+ :long => "--aws-profile PROFILE",
39
+ :description => "AWS profile, from credential file, to use",
40
+ :default => 'default',
41
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_profile] = key }
42
+
43
+ option :aws_access_key_id,
44
+ :short => "-A ID",
45
+ :long => "--aws-access-key-id KEY",
46
+ :description => "Your AWS Access Key ID",
47
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_access_key_id] = key }
48
+
49
+ option :aws_secret_access_key,
50
+ :short => "-K SECRET",
51
+ :long => "--aws-secret-access-key SECRET",
52
+ :description => "Your AWS API Secret Access Key",
53
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_secret_access_key] = key }
54
+
55
+ option :aws_session_token,
56
+ :long => "--aws-session-token TOKEN",
57
+ :description => "Your AWS Session Token, for use with AWS STS Federation or Session Tokens",
58
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_session_token] = key }
59
+
60
+ option :region,
61
+ :long => "--region REGION",
62
+ :description => "Your AWS region",
63
+ :proc => Proc.new { |key| Chef::Config[:knife][:region] = key }
64
+
65
+ option :use_iam_profile,
66
+ :long => "--use-iam-profile",
67
+ :description => "Use IAM profile assigned to current machine",
68
+ :boolean => true,
69
+ :default => false,
70
+ :proc => Proc.new { |key| Chef::Config[:knife][:use_iam_profile] = key }
71
+
32
72
  def run
33
73
  $stdout.sync = true
34
74
 
35
75
  validate!
36
-
76
+
37
77
  stack_name = @name_args[0]
38
-
39
- if stack_name.nil?
40
- show_usage
41
- ui.error("You must specify a stack name")
42
- exit 1
43
- end
78
+
79
+ if stack_name.nil?
80
+ show_usage
81
+ ui.error("You must specify a stack name")
82
+ exit 1
83
+ end
44
84
 
45
85
  events_list = [
46
86
  ui.color('Event ID', :bold),
@@ -53,12 +93,12 @@ class Chef
53
93
  ui.color('Resource Status Reason', :bold)
54
94
  ]
55
95
  @name_args.each do |stack_name|
56
- data = Array.new
57
- begin
96
+ data = Array.new
97
+ begin
58
98
  response = connection.describe_stack_events(stack_name)
59
99
  data = response.body['StackEvents']
60
100
  rescue Excon::Errors::BadRequest => e
61
- i= e.response.body.index("<Message>")
101
+ i= e.response.body.index("<Message>")
62
102
  j = e.response.body.index("</Message>")
63
103
  if !i.nil? and !j.nil?
64
104
  ui.error(e.response.body[i+9,j-i-9])
@@ -67,7 +107,7 @@ class Chef
67
107
  end
68
108
  exit 1
69
109
  else
70
- data.each do |event|
110
+ data.each do |event|
71
111
  events_list << event['EventId']
72
112
  events_list << event['StackId']
73
113
  events_list << event['LogicalResourceId']
@@ -1,108 +1,148 @@
1
- #
2
- # Licensed under the Apache License, Version 2.0 (the "License");
3
- # you may not use this file except in compliance with the License.
4
- # You may obtain a copy of the License at
5
- #
6
- # http://www.apache.org/licenses/LICENSE-2.0
7
- #
8
- # Unless required by applicable law or agreed to in writing, software
9
- # distributed under the License is distributed on an "AS IS" BASIS,
10
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
- # See the License for the specific language governing permissions and
12
- # limitations under the License.
13
- #
14
-
15
- require 'chef/knife'
16
- require 'chef/knife/cfn_base'
17
-
18
- class Chef
19
- class Knife
20
- class CfnOutputs < Chef::Knife::CfnBase
21
-
22
- deps do
23
- require 'fog'
24
- require 'readline'
25
- require 'chef/json_compat'
26
- require 'chef/knife/bootstrap'
27
- Chef::Knife::Bootstrap.load_deps
28
- end
29
-
30
- banner "knife cfn outputs <stack name>"
31
-
32
- option :output_parameter_format,
33
- :short => "-o",
34
- :long => "--output_parameter_format",
35
- :description => "Stack output is formatted in a suitable syntax to use for parameters for another stack",
36
- :proc => Proc.new{ |o| Chef::Config[:knife][:output_format] = "parameter" }
37
-
38
- def run
39
- $stdout.sync = true
40
-
41
- validate!
42
-
43
- stack_name = @name_args[0]
44
- if stack_name.nil?
45
- show_usage
46
- ui.error("You must specify a stack name")
47
- exit 1
48
- end
49
-
50
- outputs_list = [
51
- ui.color("Stack", :bold),
52
- ui.color('Output Key', :bold),
53
- ui.color('Output Value', :bold),
54
- ui.color('Description', :bold)
55
- ]
56
-
57
- @name_args.each do |stack_name|
58
- options = {}
59
- options["StackName"] = stack_name
60
- data = Array.new
61
- begin
62
- response = connection.describe_stacks(options)
63
- data = response.body["Stacks"]
64
-
65
- rescue Excon::Errors::BadRequest => e
66
- i= e.response.body.index("<Message>")
67
- j = e.response.body.index("</Message>")
68
- if !i.nil? and !j.nil?
69
- ui.error(e.response.body[i+9,j-i-9])
70
- else
71
- print "\n#{e.response.body}"
72
- end
73
- exit 1
74
- else
75
- parameter_output=""
76
- delim=""
77
- data.each do |stack|
78
- row1 = true
79
- parameter_output += delim
80
- delim="\n"
81
- parameter_output+=stack["StackName"] + ": "
82
- outputs_list << stack["StackName"]
83
- stack["Outputs"].each do |output|
84
- if !row1
85
- outputs_list << ""
86
- parameter_output += ";"
87
- end
88
- outputs_list << output["OutputKey"]
89
- outputs_list << output["OutputValue"]
90
- outputs_list << output["Description"]
91
- parameter_output += output["OutputKey"] + "=" + output["OutputValue"]
92
- row1 = false
93
- end
94
- end
95
- if locate_config_value(:output_format) == "parameter"
96
- puts parameter_output
97
- else
98
- puts ui.list(outputs_list, :uneven_columns_across, 4)
99
- end
100
-
101
- end
102
- end
103
- end
104
- end
105
- end
106
- end
107
-
108
-
1
+ #
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+ #
14
+
15
+ require 'chef/knife'
16
+ require 'chef/knife/cfn_base'
17
+
18
+ class Chef
19
+ class Knife
20
+ class CfnOutputs < Chef::Knife::CfnBase
21
+
22
+ deps do
23
+ require 'fog'
24
+ require 'readline'
25
+ require 'chef/json_compat'
26
+ require 'chef/knife/bootstrap'
27
+ Chef::Knife::Bootstrap.load_deps
28
+ end
29
+
30
+ banner "knife cfn outputs <stack name>"
31
+
32
+ option :output_parameter_format,
33
+ :short => "-o",
34
+ :long => "--output_parameter_format",
35
+ :description => "Stack output is formatted in a suitable syntax to use for parameters for another stack",
36
+ :proc => Proc.new{ |o| Chef::Config[:knife][:output_format] = "parameter" }
37
+
38
+ option :aws_credential_file,
39
+ :long => "--aws-credential-file FILE",
40
+ :description => "File containing AWS credentials as used by aws cmdline tools",
41
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_credential_file] = key }
42
+
43
+ option :aws_profile,
44
+ :long => "--aws-profile PROFILE",
45
+ :description => "AWS profile, from credential file, to use",
46
+ :default => 'default',
47
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_profile] = key }
48
+
49
+ option :aws_access_key_id,
50
+ :short => "-A ID",
51
+ :long => "--aws-access-key-id KEY",
52
+ :description => "Your AWS Access Key ID",
53
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_access_key_id] = key }
54
+
55
+ option :aws_secret_access_key,
56
+ :short => "-K SECRET",
57
+ :long => "--aws-secret-access-key SECRET",
58
+ :description => "Your AWS API Secret Access Key",
59
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_secret_access_key] = key }
60
+
61
+ option :aws_session_token,
62
+ :long => "--aws-session-token TOKEN",
63
+ :description => "Your AWS Session Token, for use with AWS STS Federation or Session Tokens",
64
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_session_token] = key }
65
+
66
+ option :region,
67
+ :long => "--region REGION",
68
+ :description => "Your AWS region",
69
+ :proc => Proc.new { |key| Chef::Config[:knife][:region] = key }
70
+
71
+ option :use_iam_profile,
72
+ :long => "--use-iam-profile",
73
+ :description => "Use IAM profile assigned to current machine",
74
+ :boolean => true,
75
+ :default => false,
76
+ :proc => Proc.new { |key| Chef::Config[:knife][:use_iam_profile] = key }
77
+
78
+ def run
79
+ $stdout.sync = true
80
+
81
+ validate!
82
+
83
+ stack_name = @name_args[0]
84
+ if stack_name.nil?
85
+ show_usage
86
+ ui.error("You must specify a stack name")
87
+ exit 1
88
+ end
89
+
90
+ outputs_list = [
91
+ ui.color("Stack", :bold),
92
+ ui.color('Output Key', :bold),
93
+ ui.color('Output Value', :bold),
94
+ ui.color('Description', :bold)
95
+ ]
96
+
97
+ @name_args.each do |stack_name|
98
+ options = {}
99
+ options["StackName"] = stack_name
100
+ data = Array.new
101
+ begin
102
+ response = connection.describe_stacks(options)
103
+ data = response.body["Stacks"]
104
+
105
+ rescue Excon::Errors::BadRequest => e
106
+ i= e.response.body.index("<Message>")
107
+ j = e.response.body.index("</Message>")
108
+ if !i.nil? and !j.nil?
109
+ ui.error(e.response.body[i+9,j-i-9])
110
+ else
111
+ print "\n#{e.response.body}"
112
+ end
113
+ exit 1
114
+ else
115
+ parameter_output=""
116
+ delim=""
117
+ data.each do |stack|
118
+ row1 = true
119
+ parameter_output += delim
120
+ delim="\n"
121
+ parameter_output+=stack["StackName"] + ": "
122
+ outputs_list << stack["StackName"]
123
+ stack["Outputs"].each do |output|
124
+ if !row1
125
+ outputs_list << ""
126
+ parameter_output += ";"
127
+ end
128
+ outputs_list << output["OutputKey"]
129
+ outputs_list << output["OutputValue"]
130
+ outputs_list << output["Description"]
131
+ parameter_output += output["OutputKey"] + "=" + output["OutputValue"]
132
+ row1 = false
133
+ end
134
+ end
135
+ if locate_config_value(:output_format) == "parameter"
136
+ puts parameter_output
137
+ else
138
+ puts ui.list(outputs_list, :uneven_columns_across, 4)
139
+ end
140
+
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+
@@ -1,86 +1,126 @@
1
- #
2
- # Licensed under the Apache License, Version 2.0 (the "License");
3
- # you may not use this file except in compliance with the License.
4
- # You may obtain a copy of the License at
5
- #
6
- # http://www.apache.org/licenses/LICENSE-2.0
7
- #
8
- # Unless required by applicable law or agreed to in writing, software
9
- # distributed under the License is distributed on an "AS IS" BASIS,
10
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
- # See the License for the specific language governing permissions and
12
- # limitations under the License.
13
- #
14
-
15
- require 'chef/knife'
16
- require 'chef/knife/cfn_base'
17
-
18
- class Chef
19
- class Knife
20
- class CfnResources < Chef::Knife::CfnBase
21
-
22
- deps do
23
- require 'fog'
24
- require 'readline'
25
- require 'chef/json_compat'
26
- require 'chef/knife/bootstrap'
27
- Chef::Knife::Bootstrap.load_deps
28
- end
29
-
30
- banner "knife cfn resources <stack name> [logical resource id]"
31
-
32
- def run
33
- $stdout.sync = true
34
-
35
- validate!
36
-
37
- stack_name = @name_args[0]
38
- logical_resource_id = @name_args[1]
39
-
40
- if stack_name.nil?
41
- show_usage
42
- ui.error("You must specify a stack name")
43
- exit 1
44
- end
45
-
46
- resources_list = [
47
- ui.color('Logical Resource Id', :bold),
48
- ui.color('Physical Resource Id', :bold),
49
- ui.color('Resource Type', :bold),
50
- ui.color('Resource Status', :bold)
51
- ]
52
-
53
- connection_params = { "StackName" => stack_name }
54
- if !logical_resource_id.nil?
55
- connection_params["LogicalResourceId"] = logical_resource_id
56
- end
57
-
58
- data = Array.new
59
- begin
60
- response = connection.describe_stack_resources(connection_params)
61
- data = response.body['StackResources']
62
- rescue Excon::Errors::BadRequest => e
63
- i= e.response.body.index("<Message>")
64
- j = e.response.body.index("</Message>")
65
- if !i.nil? and !j.nil?
66
- ui.error(e.response.body[i+9,j-i-9])
67
- else
68
- print "\n#{e.response.body}"
69
- end
70
- exit 1
71
- else
72
- data.each do |resource|
73
- resources_list << resource['LogicalResourceId']
74
- resources_list << resource['PhysicalResourceId']
75
- resources_list << resource['ResourceType']
76
- resources_list << resource['ResourceStatus']
77
- end
78
- puts ui.list(resources_list, :uneven_columns_across, 4)
79
- end
80
-
81
- end
82
- end
83
- end
84
- end
85
-
86
-
1
+ #
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+ #
14
+
15
+ require 'chef/knife'
16
+ require 'chef/knife/cfn_base'
17
+
18
+ class Chef
19
+ class Knife
20
+ class CfnResources < Chef::Knife::CfnBase
21
+
22
+ deps do
23
+ require 'fog'
24
+ require 'readline'
25
+ require 'chef/json_compat'
26
+ require 'chef/knife/bootstrap'
27
+ Chef::Knife::Bootstrap.load_deps
28
+ end
29
+
30
+ banner "knife cfn resources <stack name> [logical resource id]"
31
+
32
+ option :aws_credential_file,
33
+ :long => "--aws-credential-file FILE",
34
+ :description => "File containing AWS credentials as used by aws cmdline tools",
35
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_credential_file] = key }
36
+
37
+ option :aws_profile,
38
+ :long => "--aws-profile PROFILE",
39
+ :description => "AWS profile, from credential file, to use",
40
+ :default => 'default',
41
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_profile] = key }
42
+
43
+ option :aws_access_key_id,
44
+ :short => "-A ID",
45
+ :long => "--aws-access-key-id KEY",
46
+ :description => "Your AWS Access Key ID",
47
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_access_key_id] = key }
48
+
49
+ option :aws_secret_access_key,
50
+ :short => "-K SECRET",
51
+ :long => "--aws-secret-access-key SECRET",
52
+ :description => "Your AWS API Secret Access Key",
53
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_secret_access_key] = key }
54
+
55
+ option :aws_session_token,
56
+ :long => "--aws-session-token TOKEN",
57
+ :description => "Your AWS Session Token, for use with AWS STS Federation or Session Tokens",
58
+ :proc => Proc.new { |key| Chef::Config[:knife][:aws_session_token] = key }
59
+
60
+ option :region,
61
+ :long => "--region REGION",
62
+ :description => "Your AWS region",
63
+ :proc => Proc.new { |key| Chef::Config[:knife][:region] = key }
64
+
65
+ option :use_iam_profile,
66
+ :long => "--use-iam-profile",
67
+ :description => "Use IAM profile assigned to current machine",
68
+ :boolean => true,
69
+ :default => false,
70
+ :proc => Proc.new { |key| Chef::Config[:knife][:use_iam_profile] = key }
71
+
72
+ def run
73
+ $stdout.sync = true
74
+
75
+ validate!
76
+
77
+ stack_name = @name_args[0]
78
+ logical_resource_id = @name_args[1]
79
+
80
+ if stack_name.nil?
81
+ show_usage
82
+ ui.error("You must specify a stack name")
83
+ exit 1
84
+ end
85
+
86
+ resources_list = [
87
+ ui.color('Logical Resource Id', :bold),
88
+ ui.color('Physical Resource Id', :bold),
89
+ ui.color('Resource Type', :bold),
90
+ ui.color('Resource Status', :bold)
91
+ ]
92
+
93
+ connection_params = { "StackName" => stack_name }
94
+ if !logical_resource_id.nil?
95
+ connection_params["LogicalResourceId"] = logical_resource_id
96
+ end
97
+
98
+ data = Array.new
99
+ begin
100
+ response = connection.describe_stack_resources(connection_params)
101
+ data = response.body['StackResources']
102
+ rescue Excon::Errors::BadRequest => e
103
+ i= e.response.body.index("<Message>")
104
+ j = e.response.body.index("</Message>")
105
+ if !i.nil? and !j.nil?
106
+ ui.error(e.response.body[i+9,j-i-9])
107
+ else
108
+ print "\n#{e.response.body}"
109
+ end
110
+ exit 1
111
+ else
112
+ data.each do |resource|
113
+ resources_list << resource['LogicalResourceId']
114
+ resources_list << resource['PhysicalResourceId']
115
+ resources_list << resource['ResourceType']
116
+ resources_list << resource['ResourceStatus']
117
+ end
118
+ puts ui.list(resources_list, :uneven_columns_across, 4)
119
+ end
120
+
121
+ end
122
+ end
123
+ end
124
+ end
125
+
126
+