knife-cfn 0.1.10 → 0.1.11

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.
@@ -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
+