knife-nodefu 0.0.11 → 0.1.1
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/README.rdoc +3 -3
- data/knife-nodefu.gemspec +1 -1
- data/lib/chef/knife/nodefu_create.rb +28 -18
- data/lib/knife-nodefu/version.rb +1 -1
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -10,11 +10,11 @@ A basic utility to help automate the creation and destruction of ec2 servers man
|
|
10
10
|
|
11
11
|
gem install knife-nodefu
|
12
12
|
|
13
|
-
= Definitions File
|
13
|
+
= Definitions File Directory
|
14
14
|
|
15
|
-
This file provides all the proper definitions for nodefu to be able to easily build out servers. You can either pass in the definitions file with the -d option, or set the following option in your knife.rb file.
|
15
|
+
This file provides all the proper definitions for nodefu to be able to easily build out servers. You can either pass in the definitions file directory with the -d option, or set the following option in your knife.rb file.
|
16
16
|
|
17
|
-
|
17
|
+
nodefu_definitions "Path to directory"
|
18
18
|
|
19
19
|
Example definitions yml file:
|
20
20
|
|
data/knife-nodefu.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.has_rdoc = true
|
9
9
|
s.authors = ['Brian Bianco']
|
10
10
|
s.email = ['brian.bianco@gmail.com']
|
11
|
-
s.homepage = 'https://github.com/brianbianco/nodefu'
|
11
|
+
s.homepage = 'https://github.com/brianbianco/knife-nodefu'
|
12
12
|
s.summary = 'A knife plugin for simple node creation automation'
|
13
13
|
s.description = s.summary
|
14
14
|
s.extra_rdoc_files = ['README.rdoc', 'LICENSE' ]
|
@@ -30,9 +30,9 @@ class NodefuCreate < Chef::Knife
|
|
30
30
|
:default => nil
|
31
31
|
|
32
32
|
option :definitions_file,
|
33
|
-
:short => "-d <
|
34
|
-
:long => "--
|
35
|
-
:description => "yml definitions
|
33
|
+
:short => "-d <definitions_directory>",
|
34
|
+
:long => "--definitions_dir <definitions_directory>",
|
35
|
+
:description => "yml definitions directory",
|
36
36
|
:default => nil
|
37
37
|
|
38
38
|
option :exit_on_fail,
|
@@ -60,26 +60,36 @@ class NodefuCreate < Chef::Knife
|
|
60
60
|
ec2_delete.run
|
61
61
|
end
|
62
62
|
|
63
|
+
def definitions_from_directory(dir)
|
64
|
+
definitions = Hash.new
|
65
|
+
Dir.entries(dir).each do |f|
|
66
|
+
if File.extname(f) == ".yml"
|
67
|
+
puts "loading #{f}"
|
68
|
+
loaded_defs = YAML.load_file(::File.join(dir,f))
|
69
|
+
definitions = Chef::Mixin::DeepMerge.merge(definitions,loaded_defs)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
definitions
|
73
|
+
end
|
74
|
+
|
63
75
|
def run
|
64
76
|
check_args(1)
|
65
|
-
env = Chef::Config[:environment]
|
66
|
-
definitions_file = config[:definitions_file].nil? ? Chef::Config[:nodefu_definitions_file] : config[:definitions_file]
|
67
|
-
yml_config = YAML.load_file definitions_file
|
68
|
-
|
69
|
-
base_name, start_range, end_range = parse_servers(name_args[0])
|
70
|
-
|
71
|
-
# Merge the current environment hash with the defaults
|
72
|
-
merged_configuration = Chef::Mixin::DeepMerge.merge(yml_config['default'],yml_config['env'][env])
|
73
77
|
|
78
|
+
env = Chef::Config[:environment]
|
79
|
+
defs_dir = Chef::Config[:nodefu_definitions] || config[:definitionss]
|
80
|
+
yml_config = definitions_from_directory defs_dir
|
81
|
+
merged_config = Chef::Mixin::DeepMerge.merge(yml_config['default'],yml_config['env'][env])
|
74
82
|
node_spec_name = config[:node_spec] || base_name
|
83
|
+
abort("I'm sorry I couldn't find any node_spec matches :(") unless (node_spec = merged_config['node_spec'][node_spec_name])
|
84
|
+
|
85
|
+
base_name, start_range, end_range = parse_servers(name_args[0])
|
75
86
|
|
76
|
-
|
77
|
-
domain = merged_configuration['domain']
|
87
|
+
domain = merged_config['domain']
|
78
88
|
vm_spec_name = node_spec['vm_spec']
|
79
|
-
vm_spec =
|
89
|
+
vm_spec = merged_config['vm_spec'][vm_spec_name]
|
80
90
|
aux_groups = node_spec['aux_groups'].nil? ? '' : ",#{node_spec['aux_groups'].join(',')}"
|
81
91
|
|
82
|
-
#Present the user with some totally rad visuals!!!
|
92
|
+
# Present the user with some totally rad visuals!!!
|
83
93
|
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:")
|
84
94
|
ui.msg("#{ui.color('Base Name',:cyan)}: #{base_name}")
|
85
95
|
ui.msg("#{ui.color('Node Spec',:cyan)}: #{node_spec_name}")
|
@@ -95,8 +105,8 @@ class NodefuCreate < Chef::Knife
|
|
95
105
|
ec2_server_request = Ec2ServerCreate.new
|
96
106
|
node_name = "#{base_name}#{i}"
|
97
107
|
full_node_name = "#{base_name}#{i}.#{env}.#{domain}"
|
98
|
-
#A handfull of the Ec2ServerCreate command line options use a :proc field so I have to
|
99
|
-
#populate those by hand instead of simply passing a value to its config entry
|
108
|
+
# A handfull of the Ec2ServerCreate command line options use a :proc field so I have to
|
109
|
+
# populate those by hand instead of simply passing a value to its config entry
|
100
110
|
Chef::Config[:knife][:aws_ssh_key_id] = vm_spec['ssh_key']
|
101
111
|
Chef::Config[:knife][:image] = vm_spec['ami']
|
102
112
|
Chef::Config[:knife][:region] = vm_spec['region']
|
@@ -119,7 +129,7 @@ class NodefuCreate < Chef::Knife
|
|
119
129
|
end
|
120
130
|
threads.each(&:join)
|
121
131
|
|
122
|
-
#Build a servers hash with the node names as
|
132
|
+
# Build a servers hash with the node names as the key from the object returned by the threads
|
123
133
|
@servers = threads.inject({}) {|hash,t| hash[t.value[0]] = t.value[1]; hash}
|
124
134
|
|
125
135
|
query = Chef::Search::Query.new
|
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.1.1
|
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:
|
12
|
+
date: 2013-03-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: knife-ec2
|
@@ -59,7 +59,7 @@ files:
|
|
59
59
|
- lib/chef/knife/nodefu_create.rb
|
60
60
|
- lib/chef/knife/nodefu_destroy.rb
|
61
61
|
- lib/knife-nodefu/version.rb
|
62
|
-
homepage: https://github.com/brianbianco/nodefu
|
62
|
+
homepage: https://github.com/brianbianco/knife-nodefu
|
63
63
|
licenses: []
|
64
64
|
post_install_message:
|
65
65
|
rdoc_options: []
|
@@ -79,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
79
|
version: '0'
|
80
80
|
requirements: []
|
81
81
|
rubyforge_project:
|
82
|
-
rubygems_version: 1.8.
|
82
|
+
rubygems_version: 1.8.25
|
83
83
|
signing_key:
|
84
84
|
specification_version: 3
|
85
85
|
summary: A knife plugin for simple node creation automation
|