knife-server 1.3.0 → 1.4.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.
- checksums.yaml +4 -4
- data/.travis.yml +0 -2
- data/CHANGELOG.md +8 -0
- data/Gemfile +0 -1
- data/Guardfile +0 -5
- data/README.md +6 -8
- data/knife-server.gemspec +3 -3
- data/lib/chef/knife/server_bootstrap_digitalocean.rb +6 -8
- data/lib/chef/knife/server_bootstrap_openstack.rb +12 -4
- data/lib/knife/server/version.rb +1 -1
- data/spec/chef/knife/server_bootstrap_digitalocean_spec.rb +18 -32
- data/spec/chef/knife/server_bootstrap_openstack_spec.rb +3 -2
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83b68a283fef42ef77414c6dfc62ad7030769d14
|
4
|
+
data.tar.gz: 427955c02665a84a4650a37061d0d987ff3d4321
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e12382dfc1a92aac14191ed3976ed46aaf480c126524990cb4f4cd72defb85b33528526b2aea91c04b931ac891f86b40e9c8576a342e322d731a5f6ee1a89035
|
7
|
+
data.tar.gz: f25f254039e81b453051d7ef943672c7058638226fb01cf823950e86e7bcc659c3cdf15f84a32cab940218e7694402449e49f96b3608bb5a8b2130b43dc30a64
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/Guardfile
CHANGED
@@ -16,11 +16,6 @@ group :red_green_refactor, :halt_on_fail => true do
|
|
16
16
|
watch(%r{^spec/spec_helper\.rb}) { "spec" }
|
17
17
|
end
|
18
18
|
|
19
|
-
guard :cane do
|
20
|
-
watch(%r{.*\.rb})
|
21
|
-
watch(".cane")
|
22
|
-
end
|
23
|
-
|
24
19
|
guard :rubocop, rubocop_opts do
|
25
20
|
watch(%r{.+\.rb$})
|
26
21
|
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
[](https://codeclimate.com/github/fnichol/knife-server)
|
6
6
|
[](https://gemnasium.com/fnichol/knife-server)
|
7
7
|
|
8
|
-
|
8
|
+
A Chef Knife plugin to manage Chef Servers. Bootstrap a new Chef
|
9
9
|
Server on Amazon's EC2, Digital Ocean, Linode, OpenStack or a standalone server.
|
10
10
|
Backup and restore your Chef Server or Hosted Chef's node, role, data bag, and
|
11
11
|
environment JSON data.
|
@@ -44,11 +44,10 @@ To spin up your Chef Server on [Digital Ocean][do_site]:
|
|
44
44
|
```bash
|
45
45
|
knife server bootstrap digitalocean \
|
46
46
|
--node-name chefapalooza.example.com \
|
47
|
-
--
|
48
|
-
--
|
49
|
-
--
|
50
|
-
--
|
51
|
-
--image 5588928 \
|
47
|
+
--digital_ocean_access_token $DIGITAL_OCEAN_ACCESS_TOKEN \
|
48
|
+
--location sfo1 \
|
49
|
+
--size 1gb \
|
50
|
+
--image ubuntu-12-04-x64 \
|
52
51
|
--ssh-keys $DIGITAL_OCEAN_SSH_KEY_ID \
|
53
52
|
--identity-file ~/.ssh/id_rsa-do
|
54
53
|
```
|
@@ -216,8 +215,7 @@ knife[:flavor] = "t1.micro"
|
|
216
215
|
knife[:linode_api_key] = "MY_KEY"
|
217
216
|
|
218
217
|
# for digitalocean
|
219
|
-
knife[:
|
220
|
-
knife[:digital_ocean_api_key] = "MY_KEY"
|
218
|
+
knife[:digital_ocean_acceess_token] = "MY_TOKEN"
|
221
219
|
```
|
222
220
|
|
223
221
|
Better yet, why not try a more generic [knife.rb][chef_bootstrap_knife_rb] file
|
data/knife-server.gemspec
CHANGED
@@ -23,10 +23,10 @@ Gem::Specification.new do |gem|
|
|
23
23
|
gem.add_dependency "chef", ">= 0.10.10"
|
24
24
|
|
25
25
|
gem.add_development_dependency "rake"
|
26
|
-
gem.add_development_dependency "knife-digital_ocean"
|
26
|
+
gem.add_development_dependency "knife-digital_ocean", ">= 2.0.0"
|
27
27
|
gem.add_development_dependency "knife-ec2", ">= 0.5.12"
|
28
28
|
gem.add_development_dependency "knife-linode"
|
29
|
-
gem.add_development_dependency "knife-openstack"
|
29
|
+
gem.add_development_dependency "knife-openstack", ">= 1.0.0"
|
30
30
|
|
31
31
|
gem.add_development_dependency "rspec", "~> 3.0"
|
32
32
|
gem.add_development_dependency "fakefs", "~> 0.4"
|
@@ -36,6 +36,6 @@ Gem::Specification.new do |gem|
|
|
36
36
|
# style and complexity libraries are tightly version pinned as newer releases
|
37
37
|
# may introduce new and undesireable style choices which would be immediately
|
38
38
|
# enforced in CI
|
39
|
-
gem.add_development_dependency "finstyle", "1.
|
39
|
+
gem.add_development_dependency "finstyle", "1.3.0"
|
40
40
|
gem.add_development_dependency "cane", "2.6.2"
|
41
41
|
end
|
@@ -35,7 +35,7 @@ class Chef
|
|
35
35
|
|
36
36
|
begin
|
37
37
|
require "chef/knife/digital_ocean_droplet_create"
|
38
|
-
require "
|
38
|
+
require "droplet_kit"
|
39
39
|
Chef::Knife::DigitalOceanDropletCreate.load_deps
|
40
40
|
|
41
41
|
current_options = options
|
@@ -96,19 +96,17 @@ class Chef
|
|
96
96
|
end
|
97
97
|
|
98
98
|
def digital_ocean_connection
|
99
|
-
@digital_ocean_connection ||=
|
100
|
-
:
|
101
|
-
:digitalocean_client_id => config_val(:digital_ocean_client_id),
|
102
|
-
:digitalocean_api_key => config_val(:digital_ocean_api_key)
|
99
|
+
@digital_ocean_connection ||= DropletKit::Client.new(
|
100
|
+
:access_token => config_val(:digital_ocean_access_token)
|
103
101
|
)
|
104
102
|
end
|
105
103
|
|
106
104
|
def server_ip_address
|
107
|
-
server = digital_ocean_connection.
|
108
|
-
s.
|
105
|
+
server = digital_ocean_connection.droplets.all.find do |s|
|
106
|
+
s.status == "active" && s.name == config_val(:chef_node_name)
|
109
107
|
end
|
110
108
|
|
111
|
-
server && server.
|
109
|
+
server && server.public_ip
|
112
110
|
end
|
113
111
|
|
114
112
|
private
|
@@ -28,6 +28,14 @@ class Chef
|
|
28
28
|
|
29
29
|
include Knife::ServerBootstrapBase
|
30
30
|
|
31
|
+
def self.wrapped_plugin_class
|
32
|
+
Chef::Knife::Cloud::OpenstackServerCreate
|
33
|
+
end
|
34
|
+
|
35
|
+
def wrapped_plugin_class
|
36
|
+
self.class.wrapped_plugin_class
|
37
|
+
end
|
38
|
+
|
31
39
|
deps do
|
32
40
|
require "knife/server/ssh"
|
33
41
|
require "knife/server/credentials"
|
@@ -35,10 +43,10 @@ class Chef
|
|
35
43
|
begin
|
36
44
|
require "chef/knife/openstack_server_create"
|
37
45
|
require "fog"
|
38
|
-
|
46
|
+
wrapped_plugin_class.load_deps
|
39
47
|
|
40
48
|
current_options = options
|
41
|
-
self.options =
|
49
|
+
self.options = wrapped_plugin_class.options.dup
|
42
50
|
options.merge!(current_options)
|
43
51
|
rescue LoadError => ex
|
44
52
|
ui.error [
|
@@ -63,8 +71,8 @@ class Chef
|
|
63
71
|
ENV["WEBUI_PASSWORD"] = config_val(:webui_password)
|
64
72
|
ENV["AMQP_PASSWORD"] = config_val(:amqp_password)
|
65
73
|
ENV["NO_TEST"] = "1" if config[:no_test]
|
66
|
-
bootstrap =
|
67
|
-
|
74
|
+
bootstrap = wrapped_plugin_class.new
|
75
|
+
wrapped_plugin_class.options.keys.each do |attr|
|
68
76
|
val = config_val(attr)
|
69
77
|
next if val.nil?
|
70
78
|
|
data/lib/knife/server/version.rb
CHANGED
@@ -38,7 +38,7 @@ describe Chef::Knife::ServerBootstrapDigitalocean do
|
|
38
38
|
@knife.config[:ssh_user] = "root"
|
39
39
|
end
|
40
40
|
|
41
|
-
let(:connection) { double(
|
41
|
+
let(:connection) { double(DropletKit::Client) }
|
42
42
|
|
43
43
|
describe "#digital_ocean_bootstrap" do
|
44
44
|
|
@@ -46,8 +46,7 @@ describe Chef::Knife::ServerBootstrapDigitalocean do
|
|
46
46
|
@knife.config[:chef_node_name] = "shave.yak"
|
47
47
|
@knife.config[:ssh_user] = "jdoe"
|
48
48
|
@knife.config[:identity_file] = "~/.ssh/mykey_dsa"
|
49
|
-
@knife.config[:
|
50
|
-
@knife.config[:digital_ocean_api_key] = "do123"
|
49
|
+
@knife.config[:digital_ocean_access_token] = "do123"
|
51
50
|
@knife.config[:distro] = "distro-praha"
|
52
51
|
@knife.config[:webui_password] = "daweb"
|
53
52
|
@knife.config[:amqp_password] = "queueitup"
|
@@ -79,12 +78,8 @@ describe Chef::Knife::ServerBootstrapDigitalocean do
|
|
79
78
|
expect(bootstrap.config[:identity_file]).to eq("~/.ssh/mykey_dsa")
|
80
79
|
end
|
81
80
|
|
82
|
-
it "configs the bootstrap's
|
83
|
-
expect(bootstrap.config[:
|
84
|
-
end
|
85
|
-
|
86
|
-
it "configs the bootstrap's digital_ocean_api_key" do
|
87
|
-
expect(bootstrap.config[:digital_ocean_api_key]).to eq("do123")
|
81
|
+
it "configs the bootstrap's digital_ocean_access_token" do
|
82
|
+
expect(bootstrap.config[:digital_ocean_access_token]).to eq("do123")
|
88
83
|
end
|
89
84
|
|
90
85
|
it "configs the bootstrap's distro" do
|
@@ -138,26 +133,21 @@ describe Chef::Knife::ServerBootstrapDigitalocean do
|
|
138
133
|
before do
|
139
134
|
@before_config = Hash.new
|
140
135
|
@before_config[:knife] = Hash.new
|
141
|
-
[:
|
136
|
+
[:digital_ocean_access_token].each do |key|
|
142
137
|
@before_config[:knife][key] = Chef::Config[:knife][key]
|
143
138
|
end
|
144
139
|
|
145
|
-
Chef::Config[:knife][:
|
146
|
-
Chef::Config[:knife][:digital_ocean_api_key] = "api"
|
140
|
+
Chef::Config[:knife][:digital_ocean_access_token] = "api"
|
147
141
|
end
|
148
142
|
|
149
143
|
after do
|
150
|
-
[:
|
144
|
+
[:digital_ocean_access_token].each do |key|
|
151
145
|
Chef::Config[:knife][key] = @before_config[:knife][key]
|
152
146
|
end
|
153
147
|
end
|
154
148
|
|
155
149
|
it "constructs a connection" do
|
156
|
-
expect(
|
157
|
-
:provider => "DigitalOcean",
|
158
|
-
:digitalocean_client_id => "client",
|
159
|
-
:digitalocean_api_key => "api"
|
160
|
-
)
|
150
|
+
expect(DropletKit::Client).to receive(:new).with(:access_token => "api")
|
161
151
|
|
162
152
|
@knife.digital_ocean_connection
|
163
153
|
end
|
@@ -165,40 +155,36 @@ describe Chef::Knife::ServerBootstrapDigitalocean do
|
|
165
155
|
|
166
156
|
describe "#server_ip_address" do
|
167
157
|
|
158
|
+
let(:droplets_resource) { double(:all => droplets) }
|
159
|
+
|
168
160
|
before do
|
169
161
|
@knife.config[:chef_node_name] = "yak"
|
170
162
|
allow(@knife).to receive(:digital_ocean_connection) { connection }
|
163
|
+
allow(connection).to receive(:droplets) { droplets_resource }
|
171
164
|
end
|
172
165
|
|
173
|
-
context "when server is found" do
|
174
|
-
|
175
|
-
before do
|
176
|
-
allow(connection).to receive(:servers) { [server] }
|
177
|
-
end
|
166
|
+
context "when single server is found" do
|
178
167
|
|
179
168
|
let(:server) do
|
180
|
-
double(
|
181
|
-
:name => "yak",
|
182
|
-
:state => "active",
|
183
|
-
:public_ip_address => "10.11.12.13"
|
184
|
-
)
|
169
|
+
double(:name => "yak", :status => "active", :public_ip => "10.11.12.13")
|
185
170
|
end
|
186
171
|
|
172
|
+
let(:droplets) { [server] }
|
173
|
+
|
187
174
|
it "returns the provisioned ip address" do
|
188
175
|
expect(@knife.server_ip_address).to eq("10.11.12.13")
|
189
176
|
end
|
190
177
|
|
191
178
|
it "ignores terminated instances" do
|
192
|
-
allow(server).to receive(:
|
179
|
+
allow(server).to receive(:status) { "foobar" }
|
193
180
|
|
194
181
|
expect(@knife.server_ip_address).to be_nil
|
195
182
|
end
|
196
183
|
end
|
197
184
|
|
198
185
|
context "when server is not found" do
|
199
|
-
|
200
|
-
|
201
|
-
end
|
186
|
+
|
187
|
+
let(:droplets) { [] }
|
202
188
|
|
203
189
|
it "returns nil" do
|
204
190
|
expect(@knife.server_ip_address).to be_nil
|
@@ -63,7 +63,7 @@ describe Chef::Knife::ServerBootstrapOpenstack do
|
|
63
63
|
let(:bootstrap) { @knife.openstack_bootstrap }
|
64
64
|
|
65
65
|
it "returns a OpenstackServerCreate instance" do
|
66
|
-
expect(bootstrap).to be_a(Chef::Knife::OpenstackServerCreate)
|
66
|
+
expect(bootstrap).to be_a(Chef::Knife::Cloud::OpenstackServerCreate)
|
67
67
|
end
|
68
68
|
|
69
69
|
it "configs the bootstrap's chef_node_name" do
|
@@ -211,7 +211,8 @@ describe Chef::Knife::ServerBootstrapOpenstack do
|
|
211
211
|
@knife.config[:ssh_password] = "booboo"
|
212
212
|
allow(@knife).to receive(:openstack_connection) { connection }
|
213
213
|
allow(@knife).to receive(:server_ip_address) { "11.11.11.13" }
|
214
|
-
allow(Chef::Knife::OpenstackServerCreate).
|
214
|
+
allow(Chef::Knife::Cloud::OpenstackServerCreate).
|
215
|
+
to receive(:new) { bootstrap }
|
215
216
|
allow(Knife::Server::SSH).to receive(:new) { ssh }
|
216
217
|
allow(Knife::Server::Credentials).to receive(:new) { credentials }
|
217
218
|
allow(credentials).to receive(:install_validation_key)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fletcher Nichol
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 2.0.0
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 2.0.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: knife-ec2
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: 1.0.0
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
124
|
+
version: 1.0.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rspec
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,14 +184,14 @@ dependencies:
|
|
184
184
|
requirements:
|
185
185
|
- - '='
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version: 1.
|
187
|
+
version: 1.3.0
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
192
|
- - '='
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version: 1.
|
194
|
+
version: 1.3.0
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
196
|
name: cane
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|