wombat-cli 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Stories in Ready](https://badge.waffle.io/chef-cft/wombat.png?label=ready&title=Ready)](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
|