knife-instance 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2d97bde36605b756b970380d6fa8779dd2a7e5c1
4
- data.tar.gz: 757e14d913de4161d837762dbecd688e5e1c7743
3
+ metadata.gz: e1108cde770487cd53011c74291711f9c593375c
4
+ data.tar.gz: 0e4e27fefd0221b81fdc722750dab95454922179
5
5
  SHA512:
6
- metadata.gz: f883a6c85ec53e9233642e2724d11cb88dca3606ae0be1f71ce9947972f98d5275dda14a39e676f07b3f71fc54f9fb9bec50aa57789e8d84259a2e21c745c8ef
7
- data.tar.gz: 82b9ad60e49b3f56cae9cccf9cdf570f757c31c8a4562be942279ef98e97abf77531c3713e9a1539f4d3a7c25f3df658a2e940a4462b5ccfb7b317cf41b55501
6
+ metadata.gz: cfe6de0292f46449c9fea20bf894b494b30f8a6a8c78c92bc9c7f4da8805a8ee286327d925cc2388a7c34a1054fbd73836144f64b81ebc98d8f000100e6cec78
7
+ data.tar.gz: e3bc8be967811ab1ba9d81a07ea7b5d66897de5beb4be532bb4a2096afa11126079c026570b5852f8289b57dbca6287b9ed0b1a0aefa40060cc15df2f33ebc68
@@ -173,10 +173,15 @@ class Chef
173
173
  :user_data => config[:without_user_data] ? "" : get_user_data,
174
174
  :iam_instance_profile_name => config[:iam_role]
175
175
  }
176
+ server_def[:associate_public_ip] = true if vpc_mode?
176
177
 
177
178
  server_def
178
179
  end
179
180
 
181
+ def vpc_mode?
182
+ config[:subnet_id]
183
+ end
184
+
180
185
  def image
181
186
  config[:image]
182
187
  end
@@ -205,7 +210,14 @@ class Chef
205
210
  end
206
211
 
207
212
  def get_user_data
208
- generator = Zest::BootstrapGenerator.new(Chef::Config[:validation_key], Chef::Config[:validation_client_name], Chef::Config[:chef_server_url], @environment, config[:run_list], hostname, @color, @base_domain, config[:encrypted_data_bag_secret])
213
+ generator = Zest::BootstrapGenerator.new(Chef::Config[:validation_key], Chef::Config[:validation_client_name], Chef::Config[:chef_server_url], config[:encrypted_data_bag_secret],
214
+ :environment => @environment,
215
+ :run_list => config[:run_list],
216
+ :hostname => hostname,
217
+ :color => @color,
218
+ :base_domain => @base_domain,
219
+ :domain => domain
220
+ )
209
221
  generator.generate
210
222
  end
211
223
  end
@@ -3,16 +3,18 @@ module Zest
3
3
  class BootstrapGenerator
4
4
  CONFIG_FILE_TEMPLATE = File.expand_path 'templates/boot.sh.erb', File.dirname(__FILE__)
5
5
 
6
- def initialize(validation_key_file, validation_client_name, chef_server_url, environment, run_list, hostname, color, base_domain, encrypted_databag_secret_file)
6
+ def initialize(validation_key_file, validation_client_name, chef_server_url, encrypted_databag_secret_file, attr = {})
7
7
  @validation_client_name = validation_client_name
8
8
  @validation_key_file = validation_key_file
9
9
  @chef_server_url = chef_server_url
10
- @environment = environment
11
- @run_list = run_list
12
- @hostname = hostname
13
- @color = color
14
- @base_domain = base_domain
15
10
  @encrypted_databag_secret_file = encrypted_databag_secret_file
11
+
12
+ @environment = attr[:environment]
13
+ @run_list = attr[:run_list]
14
+ @hostname = attr[:hostname]
15
+ @color = attr[:color]
16
+ @base_domain = attr[:base_domain]
17
+ @domain = attr[:domain]
16
18
  end
17
19
 
18
20
  def first_boot
@@ -20,7 +22,8 @@ module Zest
20
22
  "run_list" => @run_list,
21
23
  "assigned_hostname" => @hostname,
22
24
  "rails" => {"cluster" => {"color" => @color}},
23
- "base_domain" => @base_domain
25
+ "base_domain" => @base_domain,
26
+ "domain" => @domain
24
27
  }.to_json
25
28
  end
26
29
 
@@ -22,7 +22,8 @@ gem install chef --no-rdoc --no-ri --verbose --version 10.24.0
22
22
  gem install tzinfo --no-rdoc --no-ri --verbose --version 0.3.33
23
23
  gem install syslog-logger --no-rdoc --no-ri --verbose --version 1.6.8
24
24
 
25
- mkdir -p /etc/chef
25
+ mkdir -p /etc/chef/ohai/hints
26
+ touch /etc/chef/ohai/hints/ec2.json # Tell ohai that it is an EC2 node in VPC
26
27
 
27
28
  <%# Remember to suppress a newline at the end of an erb statement for keys --> -%>
28
29
 
@@ -1,5 +1,5 @@
1
1
  module Knife
2
2
  module Instance
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
@@ -102,8 +102,9 @@ describe Chef::Knife::InstanceCreate do
102
102
  end
103
103
 
104
104
  subject { @instance.create_server_def }
105
- its([:security_group_ids]) { should == security_group_ids }
106
- its([:subnet_id]) { should == subnet_id }
105
+ its([:security_group_ids]) { should == security_group_ids }
106
+ its([:subnet_id]) { should == subnet_id }
107
+ its([:associate_public_ip]) { should == true }
107
108
  end
108
109
  end
109
110
  end
@@ -0,0 +1,98 @@
1
+ require 'spec_helper'
2
+
3
+ describe Zest::BootstrapGenerator do
4
+ let(:bootstrap_generator) { described_class.new(validation_key_file, validation_client_name, chef_server_url, encrypted_databag_secret_file, attr) }
5
+ let(:validation_key_file) { "/path/to/validation_key" }
6
+ let(:validation_client_name) { "this is the validation client name" }
7
+ let(:chef_server_url) { "this is the url for the chef server" }
8
+ let(:encrypted_databag_secret_file) { "/path/to/encrypted_databag_secret_file" }
9
+ let(:attr) { {
10
+ :environment => environment,
11
+ :run_list => run_list,
12
+ :hostname => hostname,
13
+ :color => color,
14
+ :base_domain => base_domain,
15
+ :domain => domain
16
+ } }
17
+ let(:environment) { "this is an environment" }
18
+ let(:run_list) { "this is a run list" }
19
+ let(:hostname) { "this is a hostname" }
20
+ let(:color) { "this is a color" }
21
+ let(:base_domain) { "this is a base domain" }
22
+ let(:domain) { "this is a domain" }
23
+
24
+ describe "#first_boot" do
25
+ subject { JSON.parse(bootstrap_generator.first_boot) }
26
+
27
+ it "defines the run list" do
28
+ subject["run_list"].should == "this is a run list"
29
+ end
30
+
31
+ it "assigns the hostname" do
32
+ subject["assigned_hostname"].should == "this is a hostname"
33
+ end
34
+
35
+ it "contains the cluster color" do
36
+ subject["rails"]["cluster"]["color"].should == "this is a color"
37
+ end
38
+
39
+ it "contains the base domain" do
40
+ subject["base_domain"].should == "this is a base domain"
41
+ end
42
+
43
+ it "contains the domain" do
44
+ subject["domain"].should == "this is a domain"
45
+ end
46
+ end
47
+
48
+ describe "#validation_key" do
49
+ subject { bootstrap_generator.validation_key }
50
+
51
+ before :each do
52
+ File.stub(:read).with(validation_key_file).and_return("this is a validation key")
53
+ end
54
+
55
+ it "returns the contents of the validation key file" do
56
+ subject.should == "this is a validation key"
57
+ end
58
+ end
59
+
60
+ describe "#encrypted_data_bag_secret" do
61
+ subject { bootstrap_generator.encrypted_data_bag_secret }
62
+
63
+ before :each do
64
+ File.stub(:read).with(encrypted_databag_secret_file).and_return("this is a encrypted data bag secret")
65
+ end
66
+
67
+ it "returns the contents of the validation key file" do
68
+ subject.should == "this is a encrypted data bag secret"
69
+ end
70
+ end
71
+
72
+ describe "#config_content" do
73
+ subject { bootstrap_generator.config_content }
74
+
75
+ it "generates the correct config" do
76
+ subject.should == <<-CONFIG
77
+ require 'syslog-logger'
78
+ Logger::Syslog.class_eval do
79
+ attr_accessor :sync, :formatter
80
+ end
81
+
82
+ log_level :info
83
+ log_location Logger::Syslog.new("chef-client")
84
+ chef_server_url "this is the url for the chef server"
85
+ validation_client_name "this is the validation client name"
86
+ node_name "this is a hostname"
87
+ CONFIG
88
+ end
89
+ end
90
+
91
+ describe "#start_chef" do
92
+ subject { bootstrap_generator.start_chef }
93
+
94
+ it "generates the correct chef start command" do
95
+ subject.should == "/usr/bin/chef-client -j /etc/chef/first-boot.json -E this is an environment"
96
+ end
97
+ end
98
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-instance
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Tamoykin
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-27 00:00:00.000000000 Z
12
+ date: 2014-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: chef
@@ -104,6 +104,7 @@ files:
104
104
  - lib/knife-instance/version.rb
105
105
  - lib/knife-instance/zestknife.rb
106
106
  - spec/lib/chef/knife/instance_create_spec.rb
107
+ - spec/lib/knife-instance/bootstrap_generator_spec.rb
107
108
  - spec/lib/knife-instance/zestknife_spec.rb
108
109
  - spec/spec_helper.rb
109
110
  - spec/support/databag.key
@@ -133,6 +134,7 @@ specification_version: 4
133
134
  summary: Manage EC2 instances with Chef from the command line
134
135
  test_files:
135
136
  - spec/lib/chef/knife/instance_create_spec.rb
137
+ - spec/lib/knife-instance/bootstrap_generator_spec.rb
136
138
  - spec/lib/knife-instance/zestknife_spec.rb
137
139
  - spec/spec_helper.rb
138
140
  - spec/support/databag.key