sambot 0.1.69 → 0.1.83
Sign up to get free protection for your applications and to get access to all the features.
- 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
|