chef-workflow 0.1.1 → 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.
- data/CHANGELOG.md +19 -0
- data/LICENSE.txt +2 -2
- data/README.md +31 -142
- data/bin/chef-workflow-bootstrap +6 -0
- data/chef-workflow.gemspec +4 -1
- data/lib/chef-workflow.rb +41 -39
- data/lib/chef-workflow/support/attr.rb +28 -26
- data/lib/chef-workflow/support/db.rb +26 -0
- data/lib/chef-workflow/support/db/basic.rb +225 -0
- data/lib/chef-workflow/support/db/group.rb +72 -0
- data/lib/chef-workflow/support/debug.rb +47 -45
- data/lib/chef-workflow/support/ec2.rb +136 -134
- data/lib/chef-workflow/support/general.rb +46 -54
- data/lib/chef-workflow/support/generic.rb +27 -23
- data/lib/chef-workflow/support/ip.rb +89 -103
- data/lib/chef-workflow/support/knife-plugin.rb +26 -24
- data/lib/chef-workflow/support/knife.rb +76 -102
- data/lib/chef-workflow/support/scheduler.rb +319 -324
- data/lib/chef-workflow/support/ssh.rb +100 -0
- data/lib/chef-workflow/support/vagrant.rb +34 -30
- data/lib/chef-workflow/support/vm.rb +25 -54
- data/lib/chef-workflow/support/vm/chef_server.rb +28 -19
- data/lib/chef-workflow/support/vm/ec2.rb +135 -106
- data/lib/chef-workflow/support/vm/helpers/knife.rb +26 -0
- data/lib/chef-workflow/support/vm/knife.rb +218 -189
- data/lib/chef-workflow/support/vm/vagrant.rb +90 -74
- data/lib/chef-workflow/version.rb +3 -5
- metadata +57 -4
@@ -1,95 +1,111 @@
|
|
1
|
-
require 'chef-workflow/support/vagrant'
|
2
|
-
require 'chef-workflow/support/ip'
|
3
1
|
require 'vagrant/prison'
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
# Provisions a server group with vagrant and virtualbox.
|
8
|
-
#
|
9
|
-
# All vagrant machines share the same IP address on eth0, which is typically
|
10
|
-
# 10.0.2.15. To compensate for that, a host-only network address will be
|
11
|
-
# auto-generated for each server in the group and lives on eth1. It is strongly
|
12
|
-
# recommended that you deal with this problem in your chef cookbooks, as
|
13
|
-
# node["ipaddress"] will typically be wrong and we cannot compensate for it.
|
14
|
-
#
|
15
|
-
# Groups provisioned in this manner are done so with Vagrant::Prison.
|
16
|
-
#
|
17
|
-
class VagrantProvisioner
|
18
|
-
# Vagrant::Prison object
|
19
|
-
attr_reader :prison
|
20
|
-
# number of servers to provision
|
21
|
-
attr_reader :number_of_servers
|
22
|
-
# name of server group
|
23
|
-
attr_accessor :name
|
24
|
-
|
3
|
+
module ChefWorkflow
|
4
|
+
class VM
|
25
5
|
#
|
26
|
-
#
|
6
|
+
# Provisions a server group with vagrant and virtualbox.
|
27
7
|
#
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
8
|
+
# All vagrant machines share the same IP address on eth0, which is typically
|
9
|
+
# 10.0.2.15. To compensate for that, a host-only network address will be
|
10
|
+
# auto-generated for each server in the group and lives on eth1. It is strongly
|
11
|
+
# recommended that you deal with this problem in your chef cookbooks, as
|
12
|
+
# node["ipaddress"] will typically be wrong and we cannot compensate for it.
|
34
13
|
#
|
35
|
-
#
|
14
|
+
# Groups provisioned in this manner are done so with Vagrant::Prison.
|
36
15
|
#
|
37
|
-
|
38
|
-
|
39
|
-
|
16
|
+
class VagrantProvisioner
|
17
|
+
require 'chef-workflow/support/vagrant'
|
18
|
+
require 'chef-workflow/support/ip'
|
19
|
+
require 'chef-workflow/support/db/basic'
|
40
20
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
21
|
+
# Vagrant::Prison object
|
22
|
+
attr_reader :prison
|
23
|
+
# number of servers to provision
|
24
|
+
attr_reader :number_of_servers
|
25
|
+
# name of server group
|
26
|
+
attr_accessor :name
|
47
27
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
28
|
+
#
|
29
|
+
# Constructor. Expects a server group name and a number of servers to provision.
|
30
|
+
#
|
31
|
+
def initialize(name, number_of_servers)
|
32
|
+
@db = ChefWorkflow::DatabaseSupport::Object.new("vm_prisons")
|
33
|
+
@name = name
|
34
|
+
@number_of_servers = number_of_servers
|
35
|
+
@prison = @db[name]
|
36
|
+
end
|
54
37
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
38
|
+
#
|
39
|
+
# Get the ips associated with this server group.
|
40
|
+
#
|
41
|
+
def ips
|
42
|
+
ChefWorkflow::IPSupport.get_role_ips(name)
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
# Get the appropriate Vagrant UI class, depending on debugging settings.
|
47
|
+
#
|
48
|
+
def ui_class
|
49
|
+
$CHEF_WORKFLOW_DEBUG >= 2 ? Vagrant::UI::Basic : Vagrant::UI::Silent
|
50
|
+
end
|
61
51
|
|
62
|
-
|
52
|
+
#
|
53
|
+
# helper to bootstrap vagrant requirements.
|
54
|
+
#
|
55
|
+
def bootstrap_vagrant_ipsupport
|
56
|
+
ChefWorkflow::IPSupport.seed_vagrant_ips
|
57
|
+
end
|
63
58
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
59
|
+
#
|
60
|
+
# Provision a group of servers. If successful, returns an array of the ips
|
61
|
+
# allocated for the group. Ignores incoming arguments.
|
62
|
+
#
|
63
|
+
def startup(*args)
|
64
|
+
bootstrap_vagrant_ipsupport
|
65
|
+
|
66
|
+
ChefWorkflow::IPSupport.delete_role(name)
|
67
|
+
|
68
|
+
@prison = Vagrant::Prison.new(Dir.mktmpdir, false)
|
69
|
+
prison.name = name
|
70
|
+
prison.configure do |config|
|
71
|
+
config.vm.box_url = ChefWorkflow::VagrantSupport.box_url
|
72
|
+
config.vm.box = ChefWorkflow::VagrantSupport.box
|
73
|
+
number_of_servers.times do |x|
|
74
|
+
ip = ChefWorkflow::IPSupport.unused_ip
|
75
|
+
ChefWorkflow::IPSupport.assign_role_ip(name, ip)
|
76
|
+
config.vm.define "#{name}-#{x}" do |this_config|
|
77
|
+
this_config.vm.network :hostonly, ip
|
78
|
+
end
|
74
79
|
end
|
75
80
|
end
|
81
|
+
|
82
|
+
prison.construct(:ui_class => ui_class)
|
83
|
+
@db[name] = prison # eager save in case start has issues
|
84
|
+
|
85
|
+
return prison.start ? ips : false
|
86
|
+
ensure
|
87
|
+
@db[name] = prison
|
76
88
|
end
|
77
89
|
|
78
|
-
|
90
|
+
#
|
91
|
+
# Deprovisions the servers for this group, and cleans up the prison and
|
92
|
+
# allocated IP addresses.
|
93
|
+
#
|
94
|
+
def shutdown
|
95
|
+
@prison ||= @db[name]
|
79
96
|
|
80
|
-
|
81
|
-
|
97
|
+
if prison
|
98
|
+
prison.configure_environment(:ui_class => ui_class)
|
99
|
+
prison.cleanup
|
100
|
+
end
|
101
|
+
ChefWorkflow::IPSupport.delete_role(name)
|
102
|
+
@db.delete(name)
|
103
|
+
return true
|
104
|
+
end
|
82
105
|
|
83
|
-
|
84
|
-
|
85
|
-
# allocated IP addresses.
|
86
|
-
#
|
87
|
-
def shutdown
|
88
|
-
if prison
|
89
|
-
prison.configure_environment(:ui_class => ui_class)
|
90
|
-
prison.cleanup
|
106
|
+
def report
|
107
|
+
["#{@number_of_servers} servers; prison dir: #{@prison.dir}"]
|
91
108
|
end
|
92
|
-
IPSupport.singleton.delete_role(name)
|
93
109
|
end
|
94
110
|
end
|
95
111
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-workflow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
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:
|
12
|
+
date: 2013-02-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: vagrant-prison
|
@@ -75,6 +75,54 @@ dependencies:
|
|
75
75
|
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: 2.2.2
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: knife-server
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 0.3.3
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.3.3
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: sqlite3
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.3.6
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.3.6
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: deprecated
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 3.0.1
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 3.0.1
|
78
126
|
- !ruby/object:Gem::Dependency
|
79
127
|
name: rdoc
|
80
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,6 +164,7 @@ extensions: []
|
|
116
164
|
extra_rdoc_files: []
|
117
165
|
files:
|
118
166
|
- .gitignore
|
167
|
+
- CHANGELOG.md
|
119
168
|
- Gemfile
|
120
169
|
- LICENSE.txt
|
121
170
|
- README.md
|
@@ -124,6 +173,9 @@ files:
|
|
124
173
|
- chef-workflow.gemspec
|
125
174
|
- lib/chef-workflow.rb
|
126
175
|
- lib/chef-workflow/support/attr.rb
|
176
|
+
- lib/chef-workflow/support/db.rb
|
177
|
+
- lib/chef-workflow/support/db/basic.rb
|
178
|
+
- lib/chef-workflow/support/db/group.rb
|
127
179
|
- lib/chef-workflow/support/debug.rb
|
128
180
|
- lib/chef-workflow/support/ec2.rb
|
129
181
|
- lib/chef-workflow/support/general.rb
|
@@ -132,10 +184,12 @@ files:
|
|
132
184
|
- lib/chef-workflow/support/knife-plugin.rb
|
133
185
|
- lib/chef-workflow/support/knife.rb
|
134
186
|
- lib/chef-workflow/support/scheduler.rb
|
187
|
+
- lib/chef-workflow/support/ssh.rb
|
135
188
|
- lib/chef-workflow/support/vagrant.rb
|
136
189
|
- lib/chef-workflow/support/vm.rb
|
137
190
|
- lib/chef-workflow/support/vm/chef_server.rb
|
138
191
|
- lib/chef-workflow/support/vm/ec2.rb
|
192
|
+
- lib/chef-workflow/support/vm/helpers/knife.rb
|
139
193
|
- lib/chef-workflow/support/vm/knife.rb
|
140
194
|
- lib/chef-workflow/support/vm/vagrant.rb
|
141
195
|
- lib/chef-workflow/version.rb
|
@@ -159,9 +213,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
213
|
version: '0'
|
160
214
|
requirements: []
|
161
215
|
rubyforge_project:
|
162
|
-
rubygems_version: 1.8.
|
216
|
+
rubygems_version: 1.8.25
|
163
217
|
signing_key:
|
164
218
|
specification_version: 3
|
165
219
|
summary: A comprehensive rake-based workflow for chef
|
166
220
|
test_files: []
|
167
|
-
has_rdoc:
|