toquen 0.1.6 → 0.1.7
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/README.md +57 -18
- data/lib/toquen.rb +2 -1
- data/lib/toquen/aws.rb +32 -0
- data/lib/toquen/capistrano.rb +24 -0
- data/lib/toquen/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34b63993bc1126c81404fbe874d89914614bfff5
|
4
|
+
data.tar.gz: c4d2634dc32e3c8536bbc23b0b897c8a743aedbd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e33a6a39783554076024a8aa06d90aaf967c1928c42e05441316524592565db98f63def6bbc8872b4c8f7f5abc1b93e72291750d09c88be7af0e4907d07fd36f
|
7
|
+
data.tar.gz: e3ec4ce94543cf174ecbd00cfb7e938b44167952d46dec9edc147ff9c3f878c5280d521427b9add8afd173c682e1c82ae6c076a1fd78c61698479bd785e8efc7
|
data/README.md
CHANGED
@@ -21,8 +21,10 @@ require 'toquen'
|
|
21
21
|
|
22
22
|
And then on the command line execute:
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
```shell
|
25
|
+
bundle
|
26
|
+
cap toquen_install
|
27
|
+
```
|
26
28
|
|
27
29
|
This will create a config directory with a file named *deploy.rb*. Edit this file, setting the location of your AWS key, AWS credentials, and chef cookbooks/data bags/roles. If your servers are in a region (or regions) other than us-east-1, then you'll need to set the region as [described below](#additional-configuration).
|
28
30
|
|
@@ -30,7 +32,9 @@ Then, in AWS, create an [AWS instance tag](http://docs.aws.amazon.com/AWSEC2/lat
|
|
30
32
|
|
31
33
|
Then, run:
|
32
34
|
|
33
|
-
|
35
|
+
```shell
|
36
|
+
cap update_roles
|
37
|
+
```
|
34
38
|
|
35
39
|
This will create a data_bag named *servers* in your data_bags path that contains one item per server name, as well as create stages per server and role for use in capistrano.
|
36
40
|
|
@@ -45,43 +49,59 @@ Bootstrapping a server will perform all of the following:
|
|
45
49
|
|
46
50
|
You can bootstrap a single server by using:
|
47
51
|
|
48
|
-
|
52
|
+
```shell
|
53
|
+
cap server-<server name> bootstrap
|
54
|
+
```
|
49
55
|
|
50
56
|
Or a all the servers with a given role:
|
51
57
|
|
52
|
-
|
58
|
+
```shell
|
59
|
+
cap <role name> bootstrap
|
60
|
+
```
|
53
61
|
|
54
62
|
Or on all servers:
|
55
63
|
|
56
|
-
|
64
|
+
```shell
|
65
|
+
cap all bootstrap
|
66
|
+
```
|
57
67
|
|
58
68
|
A lockfile is created after the first bootstrapping so that the full bootstrap process is only run once per server.
|
59
69
|
|
60
70
|
## Running Chef-Solo
|
61
71
|
You can run chef-solo for a single server by using:
|
62
72
|
|
63
|
-
|
73
|
+
```shell
|
74
|
+
cap server-<server name> cook
|
75
|
+
```
|
64
76
|
|
65
77
|
Or a all the servers with a given role with:
|
66
78
|
|
67
|
-
|
79
|
+
```shell
|
80
|
+
cap <role name> cook
|
81
|
+
```
|
68
82
|
|
69
83
|
Or on all servers:
|
70
84
|
|
71
|
-
|
85
|
+
```shell
|
86
|
+
cap all cook
|
87
|
+
```
|
72
88
|
|
73
89
|
## Updating Roles
|
74
90
|
If you change the roles of any servers on AWS (or add any new ones) you will need to run:
|
75
91
|
|
76
|
-
|
92
|
+
```shell
|
93
|
+
cap update_roles
|
94
|
+
```
|
77
95
|
|
78
96
|
This will update the *servers* data_bag as well as the capistrano stages.
|
79
97
|
|
80
98
|
## Additional Configuration
|
81
|
-
If you want to use a different tag name (or you like commas as a delimiter) you can specify your own role extractor by placing the following in either your Capfile or config/deploy.rb:
|
99
|
+
If you want to use a different tag name (or you like commas as a delimiter) you can specify your own role extractor/setter by placing the following in either your Capfile or config/deploy.rb:
|
82
100
|
|
83
101
|
```ruby
|
102
|
+
# these are the default - replace with your own
|
84
103
|
Toquen.config.aws_roles_extractor = lambda { |inst| (inst.tags["MyRoles"] || "").split(",") }
|
104
|
+
Toquen.config.aws_roles_setter = lambda { |ec2, inst, roles| ec2.tags.create(inst, 'Roles', :value => roles.sort.join(' ')) }
|
85
105
|
```
|
86
106
|
|
87
107
|
By default, instance information is only pulled out of the default region (us-east-1), but you can specify mutiple alternative regions:
|
@@ -99,27 +119,46 @@ set :chef_upload_location, "/tmp/toquen"
|
|
99
119
|
## View Instances
|
100
120
|
To see details about your aws instances you can use the **details** cap task.
|
101
121
|
|
102
|
-
|
122
|
+
```shell
|
123
|
+
cap all details
|
124
|
+
```
|
103
125
|
|
104
126
|
Or for a given role with:
|
105
127
|
|
106
|
-
|
128
|
+
```shell
|
129
|
+
cap <role name> details
|
130
|
+
```
|
107
131
|
|
108
132
|
Or for a given server with:
|
109
133
|
|
110
|
-
|
134
|
+
```shell
|
135
|
+
cap server-<server name> details
|
136
|
+
```
|
111
137
|
|
112
138
|
## Open SSH to Current Machine
|
113
139
|
To allow an SSH connection from your current machine (based on your internet visible IP, as determined using [this method](http://findingscience.com/internet/ruby/2014/05/17/stunning:-determining-your-public-ip.html)), use the open_ssh/close_ssh capistrano tasks.
|
114
140
|
|
115
|
-
|
141
|
+
```shell
|
142
|
+
cap databases open_ssh
|
143
|
+
```
|
116
144
|
|
117
145
|
And then, when you're finished:
|
118
146
|
|
119
|
-
|
147
|
+
```shell
|
148
|
+
cap databases close_ssh
|
149
|
+
```
|
120
150
|
|
121
151
|
Or, if you want to do everything in one step:
|
122
152
|
|
123
|
-
|
153
|
+
```shell
|
154
|
+
cap databases open_ssh cook close_ssh
|
155
|
+
```
|
156
|
+
|
157
|
+
**Note**: You can also use the task *open_port[22]* and *close_port[22]* to open and close SSH (or any other port).
|
158
|
+
|
159
|
+
## Additional Cap Tasks
|
160
|
+
There are a few other helper cap tasks as well - to see them, run:
|
124
161
|
|
125
|
-
|
162
|
+
```shell
|
163
|
+
cap -T
|
164
|
+
```
|
data/lib/toquen.rb
CHANGED
@@ -8,10 +8,11 @@ require "toquen/details_table"
|
|
8
8
|
|
9
9
|
module Toquen
|
10
10
|
class Config
|
11
|
-
attr_accessor :aws_roles_extractor
|
11
|
+
attr_accessor :aws_roles_extractor, :aws_roles_setter
|
12
12
|
|
13
13
|
def initialize
|
14
14
|
@aws_roles_extractor = lambda { |inst| (inst.tags["Roles"] || "").split }
|
15
|
+
@aws_roles_setter = lambda { |ec2, inst, roles| ec2.tags.create(inst, 'Roles', :value => roles.sort.join(' ')) }
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
data/lib/toquen/aws.rb
CHANGED
@@ -21,6 +21,38 @@ module Toquen
|
|
21
21
|
}
|
22
22
|
end
|
23
23
|
|
24
|
+
def add_role(ivips, role)
|
25
|
+
@regions.each do |region|
|
26
|
+
AWS.config(:access_key_id => @key_id, :secret_access_key => @key, :region => region)
|
27
|
+
ec2 = AWS::EC2.new
|
28
|
+
ec2.instances.map do |i|
|
29
|
+
if ivips.include? i.public_ip_address
|
30
|
+
roles = Toquen.config.aws_roles_extractor.call(i)
|
31
|
+
unless roles.include? role
|
32
|
+
roles << role
|
33
|
+
ec2.tags.create(i, 'Roles', :value => roles.uniq.sort.join(' '))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def remove_role(ivips, role)
|
41
|
+
@regions.each do |region|
|
42
|
+
AWS.config(:access_key_id => @key_id, :secret_access_key => @key, :region => region)
|
43
|
+
ec2 = AWS::EC2.new
|
44
|
+
ec2.instances.map do |i|
|
45
|
+
if ivips.include? i.public_ip_address
|
46
|
+
roles = Toquen.config.aws_roles_extractor.call(i)
|
47
|
+
if roles.include? role
|
48
|
+
roles = roles.reject { |r| r == role }
|
49
|
+
Toquen.config.aws_roles_setter.call(ec2, i, roles.uniq)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
24
56
|
def get_security_groups(ids)
|
25
57
|
ectwo = AWS::EC2.new
|
26
58
|
ids.map { |id| ectwo.security_groups[id] }
|
data/lib/toquen/capistrano.rb
CHANGED
@@ -86,6 +86,30 @@ task :cook do
|
|
86
86
|
end
|
87
87
|
before :cook, :update_kitchen
|
88
88
|
|
89
|
+
desc "Add given role to machines"
|
90
|
+
task :add_role, :role do |t, args|
|
91
|
+
run_locally do
|
92
|
+
if args[:role].nil? or args[:role].empty?
|
93
|
+
error "You must give the role to add"
|
94
|
+
else
|
95
|
+
aws = Toquen::AWSProxy.new
|
96
|
+
aws.add_role roles(:all), args[:role]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
desc "Remove given role from machines"
|
102
|
+
task :remove_role, :role do |t, args|
|
103
|
+
run_locally do
|
104
|
+
if args[:role].nil? or args[:role].empty?
|
105
|
+
error "You must give the role to remove"
|
106
|
+
else
|
107
|
+
aws = Toquen::AWSProxy.new
|
108
|
+
aws.remove_role roles(:all), args[:role]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
89
113
|
desc "Open a port of ingress to the current machine"
|
90
114
|
task :open_port, :port do |t, args|
|
91
115
|
port = (args[:port] || 22).to_i
|
data/lib/toquen/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toquen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Muller
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|