sambot 0.1.69 → 0.1.83
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/lib/sambot/cli.rb +16 -18
- data/lib/sambot/commands/cookbook.rb +56 -38
- data/lib/sambot/commands/packer.rb +21 -0
- data/lib/sambot/commands/session.rb +15 -5
- data/lib/sambot/commands/workstation.rb +8 -10
- data/lib/sambot/domain/bastion_host.rb +59 -0
- data/lib/sambot/domain/chef/kitchen.rb +39 -0
- data/lib/sambot/domain/{cookbooks → chef}/metadata.rb +6 -5
- data/lib/sambot/domain/common/{application_exception.rb → application_error.rb} +1 -1
- data/lib/sambot/domain/common/config.rb +13 -6
- data/lib/sambot/domain/common/file_checker.rb +3 -2
- data/lib/sambot/domain/common/runtime.rb +5 -5
- data/lib/sambot/domain/common/template_provider.rb +1 -1
- data/lib/sambot/domain/cookbook.rb +103 -0
- data/lib/sambot/domain/dns.rb +24 -0
- data/lib/sambot/domain/packer.rb +26 -0
- data/lib/sambot/domain/session.rb +25 -0
- data/lib/sambot/domain/{workstations/ssh_config_file.rb → ssh/config_file.rb} +7 -7
- data/lib/sambot/domain/{workstations/ssh_config_section.rb → ssh/config_section.rb} +2 -2
- data/lib/sambot/domain/{workstations/ssh_parser.rb → ssh/parser.rb} +8 -7
- data/lib/sambot/domain/ui.rb +19 -0
- data/lib/sambot/domain/vault.rb +32 -0
- data/lib/sambot/domain/workstation.rb +25 -0
- data/lib/sambot/templates/{.kitchen.gcp.windows.yml → .kitchen.gcp.yml.erb} +33 -5
- data/lib/sambot/templates/.kitchen.rackspace.yml.erb +49 -0
- data/lib/sambot/templates/{.kitchen.centos.yml → .kitchen.yml.erb} +6 -1
- data/lib/sambot/templates/metadata.rb.erb +9 -2
- data/lib/sambot/templates/packer.linux.json +22 -0
- data/lib/sambot/templates/packer.windows.json.erb +18 -0
- data/lib/sambot/templates/teamcity.sh.erb +7 -7
- data/lib/sambot/version.rb +1 -1
- data/sambot.gemspec +7 -1
- metadata +120 -36
- data/lib/sambot/commands/secret.rb +0 -32
- data/lib/sambot/commands/teamcity.rb +0 -15
- data/lib/sambot/domain/common/ui.rb +0 -21
- data/lib/sambot/domain/cookbooks/assistant_chef.rb +0 -103
- data/lib/sambot/domain/cookbooks/kitchen.rb +0 -30
- data/lib/sambot/domain/secrets/vault.rb +0 -28
- data/lib/sambot/domain/workstations/env.rb +0 -0
- data/lib/sambot/domain/workstations/hosts.rb +0 -0
- data/lib/sambot/domain/workstations/install.sh +0 -1
- data/lib/sambot/templates/.kitchen.gcp.centos.yml +0 -39
- data/lib/sambot/templates/.kitchen.rackspace.centos.yml +0 -27
- data/lib/sambot/templates/.kitchen.rackspace.windows.yml +0 -34
- data/lib/sambot/templates/.kitchen.windows.yml +0 -16
@@ -1,21 +0,0 @@
|
|
1
|
-
module Sambot
|
2
|
-
module Domain
|
3
|
-
module Common
|
4
|
-
module UI
|
5
|
-
|
6
|
-
def debug(msg)
|
7
|
-
say("debug: #{msg}", :yellow)
|
8
|
-
end
|
9
|
-
|
10
|
-
def info(msg)
|
11
|
-
say(" info: #{msg}", :green)
|
12
|
-
end
|
13
|
-
|
14
|
-
def error(msg)
|
15
|
-
say("error: #{msg}", :red)
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,103 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
require 'git'
|
3
|
-
|
4
|
-
module Sambot
|
5
|
-
module Domain
|
6
|
-
module Cookbooks
|
7
|
-
class AssistantChef
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
@modified_files = []
|
11
|
-
end
|
12
|
-
|
13
|
-
def build_cookbook(essential_files, generated_files)
|
14
|
-
config = Common::Config.new.read
|
15
|
-
validate_cookbook_structure(config['platform'], essential_files, generated_files)
|
16
|
-
setup_test_kitchen(config)
|
17
|
-
build_metadata(config)
|
18
|
-
copy_git_hooks()
|
19
|
-
@modified_files
|
20
|
-
end
|
21
|
-
|
22
|
-
def clean_cookbook(generated_files)
|
23
|
-
delete_file('metadata.rb')
|
24
|
-
delete_file('winrm_config')
|
25
|
-
generated_files.each { |file| delete_file(file) }
|
26
|
-
Dir.glob('\.kitchen*\.yml').each { |file| delete_file(file)}
|
27
|
-
@modified_files
|
28
|
-
end
|
29
|
-
|
30
|
-
def generate_cookbook(name, platform, type, description, essential_files, generated_files)
|
31
|
-
Git.init(name)
|
32
|
-
Dir.chdir(name) do
|
33
|
-
FileUtils.mkdir('test')
|
34
|
-
FileUtils.mkdir('spec')
|
35
|
-
FileUtils.mkdir('recipes')
|
36
|
-
FileUtils.touch('README.md')
|
37
|
-
write_config(name, description, platform, type)
|
38
|
-
build_cookbook(essential_files, generated_files)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
def write_config(name, description, platform, type)
|
45
|
-
contents = {
|
46
|
-
'name' => name,
|
47
|
-
'version' => '0.0.1',
|
48
|
-
'platform' => platform,
|
49
|
-
'suites' => [{
|
50
|
-
'name' => 'default',
|
51
|
-
'run_list' => [
|
52
|
-
"recipe[#{name}]"
|
53
|
-
],
|
54
|
-
'verifier' => {
|
55
|
-
'inspec_tests' => ['./test']
|
56
|
-
}
|
57
|
-
}],
|
58
|
-
'description' => description,
|
59
|
-
}.to_yaml
|
60
|
-
File.write('.config.yml', contents)
|
61
|
-
end
|
62
|
-
|
63
|
-
def copy_git_hooks
|
64
|
-
working_path = '.git/hooks/pre-push'
|
65
|
-
template_path = Common::TemplateProvider.new.get_path('pre-push')
|
66
|
-
File.delete(working_path) if File.exist?(working_path)
|
67
|
-
FileUtils.cp(template_path, working_path)
|
68
|
-
end
|
69
|
-
|
70
|
-
def delete_file(filename)
|
71
|
-
return unless File.exist?(filename)
|
72
|
-
File.delete(filename)
|
73
|
-
@modified_files << filename
|
74
|
-
end
|
75
|
-
|
76
|
-
def validate_cookbook_structure(platform, essential_files, generated_files)
|
77
|
-
essential_files.each { |path| Common::FileChecker.new.verify(path) }
|
78
|
-
if platform == 'windows'
|
79
|
-
Common::FileChecker.new.update(['winrm_config'])
|
80
|
-
@modified_files << 'winrm_config'
|
81
|
-
end
|
82
|
-
Common::FileChecker.new.update(generated_files)
|
83
|
-
@modified_files = @modified_files + generated_files
|
84
|
-
end
|
85
|
-
|
86
|
-
def setup_test_kitchen(config)
|
87
|
-
files = Kitchen.new.generate_yml(config['name'], config['platform'], config['suites'])
|
88
|
-
files.each do |filename, contents|
|
89
|
-
File.write(filename, contents)
|
90
|
-
@modified_files << filename
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
def build_metadata(config)
|
95
|
-
result = Metadata.new.generate(config['name'], config['platform'], config['version'], config['description'], config['dependencies'])
|
96
|
-
File.write('metadata.rb', result)
|
97
|
-
@modified_files << 'metadata.rb'
|
98
|
-
end
|
99
|
-
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module Sambot
|
2
|
-
module Domain
|
3
|
-
module Cookbooks
|
4
|
-
class Kitchen
|
5
|
-
|
6
|
-
def generate_yml(name, platform, suites = nil)
|
7
|
-
raise ApplicationException, 'Missing platform when trying to generate Test-Kitchen YAML.' unless platform
|
8
|
-
raise ApplicationException, 'Missing cookbook name when trying to generate Test-Kitchen YAML.' unless name
|
9
|
-
result = {}
|
10
|
-
['', '.gcp', '.rackspace'].map do |type|
|
11
|
-
yaml = load_yaml(type, platform, name)
|
12
|
-
yaml['suites'] = suites if suites
|
13
|
-
result[".kitchen#{type}.yml"] = yaml.to_yaml
|
14
|
-
end
|
15
|
-
result
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def load_yaml(type, platform, name)
|
21
|
-
filename = File.join(File.dirname(__FILE__), '../../templates', ".kitchen#{type}.#{platform}.yml")
|
22
|
-
contents = File.read(filename)
|
23
|
-
contents = contents.gsub(/@@cookbook_name@@/, name)
|
24
|
-
YAML.load(contents)
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Sambot
|
2
|
-
module Domain
|
3
|
-
module Secrets
|
4
|
-
class Vault
|
5
|
-
|
6
|
-
def initialize
|
7
|
-
if Gem.win_platform?
|
8
|
-
@tool_dir = 'C:/Program Files/vault'
|
9
|
-
@tool_exe = 'as-vault-tool.exe'
|
10
|
-
else
|
11
|
-
@tool_dir = '/opt/vault-tool'
|
12
|
-
@tool_exe = 'as-vault-tool'
|
13
|
-
end
|
14
|
-
@tool_version = '1.0.2'
|
15
|
-
end
|
16
|
-
|
17
|
-
def read(path)
|
18
|
-
`#{@tool_dir}/#{@tool_version}/#{@tool_exe} read -p #{path}`
|
19
|
-
end
|
20
|
-
|
21
|
-
def write(path)
|
22
|
-
raise 'Not yet implemented'
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
File without changes
|
File without changes
|
@@ -1 +0,0 @@
|
|
1
|
-
brew install vault
|
@@ -1,39 +0,0 @@
|
|
1
|
-
---
|
2
|
-
provisioner:
|
3
|
-
name: chef_zero
|
4
|
-
log_level: <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
|
5
|
-
deprecations_as_errors: true
|
6
|
-
cookbooks_path:
|
7
|
-
- .
|
8
|
-
|
9
|
-
platforms:
|
10
|
-
- name: centos
|
11
|
-
driver:
|
12
|
-
name: sfmc_google
|
13
|
-
region: <%= ENV['GCP_REGION'] %>
|
14
|
-
project: <%= ENV['GCP_PROJECT'] %>
|
15
|
-
image_project: <%= ENV['GCP_CENTOS_IMAGE_PROJECT'] %>
|
16
|
-
image_family: <%= ENV['GCP_CENTOS_IMAGE_FAMILY'] %>
|
17
|
-
network: <%= ENV['GCP_NETWORK'] %>
|
18
|
-
subnet: <%= ENV['GCP_SUBNETWORK'] %>
|
19
|
-
use_private_ip: false
|
20
|
-
preemptible: true
|
21
|
-
service_account_name: <%= ENV['GCP_SERVICE_ACCOUNT_NAME'] %>
|
22
|
-
service_account_scopes:
|
23
|
-
- userinfo-email
|
24
|
-
- logging-write
|
25
|
-
- monitoring-write
|
26
|
-
tags:
|
27
|
-
- "test-kitchen"
|
28
|
-
- "consul-agent"
|
29
|
-
- "vault-client"
|
30
|
-
|
31
|
-
transport:
|
32
|
-
username: chefuser
|
33
|
-
ssh_key:
|
34
|
-
- <%= ENV['GCP_SSH_KEY'] || "" %>
|
35
|
-
|
36
|
-
verifier:
|
37
|
-
name: inspec
|
38
|
-
format: junit
|
39
|
-
output: inspec_results.xml
|
@@ -1,27 +0,0 @@
|
|
1
|
-
---
|
2
|
-
provisioner:
|
3
|
-
name: chef_zero
|
4
|
-
log_level: <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
|
5
|
-
deprecations_as_errors: true
|
6
|
-
cookbooks_path:
|
7
|
-
- .
|
8
|
-
|
9
|
-
platforms:
|
10
|
-
- name: centos
|
11
|
-
transport:
|
12
|
-
ssh_key: ./id_rsa
|
13
|
-
driver:
|
14
|
-
name: rackspace
|
15
|
-
rackconnect_wait: true
|
16
|
-
servicenet: true
|
17
|
-
require_chef_omnibus: true
|
18
|
-
no_ssh_tcp_check: true
|
19
|
-
no_ssh_tcp_check_sleep: 240
|
20
|
-
image_id: 398c5f65-23e2-44da-97d8-d28ff5ec583b
|
21
|
-
flavor_id: 6
|
22
|
-
public_key_path: ./id_rsa.pub
|
23
|
-
rackspace_region: 'lon'
|
24
|
-
server_name: @@cookbook_name@@-<%= Time.now.to_i %>
|
25
|
-
|
26
|
-
verifier:
|
27
|
-
name: inspec
|
@@ -1,34 +0,0 @@
|
|
1
|
-
---
|
2
|
-
provisioner:
|
3
|
-
name: chef_zero
|
4
|
-
log_level: <%= ENV['TEST_KITCHEN_LOG_LEVEL'] || 'info' %>
|
5
|
-
deprecations_as_errors: true
|
6
|
-
cookbooks_path:
|
7
|
-
- .
|
8
|
-
|
9
|
-
transport:
|
10
|
-
name: winrm
|
11
|
-
elevated: true
|
12
|
-
username: Administrator
|
13
|
-
|
14
|
-
platforms:
|
15
|
-
- name: windows
|
16
|
-
driver:
|
17
|
-
name: rax
|
18
|
-
log_level: info
|
19
|
-
wait_for: 3600
|
20
|
-
use_private_ip: <%= ENV['IN_CI_PIPELINE'] %>
|
21
|
-
rackspace_username: <%= ENV['RACKSPACE_USERNAME'] %>
|
22
|
-
rackspace_api_key: <%= ENV['RACKSPACE_API_KEY'] %>
|
23
|
-
network: <%= ENV['NETWORK'] || 'public' %>
|
24
|
-
image_id: 8bfada8f-9917-46dd-aa82-be533d5279fa
|
25
|
-
flavor_id: general1-4
|
26
|
-
rackspace_region: LON
|
27
|
-
rackconnect_wait: true
|
28
|
-
platform: windows
|
29
|
-
user_data: winrm_config
|
30
|
-
|
31
|
-
verifier:
|
32
|
-
name: inspec
|
33
|
-
format: junit
|
34
|
-
output: inspec_results.xml
|