wombat-cli 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/DESIGN.md +2 -1
- data/README.md +10 -32
- data/Rakefile +1 -52
- data/cookbooks/automate/.kitchen.ec2.yml +8 -1
- data/cookbooks/automate/.kitchen.yml +0 -1
- data/cookbooks/automate/metadata.rb +0 -2
- data/cookbooks/automate/recipes/default.rb +4 -3
- data/cookbooks/automate/test/integration/default/automate_spec.rb +3 -2
- data/cookbooks/build_node/.kitchen.ec2.yml +8 -1
- data/cookbooks/build_node/metadata.rb +0 -3
- data/cookbooks/build_node/recipes/default.rb +5 -2
- data/cookbooks/build_node/test/integration/default/build-node_spec.rb +3 -2
- data/cookbooks/chef_server/.kitchen.ec2.yml +8 -0
- data/cookbooks/chef_server/.kitchen.yml +0 -1
- data/cookbooks/chef_server/metadata.rb +0 -2
- data/cookbooks/chef_server/recipes/{cheffish.rb → bootstrap_users.rb} +1 -1
- data/cookbooks/chef_server/recipes/default.rb +30 -14
- data/cookbooks/chef_server/test/integration/default/chef_server_spec.rb +7 -4
- data/cookbooks/compliance/.kitchen.ec2.yml +8 -0
- data/cookbooks/compliance/metadata.rb +0 -1
- data/cookbooks/compliance/recipes/default.rb +5 -7
- data/cookbooks/compliance/test/integration/default/compliance.rb +3 -2
- data/cookbooks/infranodes/.kitchen.ec2.yml +23 -2
- data/cookbooks/infranodes/recipes/default.rb +25 -9
- data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/recipes/default.rb +9 -3
- data/cookbooks/infranodes/test/integration/default/infranodes_spec.rb +11 -9
- data/cookbooks/wombat/attributes/default.rb +2 -0
- data/cookbooks/wombat/metadata.rb +2 -0
- data/cookbooks/wombat/recipes/authorized-keys.rb +10 -0
- data/cookbooks/workstation/recipes/certs-keys.rb +2 -1
- data/cookbooks/workstation/templates/default/ssh_config.erb +2 -2
- data/lib/wombat/build.rb +138 -120
- data/lib/wombat/cli.rb +8 -0
- data/lib/wombat/common.rb +27 -12
- data/lib/wombat/deploy.rb +33 -26
- data/lib/wombat/version.rb +1 -1
- data/packer/automate.json +7 -5
- data/packer/build-node.json +6 -4
- data/packer/chef-server.json +11 -6
- data/packer/compliance.json +6 -5
- data/packer/infranodes-windows.json +100 -0
- data/packer/infranodes.json +6 -5
- data/packer/workstation.json +5 -4
- data/stacks/.gitkeep +0 -0
- data/templates/bootstrap-aws.erb +2 -2
- data/templates/cfn.json.erb +16 -15
- data/wombat.example.yml +45 -35
- metadata +5 -15
- data/packer/mock-data/.gitignore +0 -16
- data/packer/mock-data/.kitchen.yml +0 -21
- data/packer/mock-data/Berksfile +0 -3
- data/packer/mock-data/README.md +0 -4
- data/packer/mock-data/chefignore +0 -102
- data/packer/mock-data/metadata.rb +0 -7
- data/packer/mock-data/recipes/default.rb +0 -69
- data/packer/mock-data/spec/spec_helper.rb +0 -2
- data/packer/mock-data/spec/unit/recipes/default_spec.rb +0 -20
- data/packer/mock-data/test/integration/default/serverspec/default_spec.rb +0 -9
- data/packer/mock-data/test/integration/helpers/serverspec/spec_helper.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca6a1a2f8fb637c2d25dd3126f74592d8112e1e7
|
4
|
+
data.tar.gz: 957f61652039515b6f3a072f0846b02e8d195c2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81f88a7148288add492bf6026bfdc22a13d3f7b607d65ffc3fe30e606a4b451320a46fc27696c58fb769974ac7a8d462dd07795d3e85953dee48ab76f1bae722
|
7
|
+
data.tar.gz: 47b7e2ff045a4b939c4ab83f5251bfdbd24021278fe62fc7eb4178fa4d23310651f9566b14fbadea7727be5a0492c5171c4e5080feadc419646db4b9609f1de3
|
data/.gitignore
CHANGED
data/DESIGN.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
## Anatomy of
|
1
|
+
## Anatomy of a Wombat
|
2
2
|
|
3
3
|
### tl;dr
|
4
4
|
|
@@ -11,6 +11,7 @@ as CloudFormation or Google Deployment Manager.
|
|
11
11
|
* coordination without coordination
|
12
12
|
* principle of least surprise
|
13
13
|
* dynamic templates over static files
|
14
|
+
* long build times, short deploy times
|
14
15
|
|
15
16
|
### A Stroll Down Architecture Lane
|
16
17
|
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
[![Stories in Ready](https://badge.waffle.io/chef-cft/wombat.png?label=ready&title=Ready)](https://waffle.io/chef-cft/wombat)
|
2
2
|
# `Project Wombat`
|
3
|
-
|
3
|
+
`wombat` is a gem that builds and creates demo environments using cloud-specific deployment
|
4
|
+
tools like CloudFormation. The demo environments are comprised of instances built
|
5
|
+
from the included packer templates:
|
4
6
|
|
5
7
|
* Chef Server
|
6
8
|
* Chef Automate
|
@@ -9,7 +11,6 @@ A combination of packer templates and terraform plan to configure a demo environ
|
|
9
11
|
* _N_ Infrastructure Nodes
|
10
12
|
* _N_ Windows Workstation
|
11
13
|
|
12
|
-
|
13
14
|
Usage
|
14
15
|
------------
|
15
16
|
|
@@ -23,7 +24,7 @@ directory.
|
|
23
24
|
|
24
25
|
##### Install and Configure ChefDK
|
25
26
|
|
26
|
-
Follow the instructions at https://docs.chef.io/install_dk.html to install and configure ChefDK as your default version of
|
27
|
+
Follow the instructions at https://docs.chef.io/install_dk.html to install and configure ChefDK as your default version of Ruby.
|
27
28
|
|
28
29
|
##### Install Packer
|
29
30
|
|
@@ -32,34 +33,6 @@ Downloads are here: https://www.packer.io/downloads.html . Place in your path fo
|
|
32
33
|
##### Create a wombat.yml
|
33
34
|
|
34
35
|
Create a wombat.yml - there is an example `wombat.example.yml` for reference and easy copying
|
35
|
-
```
|
36
|
-
---
|
37
|
-
name: wombat
|
38
|
-
# Uncomment domain_prefix if you wish to prepend your generated domain.
|
39
|
-
# Ex: The below example would create foo-chef.animals.biz.
|
40
|
-
# domain_prefix: foo-
|
41
|
-
domain: animals.biz
|
42
|
-
enterprise: mammals
|
43
|
-
org: marsupials
|
44
|
-
build-nodes: '1'
|
45
|
-
workstations: '1'
|
46
|
-
workstation-passwd: 'RL9@T40BTmXh'
|
47
|
-
version: 0.2.0
|
48
|
-
ttl: 8
|
49
|
-
products:
|
50
|
-
chef: stable-12.13.37
|
51
|
-
chef-server: stable-12.8.0
|
52
|
-
chefdk: stable-0.16.28
|
53
|
-
compliance: stable-1.3.1
|
54
|
-
automate: stable-0.5.1
|
55
|
-
aws:
|
56
|
-
region: ap-southeast-2
|
57
|
-
az: ap-southeast-2c
|
58
|
-
keypair: keypair-ap-southeast-2
|
59
|
-
source_ami:
|
60
|
-
ubuntu: ami-8c4cb0ec
|
61
|
-
windows: ami-87c037e7
|
62
|
-
```
|
63
36
|
|
64
37
|
*NOTE:* workstation-passwd must meet the minimum Microsoft [Complexity Requirements](https://technet.microsoft.com/en-us/library/hh994562(v=ws.11).aspx)
|
65
38
|
|
@@ -90,13 +63,18 @@ Upload the created template from the `cloudformation` directory.
|
|
90
63
|
|
91
64
|
```
|
92
65
|
# Deploy CloudFormation template
|
93
|
-
$ bin/wombat deploy --cloud aws STACK
|
66
|
+
$ bin/wombat deploy --cloud aws STACK --update-lock --create-template
|
94
67
|
==> Updating wombat.lock
|
95
68
|
==> Generate CloudFormation JSON: STACK.json
|
96
69
|
==> Creating CloudFormation stack
|
97
70
|
Created: arn:aws:cloudformation:us-east-1:862552916454:stack/STACK/2160c580-713e-11e6-b392-50a686e4bb82
|
98
71
|
```
|
99
72
|
|
73
|
+
```
|
74
|
+
# Deploy an already generated template (pre-existing template)
|
75
|
+
bin/wombat deploy --cloud aws STACK
|
76
|
+
```
|
77
|
+
|
100
78
|
*NOTE:* If the cloud is not provided it defaults to `aws`
|
101
79
|
|
102
80
|
##### Login to Windows Workstation
|
data/Rakefile
CHANGED
@@ -1,52 +1 @@
|
|
1
|
-
require '
|
2
|
-
require 'json'
|
3
|
-
require 'openssl'
|
4
|
-
require 'net/ssh'
|
5
|
-
require 'yaml'
|
6
|
-
require 'parallel'
|
7
|
-
require 'aws-sdk'
|
8
|
-
|
9
|
-
namespace :build do
|
10
|
-
desc 'Build an image'
|
11
|
-
task :image, :template, :builder do |_t, args|
|
12
|
-
sh "bin/wombat build -o #{args[:builder]} #{args[:template]}"
|
13
|
-
end
|
14
|
-
|
15
|
-
desc 'Build all images'
|
16
|
-
task :images, :builder, :parallel do |_t, args|
|
17
|
-
if parallel == 'true'
|
18
|
-
sh "bin/wombat build -o #{args[:builder]} --parallel"
|
19
|
-
else
|
20
|
-
sh "bin/wombat build -o #{args[:builder]}"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
namespace :deploy do
|
26
|
-
desc 'Deploy a stack from template'
|
27
|
-
task :create, :stack,:cloud do |_t, args|
|
28
|
-
case args[:cloud]
|
29
|
-
when "gce", "gcp", "google", "gdm"
|
30
|
-
# TODO
|
31
|
-
when "aws", "amazon", "jeffbezosband", "cfn"
|
32
|
-
sh "bin/wombat deploy --cloud aws #{args[:stack]}"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
desc 'Delete a stack'
|
37
|
-
task :delete, :stack, :cloud do |task, args|
|
38
|
-
cloud = args[:cloud] == 'gcp' ? 'gcp' : 'aws'
|
39
|
-
sh "bin/wombat delete --cloud #{cloud} #{args[:stack]}"
|
40
|
-
end
|
41
|
-
|
42
|
-
desc 'List workstation IPs of a stack'
|
43
|
-
task :outputs, :stack, :cloud do |task, args|
|
44
|
-
cloud = args[:cloud] == 'gcp' ? 'gcp' : 'aws'
|
45
|
-
case cloud
|
46
|
-
when "gce", "gcp", "google", "gdm"
|
47
|
-
puts "do google shit"
|
48
|
-
when "aws", "amazon", "jeffbezosband", "cfn"
|
49
|
-
sh "bin/wombat outputs --cloud aws #{args[:stack]}"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -18,10 +18,17 @@ platforms:
|
|
18
18
|
image_id: ami-8e0b9499
|
19
19
|
transport:
|
20
20
|
ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
|
21
|
+
- name: centos-7
|
22
|
+
driver:
|
23
|
+
image_id: ami-6d1c2007
|
24
|
+
transport:
|
25
|
+
username: centos
|
26
|
+
ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
|
21
27
|
|
22
28
|
suites:
|
23
29
|
- name: default
|
24
30
|
run_list:
|
25
|
-
- recipe[apt]
|
26
31
|
- recipe[mock_data]
|
27
32
|
- recipe[automate]
|
33
|
+
- recipe[wombat::authorized-keys]
|
34
|
+
- recipe[wombat::etc-hosts]
|
@@ -3,6 +3,10 @@
|
|
3
3
|
# Recipe:: default
|
4
4
|
#
|
5
5
|
# Copyright (c) 2016 The Authors, All Rights Reserved.
|
6
|
+
apt_update 'packages' do
|
7
|
+
action :update
|
8
|
+
only_if { node['platform_family'] == 'debian' }
|
9
|
+
end
|
6
10
|
|
7
11
|
append_if_no_line "Add temporary hostsfile entry: #{node['ipaddress']}" do
|
8
12
|
path "/etc/hosts"
|
@@ -106,6 +110,3 @@ delete_lines "Remove temporary hostfile entry we added earlier" do
|
|
106
110
|
path "/etc/hosts"
|
107
111
|
pattern "^#{node['ipaddress']}.*#{node['demo']['automate_fqdn']}.*automate"
|
108
112
|
end
|
109
|
-
|
110
|
-
include_recipe 'wombat::authorized-keys'
|
111
|
-
include_recipe 'wombat::etc-hosts'
|
@@ -9,8 +9,9 @@ describe file('/usr/local/bin/jq') do
|
|
9
9
|
it { should be_executable }
|
10
10
|
end
|
11
11
|
|
12
|
-
describe file(
|
13
|
-
its('content') { file("/tmp/public.pub").content }
|
12
|
+
describe file("/home/#{os.name}/.ssh/authorized_keys") do
|
13
|
+
its('content') { should include file("/tmp/public.pub").content }
|
14
|
+
it { should exist }
|
14
15
|
end
|
15
16
|
|
16
17
|
describe package('delivery') do
|
@@ -18,13 +18,20 @@ platforms:
|
|
18
18
|
image_id: ami-8e0b9499
|
19
19
|
transport:
|
20
20
|
ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
|
21
|
+
- name: centos-7
|
22
|
+
driver:
|
23
|
+
image_id: ami-6d1c2007
|
24
|
+
transport:
|
25
|
+
username: centos
|
26
|
+
ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
|
21
27
|
|
22
28
|
suites:
|
23
29
|
- name: default
|
24
30
|
run_list:
|
25
|
-
- recipe[apt]
|
26
31
|
- recipe[mock_data]
|
27
32
|
- recipe[build_node]
|
33
|
+
- recipe[wombat::authorized-keys]
|
34
|
+
- recipe[wombat::etc-hosts]
|
28
35
|
attributes:
|
29
36
|
demo:
|
30
37
|
node-number: '1'
|
@@ -6,10 +6,7 @@ description 'Installs/Configures build-node'
|
|
6
6
|
long_description 'Installs/Configures build-node'
|
7
7
|
version '0.3.0'
|
8
8
|
|
9
|
-
depends 'apt'
|
10
9
|
depends 'chef-sugar'
|
11
10
|
depends 'delivery-base'
|
12
11
|
depends 'delivery_build'
|
13
|
-
depends 'hostsfile'
|
14
|
-
depends 'line'
|
15
12
|
depends 'wombat'
|
@@ -3,6 +3,10 @@
|
|
3
3
|
# Recipe:: default
|
4
4
|
#
|
5
5
|
# Copyright (c) 2016 The Authors, All Rights Reserved.
|
6
|
+
apt_update 'packages' do
|
7
|
+
action :update
|
8
|
+
only_if { node['platform_family'] == 'debian' }
|
9
|
+
end
|
6
10
|
|
7
11
|
directory '/etc/chef'
|
8
12
|
directory '/etc/chef/trusted_certs'
|
@@ -30,6 +34,5 @@ end
|
|
30
34
|
|
31
35
|
node.set['push_jobs']['chef']['chef_server_url'] = node['demo']['chef_server_url']
|
32
36
|
node.set['push_jobs']['chef']['node_name'] = "build-node-#{node['demo']['node-number']}"
|
33
|
-
|
34
|
-
include_recipe 'wombat::etc-hosts'
|
37
|
+
|
35
38
|
include_recipe 'delivery_build::default'
|
@@ -1,7 +1,8 @@
|
|
1
1
|
# build-node tests
|
2
2
|
|
3
|
-
describe file(
|
4
|
-
its('content') { file("/tmp/
|
3
|
+
describe file("/home/#{os.name}/.ssh/authorized_keys") do
|
4
|
+
its('content') { should include file("/tmp/public.pub").content }
|
5
|
+
it { should exist }
|
5
6
|
end
|
6
7
|
|
7
8
|
%w(chef automate compliance).each do |hostname|
|
@@ -18,9 +18,17 @@ platforms:
|
|
18
18
|
image_id: ami-8e0b9499
|
19
19
|
transport:
|
20
20
|
ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
|
21
|
+
- name: centos-7
|
22
|
+
driver:
|
23
|
+
image_id: ami-6d1c2007
|
24
|
+
transport:
|
25
|
+
username: centos
|
26
|
+
ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
|
21
27
|
|
22
28
|
suites:
|
23
29
|
- name: default
|
24
30
|
run_list:
|
25
31
|
- recipe[mock_data]
|
26
32
|
- recipe[chef_server]
|
33
|
+
- recipe[wombat::authorized-keys]
|
34
|
+
- recipe[wombat::etc-hosts]
|
@@ -4,6 +4,11 @@
|
|
4
4
|
#
|
5
5
|
# Copyright (c) 2016 The Authors, All Rights Reserved.
|
6
6
|
|
7
|
+
apt_update 'packages' do
|
8
|
+
action :update
|
9
|
+
only_if { node['platform_family'] == 'debian' }
|
10
|
+
end
|
11
|
+
|
7
12
|
append_if_no_line "Add temporary hostsfile entry: #{node['ipaddress']}" do
|
8
13
|
path "/etc/hosts"
|
9
14
|
line "#{node['ipaddress']} #{node['demo']['domain_prefix']}chef.#{node['demo']['domain']} chef"
|
@@ -14,11 +19,6 @@ execute 'set hostname' do
|
|
14
19
|
action :run
|
15
20
|
end
|
16
21
|
|
17
|
-
append_if_no_line "Add certificate to authorized_keys" do
|
18
|
-
path "/home/#{node['demo']['admin-user']}/.ssh/authorized_keys"
|
19
|
-
line lazy { IO.read('/tmp/public.pub') }
|
20
|
-
end
|
21
|
-
|
22
22
|
directory '/var/opt/opscode'
|
23
23
|
directory '/var/opt/opscode/nginx'
|
24
24
|
directory '/var/opt/opscode/nginx/ca'
|
@@ -44,10 +44,28 @@ chef_ingredient 'chef-server' do
|
|
44
44
|
config "api_fqdn 'chef.#{node['demo']['domain']}'"
|
45
45
|
end
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
47
|
+
if node['platform'] == 'centos'
|
48
|
+
# hardcoding this one as other permutations are known broken
|
49
|
+
filename = 'opscode-push-jobs-server-1.1.6-1.x86_64.rpm'
|
50
|
+
rpm_path = File.join(Chef::Config[:file_cache_path], filename)
|
51
|
+
|
52
|
+
remote_file rpm_path do
|
53
|
+
source "https://packages.chef.io/stable/el/6/#{filename}"
|
54
|
+
action :create_if_missing
|
55
|
+
notifies :install, 'rpm_package[push-jobs-server]', :immediately
|
56
|
+
end
|
57
|
+
|
58
|
+
rpm_package 'push-jobs-server' do
|
59
|
+
action :install
|
60
|
+
source rpm_path
|
61
|
+
#not_if ""
|
62
|
+
end
|
63
|
+
else
|
64
|
+
chef_ingredient 'push-jobs-server' do
|
65
|
+
channel node['demo']['versions']['push-jobs-server'].split('-')[0].to_sym
|
66
|
+
version node['demo']['versions']['push-jobs-server'].split('-')[1]
|
67
|
+
action :install
|
68
|
+
end
|
51
69
|
end
|
52
70
|
|
53
71
|
chef_ingredient 'push-jobs-server' do
|
@@ -55,8 +73,8 @@ chef_ingredient 'push-jobs-server' do
|
|
55
73
|
end
|
56
74
|
|
57
75
|
chef_ingredient 'manage' do
|
58
|
-
channel
|
59
|
-
version
|
76
|
+
channel node['demo']['versions']['manage'].split('-')[0].to_sym
|
77
|
+
version node['demo']['versions']['manage'].split('-')[1]
|
60
78
|
action :install
|
61
79
|
end
|
62
80
|
|
@@ -69,11 +87,9 @@ chef_ingredient 'manage' do
|
|
69
87
|
action :reconfigure
|
70
88
|
end
|
71
89
|
|
72
|
-
include_recipe 'chef_server::
|
90
|
+
include_recipe 'chef_server::bootstrap_users'
|
73
91
|
|
74
92
|
delete_lines "Remove temporary hostfile entry we added earlier" do
|
75
93
|
path "/etc/hosts"
|
76
94
|
pattern "^#{node['ipaddress']}.*#{node['demo']['domain_prefix']}chef\.#{node['demo']['domain']}.*chef"
|
77
95
|
end
|
78
|
-
|
79
|
-
include_recipe 'wombat::etc-hosts'
|
@@ -4,8 +4,9 @@ describe command('hostname') do
|
|
4
4
|
its('stdout') { should eq "chef\n" }
|
5
5
|
end
|
6
6
|
|
7
|
-
describe file(
|
8
|
-
its('content') { file("/tmp/public.pub").content }
|
7
|
+
describe file("/home/#{os.name}/.ssh/authorized_keys") do
|
8
|
+
its('content') { should include file("/tmp/public.pub").content }
|
9
|
+
it { should exist }
|
9
10
|
end
|
10
11
|
|
11
12
|
describe package('chef-server-core') do
|
@@ -15,12 +16,14 @@ end
|
|
15
16
|
|
16
17
|
describe package('chef-manage') do
|
17
18
|
it { should be_installed }
|
18
|
-
its('version') { should match '2.4.
|
19
|
+
its('version') { should match '2.4.3' }
|
19
20
|
end
|
20
21
|
|
22
|
+
version = os.debian? ? '2.1.0' : '1.1.6'
|
23
|
+
|
21
24
|
describe package('opscode-push-jobs-server') do
|
22
25
|
it { should be_installed }
|
23
|
-
its('version') { should match
|
26
|
+
its('version') { should match version }
|
24
27
|
end
|
25
28
|
|
26
29
|
describe command('chef-server-ctl org-list') do
|
@@ -18,9 +18,17 @@ platforms:
|
|
18
18
|
image_id: ami-8e0b9499
|
19
19
|
transport:
|
20
20
|
ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
|
21
|
+
- name: centos-7
|
22
|
+
driver:
|
23
|
+
image_id: ami-6d1c2007
|
24
|
+
transport:
|
25
|
+
username: centos
|
26
|
+
ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
|
21
27
|
|
22
28
|
suites:
|
23
29
|
- name: default
|
24
30
|
run_list:
|
25
31
|
- recipe[mock_data]
|
26
32
|
- recipe[compliance]
|
33
|
+
- recipe[wombat::authorized-keys]
|
34
|
+
- recipe[wombat::etc-hosts]
|
@@ -1,5 +1,10 @@
|
|
1
1
|
# compliance
|
2
2
|
|
3
|
+
apt_update 'packages' do
|
4
|
+
action :update
|
5
|
+
only_if { node['platform_family'] == 'debian' }
|
6
|
+
end
|
7
|
+
|
3
8
|
append_if_no_line "Add temporary hostsfile entry: #{node['ipaddress']}" do
|
4
9
|
path "/etc/hosts"
|
5
10
|
line "#{node['ipaddress']} #{node['demo']['domain_prefix']}compliance.#{node['demo']['domain']} compliance"
|
@@ -10,11 +15,6 @@ execute 'set hostname' do
|
|
10
15
|
action :run
|
11
16
|
end
|
12
17
|
|
13
|
-
append_if_no_line "Add certificate to authorized_keys" do
|
14
|
-
path "/home/#{node['demo']['admin-user']}/.ssh/authorized_keys"
|
15
|
-
line lazy { IO.read('/tmp/public.pub') }
|
16
|
-
end
|
17
|
-
|
18
18
|
directory '/var/opt/chef-compliance'
|
19
19
|
directory '/var/opt/chef-compliance/ssl'
|
20
20
|
directory '/var/opt/chef-compliance/ssl/ca'
|
@@ -55,5 +55,3 @@ delete_lines "Remove temporary hostfile entry we added earlier" do
|
|
55
55
|
path "/etc/hosts"
|
56
56
|
pattern "^#{node['ipaddress']}.*#{node['demo']['domain_prefix']}compliance\.#{node['demo']['domain']}.*compliance"
|
57
57
|
end
|
58
|
-
|
59
|
-
include_recipe 'wombat::etc-hosts'
|
@@ -4,8 +4,9 @@ describe command('hostname') do
|
|
4
4
|
its('stdout') { should eq "compliance\n" }
|
5
5
|
end
|
6
6
|
|
7
|
-
describe file(
|
8
|
-
its('content') { file("/tmp/public.pub").content }
|
7
|
+
describe file("/home/#{os.name}/.ssh/authorized_keys") do
|
8
|
+
its('content') { should include file("/tmp/public.pub").content }
|
9
|
+
it { should exist }
|
9
10
|
end
|
10
11
|
|
11
12
|
describe package('chef-compliance') do
|
@@ -4,7 +4,9 @@ driver:
|
|
4
4
|
aws_ssh_key_id: <%= ENV["EC2_SSH_KEY_NAME"] %>
|
5
5
|
region: us-east-1
|
6
6
|
availability_zone: e
|
7
|
-
instance_type:
|
7
|
+
instance_type: m4.large
|
8
|
+
retryable_sleep: 10
|
9
|
+
retryable_tries: 60
|
8
10
|
|
9
11
|
provisioner:
|
10
12
|
name: chef_zero
|
@@ -13,15 +15,34 @@ verifier:
|
|
13
15
|
name: inspec
|
14
16
|
|
15
17
|
platforms:
|
18
|
+
- name: centos-7
|
19
|
+
driver:
|
20
|
+
image_id: ami-6d1c2007
|
21
|
+
transport:
|
22
|
+
username: centos
|
23
|
+
ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
|
24
|
+
attributes:
|
25
|
+
demo:
|
26
|
+
admin-user: 'centos'
|
16
27
|
- name: ubuntu-1404
|
17
28
|
driver:
|
18
29
|
image_id: ami-8e0b9499
|
19
30
|
transport:
|
20
31
|
ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
|
32
|
+
attributes:
|
33
|
+
demo:
|
34
|
+
admin-user: 'ubuntu'
|
35
|
+
- name: windows-2012r2
|
36
|
+
driver:
|
37
|
+
security_group_ids: ['sg-13f69876']
|
38
|
+
image_id: ami-bd3ba0aa
|
39
|
+
transport:
|
40
|
+
ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
|
21
41
|
|
22
42
|
suites:
|
23
43
|
- name: default
|
24
44
|
run_list:
|
25
|
-
- recipe[apt]
|
26
45
|
- recipe[mock_data]
|
27
46
|
- recipe[infranodes]
|
47
|
+
- recipe[wombat::authorized-keys]
|
48
|
+
- recipe[wombat::etc-hosts]
|
@@ -4,15 +4,31 @@
|
|
4
4
|
#
|
5
5
|
# Copyright (c) 2016 The Authors, All Rights Reserved.
|
6
6
|
|
7
|
+
if node['platform'] == 'windows'
|
8
|
+
node.default['push_jobs']['package_url'] = "https://packages.chef.io/stable/windows/2008r2/push-jobs-client-2.1.1-1-x86.msi"
|
9
|
+
node.default['push_jobs']['package_checksum'] = "b8e76d54bb931949bcc94a6c764ccebda0e6957820b0c3fe62c96e6c3a184d9f"
|
10
|
+
|
11
|
+
conf_dir = "C:/chef"
|
12
|
+
tmp_dir = "C:/Windows/Temp"
|
13
|
+
else
|
14
|
+
conf_dir = "/etc/chef"
|
15
|
+
tmp_dir = "/tmp"
|
16
|
+
|
17
|
+
apt_update 'packages' do
|
18
|
+
action :update
|
19
|
+
only_if { node['platform_family'] == 'debian' }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
7
23
|
chef_ingredient 'chef' do
|
8
24
|
channel node['demo']['versions']['chef'].split('-')[0].to_sym
|
9
25
|
version node['demo']['versions']['chef'].split('-')[1]
|
10
26
|
action :install
|
11
27
|
end
|
12
28
|
|
13
|
-
directory
|
29
|
+
directory conf_dir
|
14
30
|
|
15
|
-
template '
|
31
|
+
template File.join(conf_dir, 'client.rb') do
|
16
32
|
source 'client.rb.erb'
|
17
33
|
variables({
|
18
34
|
:chef_server_url => node['demo']['chef_server_url'],
|
@@ -21,21 +37,21 @@ template '/etc/chef/client.rb' do
|
|
21
37
|
})
|
22
38
|
end
|
23
39
|
|
24
|
-
file '
|
25
|
-
content lazy { IO.read('
|
40
|
+
file File.join(conf_dir, 'client.pem') do
|
41
|
+
content lazy { IO.read(File.join(tmp_dir, 'private.pem')) }
|
26
42
|
end
|
27
43
|
|
28
44
|
###todo: centralize this into the wombat cookbook
|
29
|
-
directory '
|
45
|
+
directory File.join(conf_dir, 'trusted_certs')
|
30
46
|
|
31
47
|
%w(chef automate compliance).each do |f|
|
32
|
-
file "
|
33
|
-
content lazy { IO.read("
|
48
|
+
file File.join(conf_dir, "trusted_certs/#{node['demo']['domain_prefix']}#{f}_#{node['demo']['domain'].tr('.','_')}.crt") do
|
49
|
+
content lazy { IO.read(File.join(tmp_dir, "#{f}.crt")) }
|
34
50
|
end
|
35
51
|
end
|
36
52
|
###
|
37
53
|
node.set['push_jobs']['chef']['chef_server_url'] = node['demo']['chef_server_url']
|
38
54
|
node.set['push_jobs']['chef']['node_name'] = node['demo']['node-name']
|
39
|
-
|
40
|
-
|
55
|
+
node.default['push_jobs']['allow_unencrypted'] = true
|
56
|
+
|
41
57
|
include_recipe 'push-jobs'
|
@@ -1,18 +1,24 @@
|
|
1
1
|
# copy files into tmp for cookbook
|
2
2
|
|
3
|
-
|
3
|
+
if node['platform'] == 'windows'
|
4
|
+
tmp_dir = "C:/Windows/Temp"
|
5
|
+
else
|
6
|
+
tmp_dir = "/tmp"
|
7
|
+
end
|
8
|
+
|
9
|
+
cookbook_file File.join(tmp_dir, 'public.pub') do
|
4
10
|
content 'public.pub'
|
5
11
|
action :create
|
6
12
|
end
|
7
13
|
|
8
|
-
cookbook_file '
|
14
|
+
cookbook_file File.join(tmp_dir, 'private.pem') do
|
9
15
|
content 'private.pem'
|
10
16
|
action :create
|
11
17
|
end
|
12
18
|
|
13
19
|
%w(chef automate compliance).each do |f|
|
14
20
|
%w(crt key).each do |ext|
|
15
|
-
cookbook_file "
|
21
|
+
cookbook_file File.join(tmp_dir, "#{f}.crt") do
|
16
22
|
content "#{f}.#{ext}"
|
17
23
|
action :create
|
18
24
|
sensitive true
|