knife-nodefu 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,7 +9,7 @@ module NodefuBase
9
9
  end
10
10
 
11
11
  def generate_security_groups(name,env)
12
- "node_#{env}_#{name},default_#{env},default"
12
+ ["node_#{env}_#{name}","default_#{env}","default"]
13
13
  end
14
14
 
15
15
  def check_args(size)
@@ -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
- base_name, start_range, end_range = parse_servers(name_args[0])
86
-
87
- domain = merged_config['domain']
88
- vm_spec_name = node_spec['vm_spec']
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 = "#{base_name}#{i}.#{env}.#{domain}"
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] = (generate_security_groups(node_name,env) + aux_groups).split(',')
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
- #Display all the items that will be removed
54
- if config[:skip_clients]
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
- if config[:skip_nodes]
62
- ui.msg("#{ui.color('Skipping nodes...',:cyan)}")
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
- if config[:skip_instances]
69
- ui.msg("#{ui.color('Skipping instances...',:cyan)}")
70
- else
71
- ui.msg("#{ui.color('EC2 instances to be terminated:',:red)}")
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
- unless config[:skip_instances]
82
- threads = []
83
- #Delete the ec2 server
84
- nodes_to_delete.each_pair do |name,node|
85
- ec2_delete = Ec2ServerDelete.new
86
- ec2_delete.name_args[0] = node['ec2']['instance_id']
87
- ec2_delete.config[:yes] = true
88
- threads << Thread.new(node) { |node| ec2_delete.run }
89
- end
90
- threads.each(&:join)
91
- end
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
@@ -1,6 +1,6 @@
1
1
  module Knife
2
2
  module Nodefu
3
- VERSION = "0.1.2"
3
+ VERSION = "0.2.0"
4
4
  MAJOR, MINOR, TINY = VERSION.split(',')
5
5
  end
6
6
  end
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.1.2
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-04-22 00:00:00.000000000 Z
12
+ date: 2013-05-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: knife-ec2