knife-nodefu 0.1.2 → 0.2.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.
- data/lib/chef/knife/nodefu_base.rb +1 -1
- data/lib/chef/knife/nodefu_create.rb +30 -10
- data/lib/chef/knife/nodefu_destroy.rb +26 -64
- data/lib/knife-nodefu/version.rb +1 -1
- metadata +2 -2
@@ -28,7 +28,13 @@ class NodefuCreate < Chef::Knife
|
|
28
28
|
:long => "--yes",
|
29
29
|
:description => "ignores prompts, just say YES!",
|
30
30
|
:default => nil
|
31
|
-
|
31
|
+
|
32
|
+
option :no_default_groups,
|
33
|
+
:short => "-g",
|
34
|
+
:long => "--no-groups",
|
35
|
+
:description => "Do not automatically generate security groups",
|
36
|
+
:default => nil
|
37
|
+
|
32
38
|
option :definitions_file,
|
33
39
|
:short => "-d <definitions_directory>",
|
34
40
|
:long => "--definitions_dir <definitions_directory>",
|
@@ -74,6 +80,8 @@ class NodefuCreate < Chef::Knife
|
|
74
80
|
|
75
81
|
def run
|
76
82
|
check_args(1)
|
83
|
+
|
84
|
+
base_name, start_range, end_range = parse_servers(name_args[0])
|
77
85
|
|
78
86
|
env = Chef::Config[:environment]
|
79
87
|
defs_dir = Chef::Config[:nodefu_definitions] || config[:definitions]
|
@@ -82,12 +90,10 @@ class NodefuCreate < Chef::Knife
|
|
82
90
|
node_spec_name = config[:node_spec] || base_name
|
83
91
|
abort("I'm sorry I couldn't find any node_spec matches :(") unless (node_spec = merged_config['node_spec'][node_spec_name])
|
84
92
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
vm_spec = merged_config['vm_spec'][vm_spec_name]
|
90
|
-
aux_groups = node_spec['aux_groups'].nil? ? '' : ",#{node_spec['aux_groups'].join(',')}"
|
93
|
+
domain = merged_config['domain']
|
94
|
+
vm_spec_name = node_spec['vm_spec']
|
95
|
+
vm_spec = merged_config['vm_spec'][vm_spec_name]
|
96
|
+
aux_groups = node_spec['aux_groups']
|
91
97
|
|
92
98
|
# Present the user with some totally rad visuals!!!
|
93
99
|
ui.msg("#{ui.color('SHAZAM!',:red)} It looks like you want to launch #{ui.color((end_range - start_range + 1).to_s,:yellow)} of these:")
|
@@ -95,8 +101,11 @@ class NodefuCreate < Chef::Knife
|
|
95
101
|
ui.msg("#{ui.color('Node Spec',:cyan)}: #{node_spec_name}")
|
96
102
|
pretty_print_hash(node_spec)
|
97
103
|
pretty_print_hash(vm_spec)
|
98
|
-
ui.msg("#{ui.color('Auto generated security groups',:cyan)}: #{generate_security_groups("#{base_name}#{start_range}-#{end_range}",env)}")
|
99
104
|
|
105
|
+
if config[:no_default_groups].nil?
|
106
|
+
ui.msg("#{ui.color('Auto generated security groups',:cyan)}: #{generate_security_groups("#{base_name}#{start_range}-#{end_range}",env)}")
|
107
|
+
end
|
108
|
+
|
100
109
|
config[:yes] ? user_response = 'yes' : user_response = ui.ask_question("Does this seem right to you? [y/n]").downcase
|
101
110
|
abort("See ya!") unless (['yes','y',].include?(user_response))
|
102
111
|
|
@@ -105,19 +114,30 @@ class NodefuCreate < Chef::Knife
|
|
105
114
|
for i in (start_range..end_range)
|
106
115
|
ec2_server_request = Ec2ServerCreate.new
|
107
116
|
node_name = "#{base_name}#{i}"
|
108
|
-
full_node_name
|
117
|
+
full_node_name = "#{node_name}.#{env}.#{domain}"
|
118
|
+
security_groups = if config[:no_default_groups].nil?
|
119
|
+
generate_security_groups(node_name,env) + aux_groups
|
120
|
+
else
|
121
|
+
aux_groups
|
122
|
+
end
|
123
|
+
|
124
|
+
puts security_groups.inspect
|
125
|
+
|
109
126
|
# A handfull of the Ec2ServerCreate command line options use a :proc field so I have to
|
110
127
|
# populate those by hand instead of simply passing a value to its config entry
|
111
128
|
Chef::Config[:knife][:aws_ssh_key_id] = vm_spec['ssh_key']
|
112
129
|
Chef::Config[:knife][:image] = vm_spec['ami']
|
113
130
|
Chef::Config[:knife][:region] = vm_spec['region']
|
131
|
+
ec2_server_request.config[:image] = vm_spec['ami']
|
132
|
+
ec2_server_request.config[:region] = vm_spec['region']
|
114
133
|
ec2_server_request.config[:chef_node_name] = full_node_name
|
115
134
|
ec2_server_request.config[:run_list] = node_spec['run_list']
|
116
135
|
ec2_server_request.config[:flavor] = vm_spec['type']
|
117
|
-
ec2_server_request.config[:security_groups] =
|
136
|
+
ec2_server_request.config[:security_groups] = security_groups
|
118
137
|
ec2_server_request.config[:ssh_user] = vm_spec['user']
|
119
138
|
ec2_server_request.config[:availability_zone] = vm_spec['az']
|
120
139
|
ec2_server_request.config[:distro] = vm_spec['bootstrap']
|
140
|
+
puts ec2_server_request.config.inspect
|
121
141
|
threads << Thread.new(full_node_name,ec2_server_request) do |full_node_name,request|
|
122
142
|
e = nil
|
123
143
|
begin
|
@@ -16,30 +16,19 @@ class NodefuDestroy < Chef::Knife
|
|
16
16
|
|
17
17
|
banner "knife nodefu destroy QUERY (options)"
|
18
18
|
|
19
|
+
# option :purge,
|
20
|
+
# :short => "-P",
|
21
|
+
# :long => "--purge",
|
22
|
+
# :boolean => true,
|
23
|
+
# :default => false,
|
24
|
+
# :description => ""
|
25
|
+
|
19
26
|
option :yes,
|
20
27
|
:short => "-y",
|
21
28
|
:long => "--yes",
|
22
29
|
:description => "ignores prompts, just say YES!",
|
23
30
|
:default => nil
|
24
31
|
|
25
|
-
option :skip_clients,
|
26
|
-
:short => "-c",
|
27
|
-
:long => "--skip-clients",
|
28
|
-
:description => "Do not delete clients",
|
29
|
-
:default => nil
|
30
|
-
|
31
|
-
option :skip_nodes,
|
32
|
-
:short => "-n",
|
33
|
-
:long => "--skip-nodes",
|
34
|
-
:description => "Do not delete nodes",
|
35
|
-
:default => nil
|
36
|
-
|
37
|
-
option :skip_instances,
|
38
|
-
:short => "-i",
|
39
|
-
:long => "--skip-instances",
|
40
|
-
:description => "Do not terminate instances",
|
41
|
-
:default => nil
|
42
|
-
|
43
32
|
def run
|
44
33
|
check_args(1)
|
45
34
|
|
@@ -50,58 +39,31 @@ class NodefuDestroy < Chef::Knife
|
|
50
39
|
clients_to_delete[node.name] = Chef::ApiClient.load(node.name)
|
51
40
|
end
|
52
41
|
|
53
|
-
#
|
54
|
-
|
55
|
-
ui.msg("#{ui.color('Skipping clients...',:cyan)}")
|
56
|
-
else
|
57
|
-
ui.msg("#{ui.color('Clients to be deleted:',:red)}")
|
58
|
-
pretty_print_hash clients_to_delete
|
59
|
-
end
|
42
|
+
ui.msg("#{ui.color('Clients to be deleted:',:red)}")
|
43
|
+
pretty_print_hash clients_to_delete
|
60
44
|
|
61
|
-
|
62
|
-
|
63
|
-
else
|
64
|
-
ui.msg("#{ui.color('Nodes to be deleted:',:red)}")
|
65
|
-
pretty_print_hash nodes_to_delete
|
66
|
-
end
|
45
|
+
ui.msg("#{ui.color('Nodes to be deleted:',:red)}")
|
46
|
+
pretty_print_hash nodes_to_delete
|
67
47
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
ui.msg("#{ui.color(
|
72
|
-
nodes_to_delete.each_pair do |name,node|
|
73
|
-
instance_id = node['ec2']['instance_id']
|
74
|
-
ui.msg("#{ui.color(name,:magenta)}: #{instance_id}")
|
75
|
-
end
|
48
|
+
ui.msg("#{ui.color('EC2 instances to be terminated:',:red)}")
|
49
|
+
nodes_to_delete.each_pair do |name,node|
|
50
|
+
instance_id = node['ec2']['instance_id']
|
51
|
+
ui.msg("#{ui.color(name,:magenta)}: #{instance_id}")
|
76
52
|
end
|
77
53
|
|
78
54
|
config[:yes] ? user_response = 'yes' : user_response = ui.ask_question("Does this seem right to you? [y/n]").downcase
|
79
55
|
abort("See ya!") unless (['yes','y',].include?(user_response))
|
80
56
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
unless config[:skip_nodes]
|
94
|
-
nodes_to_delete.each_pair do |node_name,node_object|
|
95
|
-
ui.msg("#{ui.color('destroying node:',:red)} #{node_name}")
|
96
|
-
node_object.destroy
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
unless config[:skip_clients]
|
101
|
-
clients_to_delete.each_pair do |client_name,client_object|
|
102
|
-
ui.msg("#{ui.color('destroying client:',:red)} #{client_name}")
|
103
|
-
client_object.destroy
|
104
|
-
end
|
105
|
-
end
|
57
|
+
threads = []
|
58
|
+
#Delete the ec2 server
|
59
|
+
nodes_to_delete.each_pair do |name,node|
|
60
|
+
ec2_delete = Ec2ServerDelete.new
|
61
|
+
ec2_delete.name_args[0] = node['ec2']['instance_id']
|
62
|
+
ec2_delete.config[:chef_node_name] = name
|
63
|
+
ec2_delete.config[:purge] = true
|
64
|
+
ec2_delete.config[:yes] = true
|
65
|
+
threads << Thread.new(node) { |node| ec2_delete.run }
|
66
|
+
end
|
67
|
+
threads.each(&:join)
|
106
68
|
end
|
107
69
|
end
|
data/lib/knife-nodefu/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-nodefu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: knife-ec2
|