shelter 0.0.4 → 0.0.5
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 +8 -5
- data/lib/cli/ansible_helper.rb +15 -12
- data/lib/cli/stack/cloud_formation.rb +28 -53
- data/lib/shelter.rb +3 -1
- data/lib/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: 0e6809cf1cc3418ab086795b255461754ce0be7a
|
4
|
+
data.tar.gz: 40bd1fd16a6f62e754a840f0941a7acfe8d653f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1637a566b08c10a54ff2253af02e047decdfa67a4c0a3582c4c91b34b57aa70f6de04357b32e0e5e90d884e9f39d5f1f0a3c6a7d4a81d8b2267f2bbf5581cb4
|
7
|
+
data.tar.gz: 27ec4c6ed3bc358586bd60ad66c5c00d9a7380024aa1277dafb2beb00ae4a819f3e92b9bc79ab7574aea144725130a73f88057d4302fa0862f0ff0a1000a097a
|
data/README.md
CHANGED
@@ -1,8 +1,11 @@
|
|
1
|
+
[](https://badge.fury.io/rb/shelter)
|
2
|
+
[](https://travis-ci.org/Yitsushi/shelter)
|
3
|
+
|
1
4
|
# Configuration
|
2
5
|
|
3
6
|
Create `Shelterfile.rb`:
|
4
7
|
|
5
|
-
```
|
8
|
+
```ruby
|
6
9
|
Shelter::CLI::App.config do |c|
|
7
10
|
c.ansible_directory = 'ansible'
|
8
11
|
c.stack_directory = 'stack'
|
@@ -16,7 +19,7 @@ end
|
|
16
19
|
|
17
20
|
Create a ruby file under your inventory directory:
|
18
21
|
|
19
|
-
```
|
22
|
+
```ruby
|
20
23
|
# inventory/my_inventory.rb
|
21
24
|
module Inventory
|
22
25
|
class MyInventory
|
@@ -33,7 +36,7 @@ end
|
|
33
36
|
Create a directory under your `stack` directory (eg: `random`)
|
34
37
|
and create your template there. `cli.rb` will be loaded.
|
35
38
|
|
36
|
-
```
|
39
|
+
```ruby
|
37
40
|
# stack/random_stack/cli.rb:
|
38
41
|
module Stack
|
39
42
|
class RandomStack < Shelter::CLI::Stack::CloudFormation
|
@@ -55,7 +58,7 @@ Create a directory under your `plugin` directory and place your code there.
|
|
55
58
|
|
56
59
|
### Example #1: extra command
|
57
60
|
|
58
|
-
```
|
61
|
+
```ruby
|
59
62
|
# plugin/check/main.rb
|
60
63
|
require 'thor'
|
61
64
|
|
@@ -73,7 +76,7 @@ Shelter::CLI::App.register(Plugin::Check, 'check', 'check [COMMAND]', 'check plu
|
|
73
76
|
|
74
77
|
### Example #2: extra command under a specific namespace
|
75
78
|
|
76
|
-
```
|
79
|
+
```ruby
|
77
80
|
# plugin/ansible_scanner/main.rb
|
78
81
|
require 'thor'
|
79
82
|
|
data/lib/cli/ansible_helper.rb
CHANGED
@@ -26,22 +26,25 @@ module Shelter
|
|
26
26
|
command
|
27
27
|
end
|
28
28
|
|
29
|
-
def optional_params(
|
29
|
+
def optional_params(opts)
|
30
30
|
command = []
|
31
|
-
command << "--tags '#{tags.join(',')}'" unless tags.empty?
|
32
|
-
command << "--skip-tags '#{skip.join(',')}'" unless
|
33
|
-
|
31
|
+
command << "--tags '#{opts[:tags].join(',')}'" unless opts[:tags].empty?
|
32
|
+
command << "--skip-tags '#{opts[:skip].join(',')}'" unless
|
33
|
+
opts[:skip].empty?
|
34
|
+
command << "--limit '#{opts[:limit]}'" unless opts[:limit].nil?
|
34
35
|
command
|
35
36
|
end
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
command
|
44
|
-
|
38
|
+
# server_user: nil, inventory: nil,
|
39
|
+
# tags: [], skip: [], limit: nil
|
40
|
+
def ansible_execute(playbook, options = {})
|
41
|
+
params = {
|
42
|
+
inventory: nil, server_user: nil, tags: [], skip: [], limit: nil
|
43
|
+
}.merge(options)
|
44
|
+
command = [command_bin, inventory_file(params[:inventory]),
|
45
|
+
vault_password_file]
|
46
|
+
command += new_server_params(params[:server_user])
|
47
|
+
command += optional_params(params)
|
45
48
|
command << "#{App.config.ansible_directory}/#{playbook}.yaml"
|
46
49
|
|
47
50
|
full_command = command.join(' ')
|
@@ -10,24 +10,15 @@ module Shelter
|
|
10
10
|
class CloudFormation < Thor
|
11
11
|
desc 'status', 'Stack status'
|
12
12
|
def status
|
13
|
-
|
13
|
+
stack = cf_client.describe_stacks(
|
14
14
|
stack_name: get_attr(:stack_name)
|
15
15
|
).stacks.first
|
16
16
|
|
17
|
-
puts "#{
|
18
|
-
puts "Created: #{target_stack.creation_time}"
|
17
|
+
puts "#{stack.stack_name} exists | #{stack.creation_time}"
|
19
18
|
|
20
|
-
|
21
|
-
stack_name:
|
22
|
-
)
|
23
|
-
resources.stack_resources.each do |r|
|
24
|
-
puts "Stack Name: #{r.stack_name}"
|
25
|
-
puts "Resource ID: #{r.physical_resource_id}"
|
26
|
-
puts "Resource Type: #{r.resource_type}"
|
27
|
-
puts "Resource Status: #{r.resource_status}"
|
28
|
-
end
|
29
|
-
rescue Exception => e
|
30
|
-
raise Thor::Error, e.message
|
19
|
+
cf_client.describe_stack_resources(
|
20
|
+
stack_name: stack.stack_name
|
21
|
+
).stack_resources.each { |r| display_stack_resource(r) }
|
31
22
|
end
|
32
23
|
|
33
24
|
desc 'create', 'Create stack'
|
@@ -36,24 +27,12 @@ module Shelter
|
|
36
27
|
stack_name: get_attr(:stack_name),
|
37
28
|
template_body: File.open(get_attr(:template_file)).read,
|
38
29
|
capabilities: ['CAPABILITY_IAM'],
|
39
|
-
tags:
|
40
|
-
{ key: 'client', value: get_attr(:meta)[:client] },
|
41
|
-
{ key: 'type', value: get_attr(:meta)[:type] },
|
42
|
-
{ key: 'application', value: get_attr(:meta)[:application] }
|
43
|
-
]
|
30
|
+
tags: stack_meta
|
44
31
|
)
|
45
|
-
i = 0
|
46
32
|
cf_client.wait_until(
|
47
33
|
:stack_create_complete,
|
48
34
|
stack_name: get_attr(:stack_name)
|
49
|
-
)
|
50
|
-
w.before_attempt do
|
51
|
-
i = (i + 1) % SPINNER.size
|
52
|
-
print "\r#{SPINNER[i]}"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
rescue Exception => e
|
56
|
-
raise Thor::Error, e.message
|
35
|
+
)
|
57
36
|
end
|
58
37
|
|
59
38
|
desc 'update', 'Update stack'
|
@@ -63,32 +42,29 @@ module Shelter
|
|
63
42
|
template_body: File.open(get_attr(:template_file)).read,
|
64
43
|
capabilities: ['CAPABILITY_IAM']
|
65
44
|
)
|
66
|
-
i = 0
|
67
45
|
cf_client.wait_until(
|
68
46
|
:stack_update_complete,
|
69
47
|
stack_name: get_attr(:stack_name)
|
70
|
-
)
|
71
|
-
w.before_attempt do
|
72
|
-
i = (i + 1) % SPINNER.size
|
73
|
-
print "\r#{SPINNER[i]}"
|
74
|
-
end
|
75
|
-
end
|
76
|
-
rescue Exception => e
|
77
|
-
raise Thor::Error, e.message
|
48
|
+
)
|
78
49
|
end
|
79
50
|
|
51
|
+
# Attribute helpers
|
80
52
|
no_commands do
|
81
53
|
class << self
|
54
|
+
attr_accessor :_attr
|
82
55
|
def set_attr(name, value)
|
83
|
-
|
84
|
-
|
56
|
+
self._attr ||= {}
|
57
|
+
self._attr[name] = value
|
85
58
|
end
|
86
59
|
end
|
87
60
|
|
88
61
|
def get_attr(name)
|
89
|
-
|
62
|
+
self.class._attr[name] if self.class._attr.key? name
|
90
63
|
end
|
64
|
+
end
|
91
65
|
|
66
|
+
# AWS helpers
|
67
|
+
no_commands do
|
92
68
|
def cf_client
|
93
69
|
@cf_client ||= Aws::CloudFormation::Client.new(
|
94
70
|
credentials: Aws::Credentials.new(
|
@@ -98,20 +74,19 @@ module Shelter
|
|
98
74
|
)
|
99
75
|
end
|
100
76
|
|
101
|
-
def
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
stack_name: target_stack.stack_name
|
108
|
-
)
|
109
|
-
|
110
|
-
eip = resources.stack_resources.select do |r|
|
111
|
-
r.resource_type == 'AWS::EC2::EIP'
|
112
|
-
end.first
|
77
|
+
def display_stack_resource(r)
|
78
|
+
puts "Stack Name: #{r.stack_name}"
|
79
|
+
puts "Resource ID: #{r.physical_resource_id}"
|
80
|
+
puts "Resource Type: #{r.resource_type}"
|
81
|
+
puts "Resource Status: #{r.resource_status}"
|
82
|
+
end
|
113
83
|
|
114
|
-
|
84
|
+
def stack_meta
|
85
|
+
[
|
86
|
+
{ key: 'client', value: get_attr(:meta)[:client] },
|
87
|
+
{ key: 'type', value: get_attr(:meta)[:type] },
|
88
|
+
{ key: 'application', value: get_attr(:meta)[:application] }
|
89
|
+
]
|
115
90
|
end
|
116
91
|
end
|
117
92
|
end
|
data/lib/shelter.rb
CHANGED
@@ -17,7 +17,9 @@ class String
|
|
17
17
|
else
|
18
18
|
string.sub(/^(?:(?=\b|[A-Z_])|\w)/) { $&.downcase }
|
19
19
|
end
|
20
|
-
string.gsub(
|
20
|
+
string.gsub(%r{(?:_|(/))([a-z\d]*)}) do
|
21
|
+
"#{Regexp.last_match(1)}#{Regexp.last_match(2).capitalize}"
|
22
|
+
end.gsub('/', '::')
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shelter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Balazs Nadasdi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|