knife-whisk 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +16 -6
- data/examples/whisk.yml +17 -5
- data/lib/chef/knife/knife-whisk.rb +21 -10
- data/lib/knife-whisk/version.rb +1 -1
- metadata +13 -9
- checksums.yaml +0 -7
data/README.markdown
CHANGED
@@ -14,6 +14,7 @@ Assume you've got knife-whisk installed and configured correctly and it's pointi
|
|
14
14
|
```
|
15
15
|
mixins:
|
16
16
|
defaults:
|
17
|
+
provider: aws
|
17
18
|
image: ami-950680fc # ubuntu instance store
|
18
19
|
subnet: subnet-12345678 # private subnet
|
19
20
|
region: us-east-1
|
@@ -27,15 +28,21 @@ mixins:
|
|
27
28
|
public_subnet:
|
28
29
|
subnet: subnet-87654321
|
29
30
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
provider_config:
|
32
|
+
aws:
|
33
|
+
cli_command: "ec2 sever create"
|
34
|
+
security-groups:
|
35
|
+
default: sg-12345678
|
36
|
+
java_app_server: sg-34567890
|
37
|
+
kvm:
|
38
|
+
cli_command: "vm create"
|
39
|
+
|
34
40
|
servers:
|
35
41
|
app_server:
|
36
42
|
mixins:
|
37
43
|
- defaults
|
38
44
|
config:
|
45
|
+
provider: aws
|
39
46
|
run-list:
|
40
47
|
- "recipe[application-wrapper]"
|
41
48
|
security-groups:
|
@@ -71,6 +78,8 @@ This is where knife-whisk shines. You don't have to be aware of all the ins and
|
|
71
78
|
|
72
79
|
Most importantly, as a team you define what your production servers look like in your whisk.yml file and you'll never bring up a new node with a missing security group because you forgot some ancillary service was on the node that needed it.
|
73
80
|
|
81
|
+
Security groups with VPC are a pain so we added a way to call them by name in your whisk.yml. knife-whisk will translate the `--security-groups name1,name2` to `--security-groups-ids id1,id2` according to what is in your "security-groups" lookup section.
|
82
|
+
|
74
83
|
## Installation
|
75
84
|
|
76
85
|
Add this line to your application's Gemfile:
|
@@ -131,7 +140,7 @@ knife whisk generate application_server --mixins public_subnet
|
|
131
140
|
```
|
132
141
|
|
133
142
|
```
|
134
|
-
knife whisk generate application_server --overrides "--environment
|
143
|
+
knife whisk generate application_server --overrides "--environment dev --node-name dev-application-server"
|
135
144
|
```
|
136
145
|
|
137
146
|
## Tab Completion
|
@@ -140,9 +149,10 @@ knife whisk generate application_server --overrides "--environment=dev --node-na
|
|
140
149
|
This repository also includes a zsh folder, with a replacement for oh-my-zsh's knife plugin. Copy that to your ~/.oh-my-zsh/plugins/knife folder, and enabled the plugin by adding "knife" to your plugins=() in your .zshrc. You will likely need to reload your shell.
|
141
150
|
|
142
151
|
## Todo
|
143
|
-
*
|
152
|
+
* supprot for --json-attributes knife flag
|
144
153
|
* whisk add mixin
|
145
154
|
* whisk add server
|
155
|
+
* whisk provider list
|
146
156
|
* bash tab completion
|
147
157
|
|
148
158
|
##Authors
|
data/examples/whisk.yml
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
mixins:
|
2
2
|
defaults:
|
3
|
+
provider: aws
|
3
4
|
image: ami-950680fc # ubuntu instance store
|
4
5
|
subnet: subnet-12345678 # private subnet
|
5
6
|
region: us-east-1
|
@@ -8,22 +9,32 @@ mixins:
|
|
8
9
|
ssh-user: ubuntu
|
9
10
|
template: chef_full
|
10
11
|
security-groups: default
|
12
|
+
aws:
|
13
|
+
provider: aws
|
11
14
|
ebs:
|
12
15
|
image: ami-e50e888c
|
13
16
|
public_subnet:
|
14
17
|
subnet: subnet-87654321
|
15
18
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
provider_config:
|
20
|
+
aws:
|
21
|
+
cli_command: "ec2 server create"
|
22
|
+
security-groups:
|
23
|
+
default: sg-12345678
|
24
|
+
load_balancer: sg-23456789
|
25
|
+
java_app_server: sg-34567890
|
26
|
+
database_server: sg-45678901
|
27
|
+
kvm:
|
28
|
+
cli_command: "vm create"
|
29
|
+
rackspace:
|
30
|
+
cli_command: "rackspace server create"
|
21
31
|
|
22
32
|
servers:
|
23
33
|
prod_nginx_load_balancer:
|
24
34
|
mixins:
|
25
35
|
- defaults
|
26
36
|
- public_subnet
|
37
|
+
- aws
|
27
38
|
config:
|
28
39
|
run-list:
|
29
40
|
- "recipe[nginx]"
|
@@ -48,6 +59,7 @@ servers:
|
|
48
59
|
- defaults
|
49
60
|
- ebs
|
50
61
|
config:
|
62
|
+
provider: rackspace
|
51
63
|
run-list:
|
52
64
|
- "recipe[postgres]"
|
53
65
|
environment: prod
|
@@ -52,11 +52,11 @@ class Chef
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def get_security_groups(groups)
|
55
|
-
groups.split(',').map! { |name| name.replace(get_config["security-groups"][name]) }.join(',')
|
55
|
+
groups.split(',').map! { |name| name.replace(get_config["provider_config"]["aws"]["security-groups"][name]) }.join(',')
|
56
56
|
end
|
57
57
|
|
58
58
|
def security_group_exists?(group)
|
59
|
-
! get_config["security-groups"][group].nil?
|
59
|
+
! get_config["provider_config"]["aws"]["security-groups"][group].nil?
|
60
60
|
end
|
61
61
|
|
62
62
|
def mixin_exists?(mixin)
|
@@ -173,18 +173,29 @@ class Chef
|
|
173
173
|
output_hash = output_hash.merge(@config[:overrides])
|
174
174
|
end
|
175
175
|
|
176
|
-
#
|
177
|
-
|
178
|
-
|
179
|
-
output_hash["security-groups"].
|
180
|
-
|
181
|
-
|
176
|
+
#check things for aws
|
177
|
+
if output_hash["provider"]["aws"]
|
178
|
+
#convert security-group names to ids if needed and make sure they exist in the lookup hash
|
179
|
+
unless output_hash["security-groups"].nil?
|
180
|
+
exit_with_message("security-groups not defined for this config in whisk.yml") unless get_config["provider_config"]["aws"]["security-groups"]
|
181
|
+
output_hash["security-groups"].split(',').each { |group| exit_with_message("#{group} security group does not exist in whisk.yml") unless security_group_exists?(group)}
|
182
|
+
output_hash["security-group-ids"] = get_security_groups(output_hash["security-groups"])
|
183
|
+
output_hash.delete("security-groups")
|
184
|
+
end
|
182
185
|
end
|
183
186
|
|
184
|
-
#
|
187
|
+
#some values need quotes for knife ec2 to accept the arg
|
185
188
|
output_hash["run-list"] = add_quotes(output_hash["run-list"]) unless output_hash["run-list"].nil?
|
189
|
+
# json doesn't work currently output_hash["json-attributes"] = add_quotes(output_hash["json-attributes"]) unless output_hash["json-attributes"].nil?
|
190
|
+
|
191
|
+
#get config string and check to make sure it exists
|
192
|
+
exit_with_message("provider attribute must be provided") unless output_hash["provider"]
|
193
|
+
exit_with_message("#{output_hash["provider"]} cli_command doesn't exist in whisk.yml") unless full_hash["provider_config"][output_hash["provider"]]["cli_command"]
|
194
|
+
cli_command = full_hash["provider_config"][output_hash["provider"]]["cli_command"]
|
195
|
+
|
196
|
+
output_hash.delete("provider")
|
186
197
|
|
187
|
-
printf "knife
|
198
|
+
printf "knife %s %s\n", cli_command, output_hash.map { |key, value| ["--"+key, value] }.join(" ")
|
188
199
|
end
|
189
200
|
end
|
190
201
|
end
|
data/lib/knife-whisk/version.rb
CHANGED
metadata
CHANGED
@@ -1,27 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-whisk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Nic Grayson
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-22 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: chef
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- - '>='
|
19
|
+
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '0'
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- - '>='
|
27
|
+
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '0'
|
27
30
|
description: A utility for quickly whipping up new servers in a team environment
|
@@ -45,25 +48,26 @@ files:
|
|
45
48
|
- zsh/_knife
|
46
49
|
homepage: ''
|
47
50
|
licenses: []
|
48
|
-
metadata: {}
|
49
51
|
post_install_message:
|
50
52
|
rdoc_options: []
|
51
53
|
require_paths:
|
52
54
|
- lib
|
53
55
|
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
54
57
|
requirements:
|
55
|
-
- - '>='
|
58
|
+
- - ! '>='
|
56
59
|
- !ruby/object:Gem::Version
|
57
60
|
version: '0'
|
58
61
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
59
63
|
requirements:
|
60
|
-
- - '>='
|
64
|
+
- - ! '>='
|
61
65
|
- !ruby/object:Gem::Version
|
62
66
|
version: '0'
|
63
67
|
requirements: []
|
64
68
|
rubyforge_project:
|
65
|
-
rubygems_version:
|
69
|
+
rubygems_version: 1.8.23
|
66
70
|
signing_key:
|
67
|
-
specification_version:
|
71
|
+
specification_version: 3
|
68
72
|
summary: Extends knife to display knife ec2 server create commands
|
69
73
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 14bd4c3ad621d14ee341d773ff75ad7afa5dacf1
|
4
|
-
data.tar.gz: b028449ba2113dc75b28262ebfec758692db58f7
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 19dc6286ebf16222c7d5682f9b795492f29d3a677c987fa562bb66a00d98482e92ff31ca27e5c1b554a06e3ffac85d5b3709dfc11f297dfc8f1078693327c623
|
7
|
-
data.tar.gz: 3ad95946d5165a3926a8a0bdf0510e54005035142b68d2ef80a3d771a16331a3a848ff8273735d9a4394e9141d8af204bcc26350814ed8a73b399507a8e6cfc4
|