wombat-cli 0.2.0
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 +7 -0
- data/.gitignore +19 -0
- data/DESIGN.md +40 -0
- data/Gemfile +3 -0
- data/README.md +132 -0
- data/Rakefile +52 -0
- data/Vagrantfile +121 -0
- data/bin/wombat +24 -0
- data/cookbooks/automate/.gitignore +16 -0
- data/cookbooks/automate/.kitchen.ec2.yml +27 -0
- data/cookbooks/automate/.kitchen.yml +25 -0
- data/cookbooks/automate/Berksfile +6 -0
- data/cookbooks/automate/README.md +4 -0
- data/cookbooks/automate/chefignore +102 -0
- data/cookbooks/automate/libraries/_helper.rb +52 -0
- data/cookbooks/automate/libraries/delivery_api.rb +204 -0
- data/cookbooks/automate/libraries/delivery_project.rb +31 -0
- data/cookbooks/automate/libraries/dsl.rb +5 -0
- data/cookbooks/automate/metadata.rb +13 -0
- data/cookbooks/automate/recipes/default.rb +111 -0
- data/cookbooks/automate/recipes/update-users.rb +48 -0
- data/cookbooks/automate/templates/delivery.erb +5 -0
- data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -0
- data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/automate.key +27 -0
- data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -0
- data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/chef.key +27 -0
- data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -0
- data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -0
- data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/private.pem +27 -0
- data/cookbooks/automate/test/fixtures/cookbooks/mock_data/files/public.pub +1 -0
- data/cookbooks/automate/test/fixtures/cookbooks/mock_data/metadata.rb +3 -0
- data/cookbooks/automate/test/fixtures/cookbooks/mock_data/recipes/default.rb +27 -0
- data/cookbooks/automate/test/integration/default/automate_spec.rb +55 -0
- data/cookbooks/build_node/.gitignore +16 -0
- data/cookbooks/build_node/.kitchen.ec2.yml +30 -0
- data/cookbooks/build_node/.kitchen.yml +23 -0
- data/cookbooks/build_node/Berksfile +8 -0
- data/cookbooks/build_node/README.md +4 -0
- data/cookbooks/build_node/chefignore +102 -0
- data/cookbooks/build_node/metadata.rb +15 -0
- data/cookbooks/build_node/recipes/default.rb +35 -0
- data/cookbooks/build_node/templates/client.erb +3 -0
- data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -0
- data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/automate.key +27 -0
- data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -0
- data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/chef.key +27 -0
- data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -0
- data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -0
- data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/private.pem +27 -0
- data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/files/public.pub +1 -0
- data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/metadata.rb +2 -0
- data/cookbooks/build_node/test/fixtures/cookbooks/mock_data/recipes/default.rb +18 -0
- data/cookbooks/build_node/test/integration/default/build-node_spec.rb +39 -0
- data/cookbooks/chef_server/.gitignore +16 -0
- data/cookbooks/chef_server/.kitchen.ec2.yml +26 -0
- data/cookbooks/chef_server/.kitchen.yml +25 -0
- data/cookbooks/chef_server/Berksfile +6 -0
- data/cookbooks/chef_server/README.md +4 -0
- data/cookbooks/chef_server/chefignore +102 -0
- data/cookbooks/chef_server/metadata.rb +13 -0
- data/cookbooks/chef_server/recipes/cheffish.rb +91 -0
- data/cookbooks/chef_server/recipes/default.rb +79 -0
- data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -0
- data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/automate.key +27 -0
- data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -0
- data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/chef.key +27 -0
- data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -0
- data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -0
- data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/private.pem +27 -0
- data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/files/public.pub +1 -0
- data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/metadata.rb +2 -0
- data/cookbooks/chef_server/test/fixtures/cookbooks/mock_data/recipes/default.rb +23 -0
- data/cookbooks/chef_server/test/integration/default/chef_server_spec.rb +47 -0
- data/cookbooks/compliance/.gitignore +16 -0
- data/cookbooks/compliance/.kitchen.ec2.yml +26 -0
- data/cookbooks/compliance/.kitchen.yml +24 -0
- data/cookbooks/compliance/Berksfile +7 -0
- data/cookbooks/compliance/README.md +4 -0
- data/cookbooks/compliance/chefignore +102 -0
- data/cookbooks/compliance/metadata.rb +12 -0
- data/cookbooks/compliance/recipes/default.rb +59 -0
- data/cookbooks/compliance/spec/spec_helper.rb +2 -0
- data/cookbooks/compliance/spec/unit/recipes/default_spec.rb +20 -0
- data/cookbooks/compliance/templates/default/chef-compliance.rb.erb +1 -0
- data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -0
- data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/automate.key +27 -0
- data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -0
- data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/chef.key +27 -0
- data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -0
- data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -0
- data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/private.pem +27 -0
- data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/files/public.pub +1 -0
- data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/metadata.rb +4 -0
- data/cookbooks/compliance/test/fixtures/cookbooks/mock_data/recipes/default.rb +21 -0
- data/cookbooks/compliance/test/integration/default/compliance.rb +27 -0
- data/cookbooks/infranodes/.gitignore +16 -0
- data/cookbooks/infranodes/.kitchen.ec2.yml +27 -0
- data/cookbooks/infranodes/.kitchen.yml +21 -0
- data/cookbooks/infranodes/Berksfile +6 -0
- data/cookbooks/infranodes/README.md +4 -0
- data/cookbooks/infranodes/attributes/default.rb +3 -0
- data/cookbooks/infranodes/chefignore +102 -0
- data/cookbooks/infranodes/metadata.rb +13 -0
- data/cookbooks/infranodes/recipes/default.rb +41 -0
- data/cookbooks/infranodes/spec/spec_helper.rb +2 -0
- data/cookbooks/infranodes/spec/unit/recipes/default_spec.rb +20 -0
- data/cookbooks/infranodes/templates/default/client.rb.erb +5 -0
- data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/automate.crt +26 -0
- data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/automate.key +27 -0
- data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/chef.crt +25 -0
- data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/chef.key +27 -0
- data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -0
- data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -0
- data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/private.pem +27 -0
- data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/files/public.pub +1 -0
- data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/metadata.rb +3 -0
- data/cookbooks/infranodes/test/fixtures/cookbooks/mock_data/recipes/default.rb +21 -0
- data/cookbooks/infranodes/test/integration/default/infranodes_spec.rb +20 -0
- data/cookbooks/infranodes/test/integration/helpers/serverspec/spec_helper.rb +8 -0
- data/cookbooks/wombat/.gitignore +16 -0
- data/cookbooks/wombat/.kitchen.yml +43 -0
- data/cookbooks/wombat/Berksfile +6 -0
- data/cookbooks/wombat/README.md +4 -0
- data/cookbooks/wombat/attributes/default.rb +71 -0
- data/cookbooks/wombat/attributes/packer.rb +18 -0
- data/cookbooks/wombat/chefignore +102 -0
- data/cookbooks/wombat/metadata.rb +11 -0
- data/cookbooks/wombat/recipes/authorized-keys.rb +10 -0
- data/cookbooks/wombat/recipes/default.rb +112 -0
- data/cookbooks/wombat/recipes/etc-hosts.rb +51 -0
- data/cookbooks/workstation/.gitignore +16 -0
- data/cookbooks/workstation/.kitchen.ec2.yml +29 -0
- data/cookbooks/workstation/.kitchen.yml +22 -0
- data/cookbooks/workstation/Berksfile +7 -0
- data/cookbooks/workstation/README.md +3 -0
- data/cookbooks/workstation/chefignore +102 -0
- data/cookbooks/workstation/files/atom.apm.list +7 -0
- data/cookbooks/workstation/files/atom.config.cson +3 -0
- data/cookbooks/workstation/files/cmder.xml +605 -0
- data/cookbooks/workstation/metadata.rb +14 -0
- data/cookbooks/workstation/recipes/browser.rb +45 -0
- data/cookbooks/workstation/recipes/certs-keys.rb +44 -0
- data/cookbooks/workstation/recipes/chef.rb +29 -0
- data/cookbooks/workstation/recipes/default.rb +16 -0
- data/cookbooks/workstation/recipes/dotnet.rb +17 -0
- data/cookbooks/workstation/recipes/editor.rb +19 -0
- data/cookbooks/workstation/recipes/profile.rb +42 -0
- data/cookbooks/workstation/recipes/terminal.rb +13 -0
- data/cookbooks/workstation/templates/default/bookmarks.html.erb +23 -0
- data/cookbooks/workstation/templates/default/data_collector.rb.erb +2 -0
- data/cookbooks/workstation/templates/default/ise_profile.ps1.erb +11 -0
- data/cookbooks/workstation/templates/default/knife.rb.erb +10 -0
- data/cookbooks/workstation/templates/default/master_preferences.json.erb +28 -0
- data/cookbooks/workstation/templates/default/ssh_config.erb +16 -0
- data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/chef-server.crt +26 -0
- data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/chef-server.key +27 -0
- data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/compliance.crt +26 -0
- data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/compliance.key +27 -0
- data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/delivery.crt +26 -0
- data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/delivery.key +27 -0
- data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/private.pem +27 -0
- data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/files/public.pub +1 -0
- data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/metadata.rb +2 -0
- data/cookbooks/workstation/test/fixtures/cookbooks/mock_data/recipes/default.rb +21 -0
- data/cookbooks/workstation/test/integration/default/workstation_spec.rb +37 -0
- data/keys/.gitkeep +0 -0
- data/lib/wombat/build.rb +195 -0
- data/lib/wombat/cli.rb +169 -0
- data/lib/wombat/common.rb +163 -0
- data/lib/wombat/delete.rb +28 -0
- data/lib/wombat/deploy.rb +105 -0
- data/lib/wombat/output.rb +45 -0
- data/lib/wombat/version.rb +3 -0
- data/lib/wombat.rb +8 -0
- data/logs/.gitkeep +0 -0
- data/packer/automate.json +108 -0
- data/packer/build-node.json +114 -0
- data/packer/chef-server.json +106 -0
- data/packer/compliance.json +106 -0
- data/packer/files/.gitkeep +0 -0
- data/packer/infranodes.json +108 -0
- data/packer/mock-data/.gitignore +16 -0
- data/packer/mock-data/.kitchen.yml +21 -0
- data/packer/mock-data/Berksfile +3 -0
- data/packer/mock-data/README.md +4 -0
- data/packer/mock-data/chefignore +102 -0
- data/packer/mock-data/metadata.rb +7 -0
- data/packer/mock-data/recipes/default.rb +69 -0
- data/packer/mock-data/spec/spec_helper.rb +2 -0
- data/packer/mock-data/spec/unit/recipes/default_spec.rb +20 -0
- data/packer/mock-data/test/integration/default/serverspec/default_spec.rb +9 -0
- data/packer/mock-data/test/integration/helpers/serverspec/spec_helper.rb +8 -0
- data/packer/workstation.json +97 -0
- data/templates/bootstrap-aws.erb +36 -0
- data/templates/cfn.json.erb +661 -0
- data/terraform/README.md +13 -0
- data/terraform/templates/terraform.tfvars.erb +12 -0
- data/terraform/wombat.tf +328 -0
- data/wombat-cli.gemspec +32 -0
- data/wombat.example.yml +52 -0
- metadata +331 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 6b93d81468007c7e0f2eacebc5b8d7a623f4ef2b
|
|
4
|
+
data.tar.gz: 22e16911954777a777d741f65e190a094479fb41
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: e4639618f0e1555f2d830840fd3b74b9c761759b50bbe23710fd37fd320e4367249137d4d2f1b40aee5c25c72591ac4426f10a4b89c2018d5678edd2118f5acd
|
|
7
|
+
data.tar.gz: 2bc93afb35e83966a233564c2b7b5b4704d629c7633bbe6d129ba7ca7bcfe4b00325bde9df3128417322e5a66e06cc165f18a291af5421af6553e2388c3638c2
|
data/.gitignore
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
delivery.license
|
|
2
|
+
chefautomate-validator.pem
|
|
3
|
+
delivery-admin.creds
|
|
4
|
+
delivery-user.pem
|
|
5
|
+
delivery.creds
|
|
6
|
+
.vagrant
|
|
7
|
+
terraform.tfstate*
|
|
8
|
+
terraform.tfvars
|
|
9
|
+
vendored-cookbooks
|
|
10
|
+
*.log
|
|
11
|
+
cloudformation/*.json
|
|
12
|
+
wombat.yml
|
|
13
|
+
keys/*
|
|
14
|
+
packer/keys/*
|
|
15
|
+
*.lock
|
|
16
|
+
infranodes-info.json
|
|
17
|
+
output
|
|
18
|
+
bootstrap-aws.txt
|
|
19
|
+
*.gem
|
data/DESIGN.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
## Anatomy of an Wombat
|
|
2
|
+
|
|
3
|
+
### tl;dr
|
|
4
|
+
|
|
5
|
+
Wombat is a collection of code that builds Chef configured golden
|
|
6
|
+
images from packer templates that are then re-consumed by a Cloud service template such
|
|
7
|
+
as CloudFormation or Google Deployment Manager.
|
|
8
|
+
|
|
9
|
+
### Design Goals
|
|
10
|
+
|
|
11
|
+
* coordination without coordination
|
|
12
|
+
* principle of least surprise
|
|
13
|
+
* dynamic templates over static files
|
|
14
|
+
|
|
15
|
+
### A Stroll Down Architecture Lane
|
|
16
|
+
|
|
17
|
+
The core of wombat is the binary `bin/wombat`.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
`wombat build -o BUILDER TEMPLATE`
|
|
21
|
+
|
|
22
|
+
1. Generate x509 certificates for the domain and ssh keys if there are none
|
|
23
|
+
2. Vendor cookbooks for template
|
|
24
|
+
3. Build Packer images for -o BUILDER (amazon-ebs|googlecompute) with included cookbooks
|
|
25
|
+
|
|
26
|
+
* If the TEMPLATE argument is not provided it will execute against all templates in `./packer/`
|
|
27
|
+
|
|
28
|
+
`wombat deploy STACK`
|
|
29
|
+
|
|
30
|
+
1. Create/update wombat.lock based on most recent Packer logs
|
|
31
|
+
2. Create cfn/gdm configuration from lock data fed through template
|
|
32
|
+
3. Deploy cfn/gdm stack
|
|
33
|
+
|
|
34
|
+
`wombat outputs STACK`
|
|
35
|
+
|
|
36
|
+
1. List outputs, specifically Workstation IPs
|
|
37
|
+
|
|
38
|
+
`wombat delete STACK`
|
|
39
|
+
|
|
40
|
+
1. Delete stack
|
data/Gemfile
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
[](https://waffle.io/chef-cft/wombat)
|
|
2
|
+
# `Project Wombat`
|
|
3
|
+
A combination of packer templates and terraform plan to configure a demo environment which includes:
|
|
4
|
+
|
|
5
|
+
* Chef Server
|
|
6
|
+
* Chef Automate
|
|
7
|
+
* Chef Compliance
|
|
8
|
+
* _N_ Automate Build Node(s)
|
|
9
|
+
* _N_ Infrastructure Nodes
|
|
10
|
+
* _N_ Windows Workstation
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
Usage
|
|
14
|
+
------------
|
|
15
|
+
|
|
16
|
+
##### Download your Automate license key
|
|
17
|
+
Automate requires a valid license to activate successfully. **If you do
|
|
18
|
+
not have a license key, you can request one from your CHEF account
|
|
19
|
+
representative.**
|
|
20
|
+
|
|
21
|
+
You will need to have the `delivery.license` file present inside `packer/files/`
|
|
22
|
+
directory.
|
|
23
|
+
|
|
24
|
+
##### Install and Configure ChefDK
|
|
25
|
+
|
|
26
|
+
Follow the instructions at https://docs.chef.io/install_dk.html to install and configure ChefDK as your default version of ruby.
|
|
27
|
+
|
|
28
|
+
##### Install Packer
|
|
29
|
+
|
|
30
|
+
Downloads are here: https://www.packer.io/downloads.html . Place in your path for direct execution.
|
|
31
|
+
|
|
32
|
+
##### Create a wombat.yml
|
|
33
|
+
|
|
34
|
+
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
|
+
|
|
64
|
+
*NOTE:* workstation-passwd must meet the minimum Microsoft [Complexity Requirements](https://technet.microsoft.com/en-us/library/hh994562(v=ws.11).aspx)
|
|
65
|
+
|
|
66
|
+
*NOTE:* The `googlecompute` and `azure` builders exist but not all images will build nor is there deployment support for either at this time.
|
|
67
|
+
|
|
68
|
+
##### Build images with Packer
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
# build one or more templates
|
|
72
|
+
$ bin/wombat build [-o BUILDER] TEMPLATE [TEMPLATE2]
|
|
73
|
+
|
|
74
|
+
# build all templates (sequentially)
|
|
75
|
+
$ bin/wombat build [-o BUILDER]
|
|
76
|
+
|
|
77
|
+
# build all images (parallel)
|
|
78
|
+
$ bin/wombat build [-o BUILDER] --parallel
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
*NOTE:* If the builder is not provided it defaults to `amazon-ebs`
|
|
82
|
+
|
|
83
|
+
##### Deploy CloudFormation template
|
|
84
|
+
|
|
85
|
+
###### via AWS CloudFormation Web UI
|
|
86
|
+
|
|
87
|
+
Upload the created template from the `cloudformation` directory.
|
|
88
|
+
|
|
89
|
+
###### via CLI
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
# Deploy CloudFormation template
|
|
93
|
+
$ bin/wombat deploy --cloud aws STACK
|
|
94
|
+
==> Updating wombat.lock
|
|
95
|
+
==> Generate CloudFormation JSON: STACK.json
|
|
96
|
+
==> Creating CloudFormation stack
|
|
97
|
+
Created: arn:aws:cloudformation:us-east-1:862552916454:stack/STACK/2160c580-713e-11e6-b392-50a686e4bb82
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
*NOTE:* If the cloud is not provided it defaults to `aws`
|
|
101
|
+
|
|
102
|
+
##### Login to Windows Workstation
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
# Get Windows Workstation(s) IP(s)
|
|
106
|
+
$ bin/wombat outputs STACK
|
|
107
|
+
WindowsWorkstation (i-xxxxxxxx) => XX.XXX.XX.XXX
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
From the AWS CloudFormation UI, select the Outputs tab for the desired stack.
|
|
111
|
+
Use an RDP compatible client to login to the workstation with the embedded credentials.
|
|
112
|
+
|
|
113
|
+
LICENSE AND AUTHORS
|
|
114
|
+
===================
|
|
115
|
+
* [Andre Elizondo](https://github.com/andrewelizondo)
|
|
116
|
+
* [Seth Thomas](https://github.com/cheeseplus)
|
|
117
|
+
|
|
118
|
+
```text
|
|
119
|
+
Copyright:: 2016 Chef Software, Inc
|
|
120
|
+
|
|
121
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
122
|
+
you may not use this file except in compliance with the License.
|
|
123
|
+
You may obtain a copy of the License at
|
|
124
|
+
|
|
125
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
126
|
+
|
|
127
|
+
Unless required by applicable law or agreed to in writing, software
|
|
128
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
129
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
130
|
+
See the License for the specific language governing permissions and
|
|
131
|
+
limitations under the License.
|
|
132
|
+
```
|
data/Rakefile
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require 'erb'
|
|
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
|
data/Vagrantfile
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# -*- mode: ruby -*-
|
|
2
|
+
# vi: set ft=ruby :
|
|
3
|
+
|
|
4
|
+
# All Vagrant configuration is done below. The "2" in Vagrant.configure
|
|
5
|
+
# configures the configuration version (we support older styles for
|
|
6
|
+
# backwards compatibility). Please don't change it unless you know what
|
|
7
|
+
# you're doing.
|
|
8
|
+
Vagrant.configure(2) do |config|
|
|
9
|
+
|
|
10
|
+
config.vm.box = "bento/ubuntu-14.04"
|
|
11
|
+
|
|
12
|
+
# cache rules everything around me
|
|
13
|
+
if Vagrant.has_plugin?("vagrant-cachier")
|
|
14
|
+
config.cache.scope = :box
|
|
15
|
+
config.cache.auto_detect = true
|
|
16
|
+
config.cache.enable :apt
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Provision a Chef server with push jobs installed
|
|
20
|
+
config.vm.define "chef-server" do |cs|
|
|
21
|
+
|
|
22
|
+
cs.vm.hostname = "chef"
|
|
23
|
+
cs.vm.network "private_network", ip: "172.31.54.10"
|
|
24
|
+
|
|
25
|
+
cs.vm.provider "virtualbox" do |v|
|
|
26
|
+
v.memory = 2048
|
|
27
|
+
v.cpus = 2
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
cs.vm.provision "chef_solo" do |chef|
|
|
31
|
+
chef.cookbooks_path = "vendored-cookbooks/chef-server"
|
|
32
|
+
chef.add_recipe "mock-data"
|
|
33
|
+
chef.add_recipe "chef-server"
|
|
34
|
+
chef.json = {
|
|
35
|
+
"demo" => {
|
|
36
|
+
"admin-user" => "vagrant"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
config.vm.define "automate" do |d|
|
|
44
|
+
|
|
45
|
+
d.vm.network "private_network", ip: "172.31.54.11"
|
|
46
|
+
d.vm.hostname = "automate"
|
|
47
|
+
d.vm.provider "virtualbox" do |v|
|
|
48
|
+
v.memory = 2048
|
|
49
|
+
v.cpus = 2
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
d.vm.provision "chef_solo" do |chef|
|
|
53
|
+
chef.cookbooks_path = "vendored-cookbooks/automate"
|
|
54
|
+
chef.add_recipe "mock-data"
|
|
55
|
+
chef.add_recipe "automate"
|
|
56
|
+
chef.json = {
|
|
57
|
+
"demo" => {
|
|
58
|
+
"admin-user" => "vagrant"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
config.vm.define "compliance" do |cc|
|
|
66
|
+
cc.vm.hostname = "compliance"
|
|
67
|
+
cc.vm.network "private_network", ip: "172.31.54.12"
|
|
68
|
+
|
|
69
|
+
cc.vm.provider "virtualbox" do |v|
|
|
70
|
+
v.memory = 1024
|
|
71
|
+
v.cpus = 1
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
cc.vm.provision "chef_solo" do |chef|
|
|
75
|
+
chef.cookbooks_path = "vendored-cookbooks/compliance"
|
|
76
|
+
chef.add_recipe "mock-data"
|
|
77
|
+
chef.add_recipe "compliance"
|
|
78
|
+
chef.json = {
|
|
79
|
+
"demo" => {
|
|
80
|
+
"admin-user" => "vagrant"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
config.vm.define "build-node-1" do |bn|
|
|
88
|
+
bn.vm.network "private_network", ip: "172.31.54.101"
|
|
89
|
+
bn.vm.hostname = "build-node-1"
|
|
90
|
+
|
|
91
|
+
bn.vm.provision "chef_solo" do |chef|
|
|
92
|
+
chef.cookbooks_path = "vendored-cookbooks/build-node"
|
|
93
|
+
chef.add_recipe "mock-data"
|
|
94
|
+
chef.add_recipe "build-node"
|
|
95
|
+
chef.json = {
|
|
96
|
+
"demo" => {
|
|
97
|
+
"admin-user" => "vagrant"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
config.vm.define "workstation", primary: true do |wk|
|
|
104
|
+
wk.vm.network "private_network", ip: "172.31.54.99"
|
|
105
|
+
wk.vm.hostname = "workstation"
|
|
106
|
+
|
|
107
|
+
wk.vm.box = "mwrock/Windows2012R2"
|
|
108
|
+
|
|
109
|
+
wk.vm.provision "chef_solo" do |chef|
|
|
110
|
+
chef.cookbooks_path = "vendored-cookbooks/workstation"
|
|
111
|
+
chef.add_recipe "mock-data"
|
|
112
|
+
chef.add_recipe "workstation"
|
|
113
|
+
chef.json = {
|
|
114
|
+
"demo" => {
|
|
115
|
+
"admin-user" => "vagrant"
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end
|
data/bin/wombat
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# -*- encoding: utf-8 -*-
|
|
3
|
+
def shut_down
|
|
4
|
+
puts "\nShutting down gracefully..."
|
|
5
|
+
sleep 1
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
Signal.trap("INT") {
|
|
9
|
+
shut_down
|
|
10
|
+
exit
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
$stdout.sync = true
|
|
14
|
+
$stderr.sync = true
|
|
15
|
+
|
|
16
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), %w[.. lib])
|
|
17
|
+
require "wombat/cli"
|
|
18
|
+
|
|
19
|
+
begin
|
|
20
|
+
Runner.new(Options.parse(ARGV)).start
|
|
21
|
+
rescue => ex
|
|
22
|
+
$stderr.puts ">>> #{ex.message}"
|
|
23
|
+
exit(($? && $?.exitstatus) || 99)
|
|
24
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
driver:
|
|
3
|
+
name: ec2
|
|
4
|
+
aws_ssh_key_id: <%= ENV["EC2_SSH_KEY_NAME"] %>
|
|
5
|
+
region: us-east-1
|
|
6
|
+
availability_zone: e
|
|
7
|
+
instance_type: m3.large
|
|
8
|
+
|
|
9
|
+
provisioner:
|
|
10
|
+
name: chef_zero
|
|
11
|
+
|
|
12
|
+
verifier:
|
|
13
|
+
name: inspec
|
|
14
|
+
|
|
15
|
+
platforms:
|
|
16
|
+
- name: ubuntu-1404
|
|
17
|
+
driver:
|
|
18
|
+
image_id: ami-8e0b9499
|
|
19
|
+
transport:
|
|
20
|
+
ssh_key: <%= ENV["EC2_SSH_KEY_PATH"] %>
|
|
21
|
+
|
|
22
|
+
suites:
|
|
23
|
+
- name: default
|
|
24
|
+
run_list:
|
|
25
|
+
- recipe[apt]
|
|
26
|
+
- recipe[mock_data]
|
|
27
|
+
- recipe[automate]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
driver:
|
|
3
|
+
name: vagrant
|
|
4
|
+
customize:
|
|
5
|
+
memory: 2048
|
|
6
|
+
cpus: 2
|
|
7
|
+
|
|
8
|
+
provisioner:
|
|
9
|
+
name: chef_zero
|
|
10
|
+
|
|
11
|
+
verifier:
|
|
12
|
+
name: inspec
|
|
13
|
+
|
|
14
|
+
platforms:
|
|
15
|
+
- name: ubuntu-14.04
|
|
16
|
+
|
|
17
|
+
suites:
|
|
18
|
+
- name: default
|
|
19
|
+
run_list:
|
|
20
|
+
- recipe[apt::default]
|
|
21
|
+
- recipe[mock_data::default]
|
|
22
|
+
- recipe[automate::default]
|
|
23
|
+
attributes:
|
|
24
|
+
demo:
|
|
25
|
+
admin-user: 'vagrant'
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Put files/directories that should be ignored in this file when uploading
|
|
2
|
+
# to a chef-server or supermarket.
|
|
3
|
+
# Lines that start with '# ' are comments.
|
|
4
|
+
|
|
5
|
+
# OS generated files #
|
|
6
|
+
######################
|
|
7
|
+
.DS_Store
|
|
8
|
+
Icon?
|
|
9
|
+
nohup.out
|
|
10
|
+
ehthumbs.db
|
|
11
|
+
Thumbs.db
|
|
12
|
+
|
|
13
|
+
# SASS #
|
|
14
|
+
########
|
|
15
|
+
.sass-cache
|
|
16
|
+
|
|
17
|
+
# EDITORS #
|
|
18
|
+
###########
|
|
19
|
+
\#*
|
|
20
|
+
.#*
|
|
21
|
+
*~
|
|
22
|
+
*.sw[a-z]
|
|
23
|
+
*.bak
|
|
24
|
+
REVISION
|
|
25
|
+
TAGS*
|
|
26
|
+
tmtags
|
|
27
|
+
*_flymake.*
|
|
28
|
+
*_flymake
|
|
29
|
+
*.tmproj
|
|
30
|
+
.project
|
|
31
|
+
.settings
|
|
32
|
+
mkmf.log
|
|
33
|
+
|
|
34
|
+
## COMPILED ##
|
|
35
|
+
##############
|
|
36
|
+
a.out
|
|
37
|
+
*.o
|
|
38
|
+
*.pyc
|
|
39
|
+
*.so
|
|
40
|
+
*.com
|
|
41
|
+
*.class
|
|
42
|
+
*.dll
|
|
43
|
+
*.exe
|
|
44
|
+
*/rdoc/
|
|
45
|
+
|
|
46
|
+
# Testing #
|
|
47
|
+
###########
|
|
48
|
+
.watchr
|
|
49
|
+
.rspec
|
|
50
|
+
spec/*
|
|
51
|
+
spec/fixtures/*
|
|
52
|
+
test/*
|
|
53
|
+
features/*
|
|
54
|
+
examples/*
|
|
55
|
+
Guardfile
|
|
56
|
+
Procfile
|
|
57
|
+
.kitchen*
|
|
58
|
+
.rubocop.yml
|
|
59
|
+
spec/*
|
|
60
|
+
Rakefile
|
|
61
|
+
.travis.yml
|
|
62
|
+
.foodcritic
|
|
63
|
+
.codeclimate.yml
|
|
64
|
+
|
|
65
|
+
# SCM #
|
|
66
|
+
#######
|
|
67
|
+
.git
|
|
68
|
+
*/.git
|
|
69
|
+
.gitignore
|
|
70
|
+
.gitmodules
|
|
71
|
+
.gitconfig
|
|
72
|
+
.gitattributes
|
|
73
|
+
.svn
|
|
74
|
+
*/.bzr/*
|
|
75
|
+
*/.hg/*
|
|
76
|
+
*/.svn/*
|
|
77
|
+
|
|
78
|
+
# Berkshelf #
|
|
79
|
+
#############
|
|
80
|
+
Berksfile
|
|
81
|
+
Berksfile.lock
|
|
82
|
+
cookbooks/*
|
|
83
|
+
tmp
|
|
84
|
+
|
|
85
|
+
# Cookbooks #
|
|
86
|
+
#############
|
|
87
|
+
CONTRIBUTING*
|
|
88
|
+
CHANGELOG*
|
|
89
|
+
TESTING*
|
|
90
|
+
MAINTAINERS.toml
|
|
91
|
+
|
|
92
|
+
# Strainer #
|
|
93
|
+
############
|
|
94
|
+
Colanderfile
|
|
95
|
+
Strainerfile
|
|
96
|
+
.colander
|
|
97
|
+
.strainer
|
|
98
|
+
|
|
99
|
+
# Vagrant #
|
|
100
|
+
###########
|
|
101
|
+
.vagrant
|
|
102
|
+
Vagrantfile
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Cookbook Name:: automate
|
|
3
|
+
# Recipe:: _helper
|
|
4
|
+
#
|
|
5
|
+
# Author:: Salim Afiune (<afiune@chef.io>)
|
|
6
|
+
#
|
|
7
|
+
# Copyright 2015, Chef Software, Inc.
|
|
8
|
+
#
|
|
9
|
+
# All rights reserved - Do Not Redistribute
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
module Delivery
|
|
13
|
+
|
|
14
|
+
module Helper
|
|
15
|
+
# Delivery API helper
|
|
16
|
+
#
|
|
17
|
+
# This little helper will let us just type:
|
|
18
|
+
# e.g.
|
|
19
|
+
# delivery_api.get(...)
|
|
20
|
+
# delivery_api.put(...)
|
|
21
|
+
# delivery_api.post(...)
|
|
22
|
+
# delivery_api.delete(...)
|
|
23
|
+
#
|
|
24
|
+
def delivery_api
|
|
25
|
+
@api ||= begin
|
|
26
|
+
Delivery::API.new(delivery_fqdn, 'admin', delivery_admin_password, delivery_enterprise)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Get delivery enterprise
|
|
31
|
+
|
|
32
|
+
def delivery_fqdn
|
|
33
|
+
"#{node['demo']['domain_prefix']}automate.#{node['demo']['domain']}"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def delivery_organization
|
|
37
|
+
node['demo']['org']
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def delivery_enterprise
|
|
41
|
+
node['demo']['enterprise']
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def delivery_admin_password
|
|
45
|
+
node['demo']['users']['admin']['password']
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def return_key(key)
|
|
49
|
+
key =~ /\// ? File.read(key) : key
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|