sambot 0.1.69 → 0.1.83

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/lib/sambot/cli.rb +16 -18
  3. data/lib/sambot/commands/cookbook.rb +56 -38
  4. data/lib/sambot/commands/packer.rb +21 -0
  5. data/lib/sambot/commands/session.rb +15 -5
  6. data/lib/sambot/commands/workstation.rb +8 -10
  7. data/lib/sambot/domain/bastion_host.rb +59 -0
  8. data/lib/sambot/domain/chef/kitchen.rb +39 -0
  9. data/lib/sambot/domain/{cookbooks → chef}/metadata.rb +6 -5
  10. data/lib/sambot/domain/common/{application_exception.rb → application_error.rb} +1 -1
  11. data/lib/sambot/domain/common/config.rb +13 -6
  12. data/lib/sambot/domain/common/file_checker.rb +3 -2
  13. data/lib/sambot/domain/common/runtime.rb +5 -5
  14. data/lib/sambot/domain/common/template_provider.rb +1 -1
  15. data/lib/sambot/domain/cookbook.rb +103 -0
  16. data/lib/sambot/domain/dns.rb +24 -0
  17. data/lib/sambot/domain/packer.rb +26 -0
  18. data/lib/sambot/domain/session.rb +25 -0
  19. data/lib/sambot/domain/{workstations/ssh_config_file.rb → ssh/config_file.rb} +7 -7
  20. data/lib/sambot/domain/{workstations/ssh_config_section.rb → ssh/config_section.rb} +2 -2
  21. data/lib/sambot/domain/{workstations/ssh_parser.rb → ssh/parser.rb} +8 -7
  22. data/lib/sambot/domain/ui.rb +19 -0
  23. data/lib/sambot/domain/vault.rb +32 -0
  24. data/lib/sambot/domain/workstation.rb +25 -0
  25. data/lib/sambot/templates/{.kitchen.gcp.windows.yml → .kitchen.gcp.yml.erb} +33 -5
  26. data/lib/sambot/templates/.kitchen.rackspace.yml.erb +49 -0
  27. data/lib/sambot/templates/{.kitchen.centos.yml → .kitchen.yml.erb} +6 -1
  28. data/lib/sambot/templates/metadata.rb.erb +9 -2
  29. data/lib/sambot/templates/packer.linux.json +22 -0
  30. data/lib/sambot/templates/packer.windows.json.erb +18 -0
  31. data/lib/sambot/templates/teamcity.sh.erb +7 -7
  32. data/lib/sambot/version.rb +1 -1
  33. data/sambot.gemspec +7 -1
  34. metadata +120 -36
  35. data/lib/sambot/commands/secret.rb +0 -32
  36. data/lib/sambot/commands/teamcity.rb +0 -15
  37. data/lib/sambot/domain/common/ui.rb +0 -21
  38. data/lib/sambot/domain/cookbooks/assistant_chef.rb +0 -103
  39. data/lib/sambot/domain/cookbooks/kitchen.rb +0 -30
  40. data/lib/sambot/domain/secrets/vault.rb +0 -28
  41. data/lib/sambot/domain/workstations/env.rb +0 -0
  42. data/lib/sambot/domain/workstations/hosts.rb +0 -0
  43. data/lib/sambot/domain/workstations/install.sh +0 -1
  44. data/lib/sambot/templates/.kitchen.gcp.centos.yml +0 -39
  45. data/lib/sambot/templates/.kitchen.rackspace.centos.yml +0 -27
  46. data/lib/sambot/templates/.kitchen.rackspace.windows.yml +0 -34
  47. data/lib/sambot/templates/.kitchen.windows.yml +0 -16
@@ -0,0 +1,49 @@
1
+ ---
2
+ provisioner:
3
+ name: chef_zero
4
+ log_level: _@= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' @_
5
+ deprecations_as_errors: true
6
+ require_chef_omnibus: 12
7
+ cookbooks_path:
8
+ - .
9
+
10
+ platforms:
11
+ <% if @platforms.include?('centos') %>
12
+ - name: centos
13
+ transport:
14
+ ssh_key: ./id_rsa
15
+ driver:
16
+ name: rackspace
17
+ rackconnect_wait: true
18
+ servicenet: true
19
+ require_chef_omnibus: true
20
+ no_ssh_tcp_check: true
21
+ no_ssh_tcp_check_sleep: 240
22
+ image_id: 398c5f65-23e2-44da-97d8-d28ff5ec583b
23
+ flavor_id: 6
24
+ public_key_path: ./id_rsa.pub
25
+ rackspace_region: 'lon'
26
+ server_name: @@cookbook_name@@-_@ Time.now.to_i @_
27
+ <% end %>
28
+ <% if @platforms.include?('windows') %>
29
+ - name: windows
30
+ driver:
31
+ name: rax
32
+ log_level: info
33
+ wait_for: 3600
34
+ use_private_ip: _@= ENV['IN_CI_PIPELINE'] @_
35
+ rackspace_username: _@= ENV['RACKSPACE_USERNAME'] @_
36
+ rackspace_api_key: _@= ENV['RACKSPACE_API_KEY'] @_
37
+ network: _@= ENV['NETWORK'] || 'public' @_
38
+ image_id: 8bfada8f-9917-46dd-aa82-be533d5279fa
39
+ flavor_id: general1-4
40
+ rackspace_region: LON
41
+ rackconnect_wait: true
42
+ platform: windows
43
+ user_data: winrm_config
44
+ <% end %>
45
+
46
+ verifier:
47
+ name: inspec
48
+ format: junit
49
+ output: inspec_results.xml
@@ -5,12 +5,17 @@ driver:
5
5
  provisioner:
6
6
  name: chef_zero
7
7
  log_level: info
8
- deprecations_as_errors: true
8
+ require_chef_omnibus: 12
9
9
  cookbooks_path:
10
10
  - .
11
11
 
12
12
  platforms:
13
+ <% if @platforms.include?('centos') %>
13
14
  - name: "centos-7.2"
15
+ <% end %>
16
+ <% if @platforms.include?('windows') %>
17
+ - name: "windows"
18
+ <% end %>
14
19
 
15
20
  verifier:
16
21
  name: inspec
@@ -5,12 +5,19 @@ license 'All rights reserved'
5
5
  description '<%= @cookbook_description %>'
6
6
  long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
7
7
  version '<%= @cookbook_version %>'
8
- chef_version '>=12'
8
+ chef_version '~> 12'
9
9
  issues_url 'https://github.exacttarget.com/ads-cookbooks/<%= @cookbook_name %>/issues'
10
10
  source_url 'https://github.exacttarget.com/ads-cookbooks/<%= @cookbook_name %>'
11
- supports '<%= @cookbook_platform %>'
11
+ <% @cookbook_platforms.each do |platform| %>
12
+ supports '<%= platform %>'
13
+ <% end %>
12
14
  <% if @cookbook_dependencies %>
13
15
  <% @cookbook_dependencies.each do |dependency| %>
14
16
  depends '<%= dependency %>'
15
17
  <% end %>
16
18
  <% end %>
19
+ <% if @cookbook_gems %>
20
+ <% @cookbook_gems.each do |gem_dependency| %>
21
+ gem '<%= gem_dependency %>'
22
+ <% end %>
23
+ <% end %>
@@ -0,0 +1,22 @@
1
+ {
2
+ "variables": {
3
+ "as_project_id": "{{env `GCP_PROJECT`}}",
4
+ "as_source_image_family": "{{env `GCP_CENTOS_IMAGE_FAMILY`}}",
5
+ "as_zone": "{{env `GCP_REGION`}}",
6
+ "as_cookbook_name": "{{env `COOKBOOK_NAME`}}",
7
+ "as_account_file": "{{env `GOOGLE_APPLICATION_CREDENTIALS`}}",
8
+ "as_source_image_project_id": "{{env `GCP_CENTOS_IMAGE_PROJECT`}}",
9
+ },
10
+ "builders": [
11
+ {
12
+ "type": "googlecompute",
13
+ "account_file": "{{user `as_account_file`}}",
14
+ "image_family": "{{user `as_cookbook_name`}}",
15
+ "image_name": "{{env `COOKBOOK_NAME`}}-@@cookbook_name@@",
16
+ "project_id": "{{user `as_project_id`}}",
17
+ "source_image_family": "{{user `as_source_image_family`}}",
18
+ "source_image_project_id": "{{user `as_source_image_project_id`}}",
19
+ "zone": "{{user `as_zone`}}"
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "builders": [{
3
+ "type": "googlecompute",
4
+ "account_file": "account.json",
5
+ "project_id": "my project",
6
+ "source_image": "windows-server-2016-dc-v20170227",
7
+ "disk_size": "50",
8
+ "machine_type": "n1-standard-1",
9
+ "communicator": "winrm",
10
+ "winrm_username": "packer_user",
11
+ "winrm_insecure": true,
12
+ "winrm_use_ssl": true,
13
+ "metadata": {
14
+ "windows-startup-script-cmd": "winrm quickconfig -quiet & net user /add packer_user & net localgroup administrators packer_user /add & winrm set winrm/config/service/auth @{Basic=\"true\"}"
15
+ },
16
+ "zone": "us-central1-a"
17
+ }]
18
+ }
@@ -10,22 +10,22 @@ chef exec rspec spec --col
10
10
  set +e
11
11
 
12
12
  <% if ENV['TEST_KITCHEN_ACTION'] == 'converge' %>
13
- chef exec kitchen converge -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
13
+ chef exec kitchen converge <%= ENV['TEST_KITCHEN_PLATFORM'] || '' %> -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
14
14
  <% elsif ENV['TEST_KITCHEN_ACTION'] == 'create' %>
15
- chef exec kitchen create -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
15
+ chef exec kitchen create <%= ENV['TEST_KITCHEN_PLATFORM'] || '' %> -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
16
16
  <% elsif ENV['TEST_KITCHEN_ACTION'] == 'multi-step-test' %>
17
- chef exec kitchen converge -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
18
- chef exec kitchen verify -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
19
- chef exec kitchen destroy -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
17
+ chef exec kitchen converge <%= ENV['TEST_KITCHEN_PLATFORM'] || '' %> -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
18
+ chef exec kitchen verify <%= ENV['TEST_KITCHEN_PLATFORM'] || '' %> -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
19
+ chef exec kitchen destroy <%= ENV['TEST_KITCHEN_PLATFORM'] || '' %> -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
20
20
  <% else %>
21
- chef exec kitchen test -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
21
+ chef exec kitchen test <%= ENV['TEST_KITCHEN_PLATFORM'] || '' %> -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
22
22
  RETVAL=$?
23
23
  if [ $RETVAL -eq 0 ] ; then
24
24
  echo "Test Kitchen converged and all tests passed - Ready to upload to server"
25
25
  exit $RETVAL
26
26
  elif [ $RETVAL -ne 0 ] ; then
27
27
  echo "Test Kitchen failed - cleaning up"
28
- kitchen destroy
28
+ kitchen destroy <%= ENV['TEST_KITCHEN_PLATFORM'] || '' %> -l <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
29
29
  exit $RETVAL
30
30
  fi
31
31
  <% end %>
@@ -1,3 +1,3 @@
1
1
  module Sambot
2
- VERSION = '0.1.69'.freeze
2
+ VERSION = '0.1.83'.freeze
3
3
  end
data/sambot.gemspec CHANGED
@@ -20,14 +20,20 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ['lib']
21
21
 
22
22
  spec.add_dependency 'git'
23
+ spec.add_dependency 'process_exists'
24
+ spec.add_dependency 'climate_control'
25
+ spec.add_dependency 'vault'
26
+ spec.add_dependency 'hosts'
23
27
  spec.add_dependency 'chef', '~> 12.18'
24
28
  spec.add_dependency 'thor', '~> 0.19'
25
29
  spec.add_dependency 'erubis', '~> 2.7', '>= 2.7.0'
26
30
  spec.add_dependency 'gems', '~> 1.0', '>= 1.0.0'
31
+ spec.add_development_dependency 'aruba'
32
+ spec.add_dependency 'awesome_print'
33
+ spec.add_development_dependency 'fuubar'
27
34
  spec.add_development_dependency 'rubocop', '~> 0.49'
28
35
  spec.add_development_dependency 'gem-release', '~> 1.0'
29
36
  spec.add_development_dependency 'bundler', '~> 1.14'
30
- spec.add_development_dependency 'climate_control'
31
37
  spec.add_development_dependency 'rake', '~> 10.0'
32
38
  spec.add_development_dependency 'rspec', '~> 3.0'
33
39
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sambot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.69
4
+ version: 0.1.83
5
5
  platform: ruby
6
6
  authors:
7
7
  - Olivier Kouame
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-01 00:00:00.000000000 Z
11
+ date: 2017-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -24,6 +24,62 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: process_exists
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: climate_control
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: vault
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: hosts
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
27
83
  - !ruby/object:Gem::Dependency
28
84
  name: chef
29
85
  requirement: !ruby/object:Gem::Requirement
@@ -92,6 +148,48 @@ dependencies:
92
148
  - - ">="
93
149
  - !ruby/object:Gem::Version
94
150
  version: 1.0.0
151
+ - !ruby/object:Gem::Dependency
152
+ name: aruba
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ - !ruby/object:Gem::Dependency
166
+ name: awesome_print
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ type: :runtime
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ - !ruby/object:Gem::Dependency
180
+ name: fuubar
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ type: :development
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
95
193
  - !ruby/object:Gem::Dependency
96
194
  name: rubocop
97
195
  requirement: !ruby/object:Gem::Requirement
@@ -134,20 +232,6 @@ dependencies:
134
232
  - - "~>"
135
233
  - !ruby/object:Gem::Version
136
234
  version: '1.14'
137
- - !ruby/object:Gem::Dependency
138
- name: climate_control
139
- requirement: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- version: '0'
144
- type: :development
145
- prerelease: false
146
- version_requirements: !ruby/object:Gem::Requirement
147
- requirements:
148
- - - ">="
149
- - !ruby/object:Gem::Version
150
- version: '0'
151
235
  - !ruby/object:Gem::Dependency
152
236
  name: rake
153
237
  requirement: !ruby/object:Gem::Requirement
@@ -204,37 +288,37 @@ files:
204
288
  - lib/sambot.rb
205
289
  - lib/sambot/cli.rb
206
290
  - lib/sambot/commands/cookbook.rb
207
- - lib/sambot/commands/secret.rb
291
+ - lib/sambot/commands/packer.rb
208
292
  - lib/sambot/commands/session.rb
209
- - lib/sambot/commands/teamcity.rb
210
293
  - lib/sambot/commands/workstation.rb
211
- - lib/sambot/domain/common/application_exception.rb
294
+ - lib/sambot/domain/bastion_host.rb
295
+ - lib/sambot/domain/chef/kitchen.rb
296
+ - lib/sambot/domain/chef/metadata.rb
297
+ - lib/sambot/domain/common/application_error.rb
212
298
  - lib/sambot/domain/common/config.rb
213
299
  - lib/sambot/domain/common/file_checker.rb
214
300
  - lib/sambot/domain/common/runtime.rb
215
301
  - lib/sambot/domain/common/template_provider.rb
216
- - lib/sambot/domain/common/ui.rb
217
- - lib/sambot/domain/cookbooks/assistant_chef.rb
218
- - lib/sambot/domain/cookbooks/kitchen.rb
219
- - lib/sambot/domain/cookbooks/metadata.rb
220
- - lib/sambot/domain/secrets/vault.rb
221
- - lib/sambot/domain/workstations/env.rb
222
- - lib/sambot/domain/workstations/hosts.rb
223
- - lib/sambot/domain/workstations/install.sh
224
- - lib/sambot/domain/workstations/ssh_config_file.rb
225
- - lib/sambot/domain/workstations/ssh_config_section.rb
226
- - lib/sambot/domain/workstations/ssh_parser.rb
302
+ - lib/sambot/domain/cookbook.rb
303
+ - lib/sambot/domain/dns.rb
304
+ - lib/sambot/domain/packer.rb
305
+ - lib/sambot/domain/session.rb
306
+ - lib/sambot/domain/ssh/config_file.rb
307
+ - lib/sambot/domain/ssh/config_section.rb
308
+ - lib/sambot/domain/ssh/parser.rb
309
+ - lib/sambot/domain/ui.rb
310
+ - lib/sambot/domain/vault.rb
311
+ - lib/sambot/domain/workstation.rb
227
312
  - lib/sambot/templates/.gitignore
228
- - lib/sambot/templates/.kitchen.centos.yml
229
- - lib/sambot/templates/.kitchen.gcp.centos.yml
230
- - lib/sambot/templates/.kitchen.gcp.windows.yml
231
- - lib/sambot/templates/.kitchen.rackspace.centos.yml
232
- - lib/sambot/templates/.kitchen.rackspace.windows.yml
233
- - lib/sambot/templates/.kitchen.windows.yml
313
+ - lib/sambot/templates/.kitchen.gcp.yml.erb
314
+ - lib/sambot/templates/.kitchen.rackspace.yml.erb
315
+ - lib/sambot/templates/.kitchen.yml.erb
234
316
  - lib/sambot/templates/.rubocop.yml
235
317
  - lib/sambot/templates/Berksfile
236
318
  - lib/sambot/templates/chefignore
237
319
  - lib/sambot/templates/metadata.rb.erb
320
+ - lib/sambot/templates/packer.linux.json
321
+ - lib/sambot/templates/packer.windows.json.erb
238
322
  - lib/sambot/templates/pre-push
239
323
  - lib/sambot/templates/startup-script.ps1
240
324
  - lib/sambot/templates/teamcity.sh.erb
@@ -1,32 +0,0 @@
1
-
2
- module Sambot
3
- module Commands
4
-
5
- class Secret < Thor
6
-
7
- namespace 'secret'
8
-
9
- desc 'read PATH', 'Reads a secret from the vault'
10
- long_desc <<-LONGDESC
11
- `sambot secret read /path/to/my/secret` will read the secret located in the
12
- path provided out of Hashicorp Vault. It relies on a proprietary tool written
13
- by the Advertising Studio Platform Engineering team called as-vault. Make sure
14
- you have this tool installed before using this command.
15
- LONGDESC
16
- def read(path)
17
- Sambot::Vault.new.read(path)
18
- end
19
-
20
- desc 'write', 'Write a secret to the vault'
21
- def write
22
- Sambot::Vault.new.write(path)
23
- end
24
-
25
- desc 'list', 'List all secrets at a given path'
26
- def list
27
- Sambot::Vault.new.list(path)
28
- end
29
-
30
- end
31
- end
32
- end
@@ -1,15 +0,0 @@
1
- module Sambot
2
- module Commands
3
-
4
- class TeamCity < Thor
5
-
6
- namespace 'teamcity'
7
-
8
- desc "keys", "Gets the deploy keys for TeamCity"
9
- def keys
10
- puts "not implemented"
11
- end
12
-
13
- end
14
- end
15
- end