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