mixlib-install 3.4.0 → 3.5.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 +4 -4
- data/.travis.yml +2 -0
- data/CHANGELOG.md +9 -3
- data/README.md +27 -1
- data/VERSION +1 -1
- data/acceptance/.suites/ubuntu_install_checksum/.acceptance/acceptance-cookbook/.gitignore +8 -0
- data/acceptance/{windows-nano → .suites/ubuntu_install_checksum}/.acceptance/acceptance-cookbook/metadata.rb +0 -0
- data/acceptance/{windows-server-2012r2 → .suites/ubuntu_install_checksum}/.acceptance/acceptance-cookbook/recipes/destroy.rb +0 -0
- data/acceptance/.suites/ubuntu_install_checksum/.acceptance/acceptance-cookbook/recipes/provision.rb +24 -0
- data/acceptance/.suites/ubuntu_install_checksum/.acceptance/acceptance-cookbook/recipes/verify.rb +11 -0
- data/acceptance/.suites/ubuntu_install_checksum/inspec/verify.rb +78 -0
- data/acceptance/.suites/ubuntu_install_checksum/terraform/application.tf +95 -0
- data/acceptance/{windows-nano → .suites/ubuntu_install_checksum}/terraform/aws.tf +0 -0
- data/acceptance/.suites/ubuntu_install_checksum/terraform/variables.tf +27 -0
- data/acceptance/{windows-nano → .suites/windows-nano}/.acceptance/acceptance-cookbook/.gitignore +0 -0
- data/acceptance/{windows-nano → .suites/windows-nano}/.acceptance/acceptance-cookbook/libraries/chef_extentions.rb +0 -0
- data/acceptance/{windows-server-2012r2 → .suites/windows-nano}/.acceptance/acceptance-cookbook/metadata.rb +0 -0
- data/acceptance/{windows-nano → .suites/windows-nano}/.acceptance/acceptance-cookbook/recipes/destroy.rb +0 -0
- data/acceptance/{windows-nano → .suites/windows-nano}/.acceptance/acceptance-cookbook/recipes/provision.rb +0 -0
- data/acceptance/{windows-nano → .suites/windows-nano}/.acceptance/acceptance-cookbook/recipes/verify.rb +0 -0
- data/acceptance/{windows-nano → .suites/windows-nano}/inspec/verify.rb +0 -0
- data/acceptance/{windows-nano → .suites/windows-nano}/terraform/application.tf +0 -0
- data/acceptance/{windows-server-2012r2 → .suites/windows-nano}/terraform/aws.tf +0 -0
- data/acceptance/{windows-nano → .suites/windows-nano}/terraform/variables.tf +0 -0
- data/acceptance/centos_install_checksum/.acceptance/acceptance-cookbook/.gitignore +8 -0
- data/acceptance/centos_install_checksum/.acceptance/acceptance-cookbook/metadata.rb +2 -0
- data/acceptance/centos_install_checksum/.acceptance/acceptance-cookbook/recipes/destroy.rb +3 -0
- data/acceptance/centos_install_checksum/.acceptance/acceptance-cookbook/recipes/provision.rb +24 -0
- data/acceptance/centos_install_checksum/.acceptance/acceptance-cookbook/recipes/verify.rb +11 -0
- data/acceptance/centos_install_checksum/inspec/verify.rb +78 -0
- data/acceptance/centos_install_checksum/terraform/application.tf +95 -0
- data/acceptance/centos_install_checksum/terraform/aws.tf +8 -0
- data/acceptance/centos_install_checksum/terraform/variables.tf +27 -0
- data/acceptance/{windows-server-2012r2 → windows-server-2012r2-checksum}/.acceptance/acceptance-cookbook/.gitignore +0 -0
- data/acceptance/windows-server-2012r2-checksum/.acceptance/acceptance-cookbook/metadata.rb +2 -0
- data/acceptance/windows-server-2012r2-checksum/.acceptance/acceptance-cookbook/recipes/destroy.rb +3 -0
- data/acceptance/windows-server-2012r2-checksum/.acceptance/acceptance-cookbook/recipes/provision.rb +22 -0
- data/acceptance/{windows-server-2012r2 → windows-server-2012r2-checksum}/.acceptance/acceptance-cookbook/recipes/verify.rb +0 -0
- data/acceptance/windows-server-2012r2-checksum/inspec/verify.rb +21 -0
- data/acceptance/windows-server-2012r2-checksum/terraform/application.tf +94 -0
- data/acceptance/windows-server-2012r2-checksum/terraform/aws.tf +8 -0
- data/acceptance/{windows-server-2012r2 → windows-server-2012r2-checksum}/terraform/variables.tf +0 -0
- data/acceptance/windows-server-2012r2-ps1/.acceptance/acceptance-cookbook/.gitignore +2 -0
- data/acceptance/windows-server-2012r2-ps1/.acceptance/acceptance-cookbook/metadata.rb +2 -0
- data/acceptance/windows-server-2012r2-ps1/.acceptance/acceptance-cookbook/recipes/destroy.rb +3 -0
- data/acceptance/{windows-server-2012r2 → windows-server-2012r2-ps1}/.acceptance/acceptance-cookbook/recipes/provision.rb +0 -0
- data/acceptance/windows-server-2012r2-ps1/.acceptance/acceptance-cookbook/recipes/verify.rb +14 -0
- data/acceptance/{windows-server-2012r2 → windows-server-2012r2-ps1}/inspec/verify.rb +0 -0
- data/acceptance/{windows-server-2012r2 → windows-server-2012r2-ps1}/terraform/application.tf +0 -0
- data/acceptance/windows-server-2012r2-ps1/terraform/aws.tf +8 -0
- data/acceptance/windows-server-2012r2-ps1/terraform/variables.tf +16 -0
- data/lib/mixlib/install/generator/bourne/scripts/fetch_metadata.sh.erb +2 -1
- data/lib/mixlib/install/generator/bourne/scripts/fetch_package.sh +41 -7
- data/lib/mixlib/install/generator/bourne/scripts/script_cli_parameters.sh +6 -2
- data/lib/mixlib/install/generator/powershell/scripts/install_project.ps1 +47 -26
- data/lib/mixlib/install/version.rb +1 -1
- metadata +49 -21
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8cbca7cb9a853574779432ba1d0e08f2444bf925
|
|
4
|
+
data.tar.gz: 01151257065ddfdd27a4665198c35781727bcc01
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a0f8a54590f1f33f8e45ffc4d73925e435cf1c229ce6778960251811e3c3ca60465693e7bb08c70a1f76006ca8e09262a78a642530a985202ba43b83cb0d682d
|
|
7
|
+
data.tar.gz: 0e2b10d4207acf6ee5fcc551f1011d4cc927a9dc1ff511c1437f8bbf4b9209866353b6c994ba87131e88befe2ae8f6e227fb7d249784cc889daafdf645abf7e1
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
# Mixlib::Install Changes
|
|
2
2
|
|
|
3
|
-
<!-- latest_release
|
|
3
|
+
<!-- latest_release unreleased -->
|
|
4
|
+
## Unreleased
|
|
5
|
+
|
|
6
|
+
#### Merged Pull Requests
|
|
7
|
+
- v3.5.0 [#239](https://github.com/chef/mixlib-install/pull/239) ([wrightp](https://github.com/wrightp))
|
|
8
|
+
- download url override and checksum updates [#237](https://github.com/chef/mixlib-install/pull/237) ([wrightp](https://github.com/wrightp))
|
|
9
|
+
<!-- latest_release -->
|
|
10
|
+
|
|
4
11
|
## [v3.4.0](https://github.com/chef/mixlib-install/tree/v3.4.0) (2017-08-22)
|
|
5
12
|
|
|
6
13
|
#### Merged Pull Requests
|
|
7
14
|
- Add install_strategy option to bootstrap install scripts [#232](https://github.com/chef/mixlib-install/pull/232) ([wrightp](https://github.com/wrightp))
|
|
8
|
-
<!-- latest_release -->
|
|
9
15
|
|
|
10
16
|
## [v3.3.4](https://github.com/chef/mixlib-install/tree/v3.3.4) (2017-08-10)
|
|
11
17
|
|
|
@@ -190,4 +196,4 @@
|
|
|
190
196
|
|
|
191
197
|
## [1.0.0]
|
|
192
198
|
- Ability to query product artifacts from multiple channels
|
|
193
|
-
- Ability to generate installation scripts for `sh` and `ps1`
|
|
199
|
+
- Ability to generate installation scripts for `sh` and `ps1`
|
data/README.md
CHANGED
|
@@ -175,7 +175,7 @@ options = {
|
|
|
175
175
|
Collecting software dependencies and license content for ArtifactInfo instances
|
|
176
176
|
requires additional requests to the repository server. By default, collection is disabled.
|
|
177
177
|
To return data for instance methods `software_dependencies` and `license_content`, the `include_metadata` option must be enabled.
|
|
178
|
-
```
|
|
178
|
+
```ruby
|
|
179
179
|
options = {
|
|
180
180
|
channel: :current,
|
|
181
181
|
product_name: 'chef',
|
|
@@ -197,6 +197,32 @@ artifact.software_dependencies.class
|
|
|
197
197
|
|
|
198
198
|
```
|
|
199
199
|
|
|
200
|
+
|
|
201
|
+
### Install Scripts
|
|
202
|
+
mixlib-install generates the bootstrap installation scripts known as install.sh and install.ps1. The associated install script will be returned when calling `#install_command` on the Mixlib::Install instance.
|
|
203
|
+
|
|
204
|
+
Mixlib::Install instantiation option `install_command_options` can accept variables (bourne) or parameters (powershell) to modify the behavior of the install scripts.
|
|
205
|
+
|
|
206
|
+
Some of the more common options include:
|
|
207
|
+
|
|
208
|
+
`download_url_override`: Use the provided URL instead of fetching the metadata URL from Chef Software Inc's software distribution systems.
|
|
209
|
+
`checksum`: SHA256 value associated to the directed file for the download_url_override option. This setting is optional. Not setting this will download the file even if a cached file is detected.
|
|
210
|
+
`install_strategy`: Set to "once" to have the script exit if the product being installed is detected.
|
|
211
|
+
|
|
212
|
+
```ruby
|
|
213
|
+
options = {
|
|
214
|
+
product_name: 'chef',
|
|
215
|
+
install_command_options: {
|
|
216
|
+
download_url_override: "https://file/path",
|
|
217
|
+
checksum: "OPTIONAL",
|
|
218
|
+
install_strategy: "once",
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
Mixlib::Install.new(options).install_command
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
|
|
200
226
|
## Development
|
|
201
227
|
VCR is a tool that helps cache and replay http responses. When these responses change or when you add more tests you might need to update cached responses. Check out [spec_helper.rb](https://github.com/chef/mixlib-install/blob/master/spec/spec_helper.rb) for instructions on how to do this.
|
|
202
228
|
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.5.0
|
|
File without changes
|
|
File without changes
|
data/acceptance/.suites/ubuntu_install_checksum/.acceptance/acceptance-cookbook/recipes/provision.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generate install script then write to disk for terraform to copy to the instance for execution
|
|
2
|
+
execute "bundle exec ruby -e \"require 'mixlib/install'; puts Mixlib::Install.new(product_name: 'chef', product_version: :latest, channel: :stable, install_command_options: {download_url_override: 'https://packages.chef.io/files/stable/chef/13.2.20/ubuntu/14.04/chef_13.2.20-1_amd64.deb', cmdline_dl_dir: '/tmp/checksum'}).install_command\" > ../.acceptance_data/ubuntu_install_url.sh" do
|
|
3
|
+
cwd node['chef-acceptance']['suite-dir']
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
execute "bundle exec ruby -e \"require 'mixlib/install'; puts Mixlib::Install.new(product_name: 'chef', product_version: :latest, channel: :stable, install_command_options: {download_url_override: 'https://packages.chef.io/files/stable/chef/13.2.20/ubuntu/14.04/chef_13.2.20-1_amd64.deb', checksum: '88cd274a694bfe23d255937794744d50af972097958fa681a544479e2bfb7f6b', cmdline_dl_dir: '/tmp/checksum'}).install_command\" > ../.acceptance_data/ubuntu_install_checksum.sh" do
|
|
7
|
+
cwd node['chef-acceptance']['suite-dir']
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
execute "bundle exec ruby -e \"require 'mixlib/install'; puts Mixlib::Install.new(product_name: 'chef', product_version: :latest, channel: :stable, install_command_options: {cmdline_dl_dir: '/tmp/metadata'}).install_command\" > ../.acceptance_data/ubuntu_install_metadata.sh" do
|
|
11
|
+
cwd node['chef-acceptance']['suite-dir']
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
execute "bundle exec ruby -e \"require 'mixlib/install'; puts Mixlib::Install.new(product_name: 'chef', product_version: :latest, channel: :stable, install_command_options: {download_url_override: 'https://packages.chef.io/files/stable/chef/13.2.20/ubuntu/14.04/chef_13.2.20-1_amd64.deb', checksum: 'FOOOOOOOOOOOOOO', cmdline_dl_dir: '/tmp/bad'}).install_command\" > ../.acceptance_data/ubuntu_install_bad.sh" do
|
|
15
|
+
cwd node['chef-acceptance']['suite-dir']
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
execute "terraform plan" do
|
|
19
|
+
cwd "#{node['chef-acceptance']['suite-dir']}/terraform"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
execute "terraform apply" do
|
|
23
|
+
cwd "#{node['chef-acceptance']['suite-dir']}/terraform"
|
|
24
|
+
end
|
data/acceptance/.suites/ubuntu_install_checksum/.acceptance/acceptance-cookbook/recipes/verify.rb
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
ruby_block "get ip" do
|
|
2
|
+
block do
|
|
3
|
+
tf_state = JSON.parse(File.read("#{node['chef-acceptance']['suite-dir']}/terraform/terraform.tfstate"))
|
|
4
|
+
node.default["ip"] = tf_state["modules"].first["resources"]["aws_instance.mixlib_install_sh"]["primary"]["attributes"]["public_ip"]
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
execute "run inspec" do
|
|
9
|
+
command lazy { "inspec exec verify.rb -t ssh://ubuntu@#{node['ip']} -i ~/.ssh/es-infrastructure.pem" }
|
|
10
|
+
cwd "#{node['chef-acceptance']['suite-dir']}/inspec"
|
|
11
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Uncomment when re-running for local development
|
|
2
|
+
describe command("sudo rm -rf /tmp/metadata /tmp/checksum /tmp/bad; sudo dpkg -r chef") do
|
|
3
|
+
its("exit_status") { should eq 0 }
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
#
|
|
7
|
+
# DOWNLOAD URL TESTS
|
|
8
|
+
#
|
|
9
|
+
# No checksum provided
|
|
10
|
+
describe command("sudo /tmp/install.sh") do
|
|
11
|
+
its("stdout") { should match /Download URL override specified/ }
|
|
12
|
+
its("stdout") { should match /tmp\/checksum\/chef.* not found/ }
|
|
13
|
+
its("stdout") { should match /Thank you/ }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Running same script again
|
|
17
|
+
describe command("sudo /tmp/install.sh") do
|
|
18
|
+
its("stdout") { should match /Download URL override specified/ }
|
|
19
|
+
its("stdout") { should match /Verifying local file/ }
|
|
20
|
+
its("stdout") { should match /Checksum not specified/ }
|
|
21
|
+
its("stdout") { should match /Thank you/ }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Now with a valid checksum
|
|
25
|
+
describe command("sudo /tmp/install_checksum.sh") do
|
|
26
|
+
its("stdout") { should match /Download URL override specified/ }
|
|
27
|
+
its("stdout") { should match /Verifying local file/ }
|
|
28
|
+
its("stdout") { should match /Checksum match/ }
|
|
29
|
+
its("stdout") { should match /Thank you/ }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Corrupt the file we just downloaded
|
|
33
|
+
describe command("sudo chown ubuntu /tmp/checksum; sudo chown ubuntu /tmp/checksum/*; for i in /tmp/checksum/*; do echo 'oops'>>$i; done;") do
|
|
34
|
+
its("exit_status") { should eq 0 }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Run with checksum and it should download and re-verify the checksum
|
|
38
|
+
describe command("sudo /tmp/install_checksum.sh") do
|
|
39
|
+
its("stdout") { should match /Download URL override specified/ }
|
|
40
|
+
its("stdout") { should match /Verifying local file/ }
|
|
41
|
+
its("stdout") { should match /Checksum mismatch/ }
|
|
42
|
+
its("stdout") { should match /Thank you/ }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# clean up
|
|
46
|
+
describe command("sudo dpkg -r chef") do
|
|
47
|
+
its("stdout") { should match /Removing chef/ }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
#
|
|
51
|
+
# METADATA URL TESTS
|
|
52
|
+
#
|
|
53
|
+
# Default behavior when specifying a download location (otherwise caching is unavailable)
|
|
54
|
+
describe command("sudo /tmp/install_metadata.sh") do
|
|
55
|
+
its("stdout") { should_not match /tmp\/metadata\/chef.* exists/ }
|
|
56
|
+
its("stdout") { should match /Thank you/ }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Running same script again
|
|
60
|
+
describe command("sudo /tmp/install_metadata.sh") do
|
|
61
|
+
its("stdout") { should match /tmp\/metadata\/chef.* exists/ }
|
|
62
|
+
its("stdout") { should match /Thank you/ }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# clean up
|
|
66
|
+
describe command("sudo dpkg -r chef") do
|
|
67
|
+
its("stdout") { should match /Removing chef/ }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
#
|
|
71
|
+
# DOWNLOAD URL BAD CHECKSUM TESTS
|
|
72
|
+
#
|
|
73
|
+
describe command("sudo /tmp/install_bad.sh") do
|
|
74
|
+
its("stdout") { should match /Download URL override specified/ }
|
|
75
|
+
its("stdout") { should match /tmp\/bad\/chef.* not found/ }
|
|
76
|
+
its("stdout") { should match /Package checksum mismatch/ }
|
|
77
|
+
its("exit_status") { should eq 1 }
|
|
78
|
+
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
data "aws_ami" "ubuntu_14_ami" {
|
|
2
|
+
most_recent = true
|
|
3
|
+
|
|
4
|
+
filter {
|
|
5
|
+
name = "owner-id"
|
|
6
|
+
values = ["099720109477"]
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
filter {
|
|
10
|
+
name = "name"
|
|
11
|
+
values = ["ubuntu/images/*/ubuntu-*-14.04-*-server-*"]
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
filter {
|
|
15
|
+
name = "architecture"
|
|
16
|
+
values = ["x86_64"]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
filter {
|
|
20
|
+
name = "virtualization-type"
|
|
21
|
+
values = ["hvm"]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
filter {
|
|
25
|
+
name = "block-device-mapping.volume-type"
|
|
26
|
+
values = ["standard"]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
filter {
|
|
30
|
+
name = "image-type"
|
|
31
|
+
values = ["machine"]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
resource "aws_instance" "mixlib_install_sh" {
|
|
36
|
+
count = 1
|
|
37
|
+
|
|
38
|
+
ami = "${data.aws_ami.ubuntu_14_ami.id}"
|
|
39
|
+
instance_type = "${var.aws_instance_type}"
|
|
40
|
+
key_name = "es-infrastructure"
|
|
41
|
+
|
|
42
|
+
associate_public_ip_address = true
|
|
43
|
+
|
|
44
|
+
subnet_id = "subnet-11ac0174" # Planet Releng Public Subnet
|
|
45
|
+
source_dest_check = false
|
|
46
|
+
|
|
47
|
+
vpc_security_group_ids = [
|
|
48
|
+
"sg-96274af3",
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
connection {
|
|
52
|
+
user = "ubuntu"
|
|
53
|
+
private_key = "${file("${var.connection_private_key}")}"
|
|
54
|
+
agent = "${var.connection_agent}"
|
|
55
|
+
timeout = "10m"
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
tags {
|
|
59
|
+
# ChefOps's AWS standard tags:
|
|
60
|
+
X-Dept = "EngServ"
|
|
61
|
+
X-Contact = "pwright"
|
|
62
|
+
X-Production = "false"
|
|
63
|
+
X-Environment = "acceptance"
|
|
64
|
+
X-Application = "mixlib-install"
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
provisioner "file" {
|
|
68
|
+
source = "../../.acceptance_data/ubuntu_install_url.sh"
|
|
69
|
+
destination = "/tmp/install.sh"
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
provisioner "file" {
|
|
73
|
+
source = "../../.acceptance_data/ubuntu_install_checksum.sh"
|
|
74
|
+
destination = "/tmp/install_checksum.sh"
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
provisioner "file" {
|
|
78
|
+
source = "../../.acceptance_data/ubuntu_install_metadata.sh"
|
|
79
|
+
destination = "/tmp/install_metadata.sh"
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
provisioner "file" {
|
|
83
|
+
source = "../../.acceptance_data/ubuntu_install_bad.sh"
|
|
84
|
+
destination = "/tmp/install_bad.sh"
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
provisioner "remote-exec" {
|
|
88
|
+
inline = [
|
|
89
|
+
"chmod +x /tmp/install.sh",
|
|
90
|
+
"chmod +x /tmp/install_checksum.sh",
|
|
91
|
+
"chmod +x /tmp/install_metadata.sh",
|
|
92
|
+
"chmod +x /tmp/install_bad.sh",
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Region to create infrastructure in
|
|
2
|
+
variable "aws_region" {
|
|
3
|
+
type = "string"
|
|
4
|
+
default = "us-west-2"
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
variable "aws_instance_type" {
|
|
8
|
+
type = "string"
|
|
9
|
+
default = "t2.micro"
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
# Used to indicidate whether the environment should be treated as "prod"
|
|
13
|
+
# This is mainly used for the `X-Production` AWS tag.
|
|
14
|
+
variable "production" {
|
|
15
|
+
default = "false"
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
# SSH Connection info used for remote provisioning instances
|
|
19
|
+
variable "connection_agent" {
|
|
20
|
+
description = "Set to false to disable using ssh-agent to authenticate"
|
|
21
|
+
default = false
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
variable "connection_private_key" {
|
|
25
|
+
description = "File path to AWS keypair private key to provision with"
|
|
26
|
+
default = "~/.ssh/es-infrastructure.pem"
|
|
27
|
+
}
|
data/acceptance/{windows-nano → .suites/windows-nano}/.acceptance/acceptance-cookbook/.gitignore
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generate install script then write to disk for terraform to copy to the instance for execution
|
|
2
|
+
execute "bundle exec ruby -e \"require 'mixlib/install'; puts Mixlib::Install.new(product_name: 'chef', product_version: :latest, channel: :stable, install_command_options: {download_url_override: 'https://packages.chef.io/files/stable/chef/13.3.42/el/7/chef-13.3.42-1.el7.x86_64.rpm', cmdline_dl_dir: '/tmp/checksum'}).install_command\" > ../.acceptance_data/centos_install_url.sh" do
|
|
3
|
+
cwd node['chef-acceptance']['suite-dir']
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
execute "bundle exec ruby -e \"require 'mixlib/install'; puts Mixlib::Install.new(product_name: 'chef', product_version: :latest, channel: :stable, install_command_options: {download_url_override: 'https://packages.chef.io/files/stable/chef/13.3.42/el/7/chef-13.3.42-1.el7.x86_64.rpm', checksum: 'fe051b504856a74ccce1fd23ff92c296506cb8292a3933c71069ae915e7a4a00', cmdline_dl_dir: '/tmp/checksum'}).install_command\" > ../.acceptance_data/centos_install_checksum.sh" do
|
|
7
|
+
cwd node['chef-acceptance']['suite-dir']
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
execute "bundle exec ruby -e \"require 'mixlib/install'; puts Mixlib::Install.new(product_name: 'chef', product_version: :latest, channel: :stable, install_command_options: {cmdline_dl_dir: '/tmp/metadata'}).install_command\" > ../.acceptance_data/centos_install_metadata.sh" do
|
|
11
|
+
cwd node['chef-acceptance']['suite-dir']
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
execute "bundle exec ruby -e \"require 'mixlib/install'; puts Mixlib::Install.new(product_name: 'chef', product_version: :latest, channel: :stable, install_command_options: {download_url_override: 'https://packages.chef.io/files/stable/chef/13.3.42/el/7/chef-13.3.42-1.el7.x86_64.rpm', checksum: 'FOOOOOOOOOOOOOO', cmdline_dl_dir: '/tmp/bad'}).install_command\" > ../.acceptance_data/centos_install_bad.sh" do
|
|
15
|
+
cwd node['chef-acceptance']['suite-dir']
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
execute "terraform plan" do
|
|
19
|
+
cwd "#{node['chef-acceptance']['suite-dir']}/terraform"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
execute "terraform apply" do
|
|
23
|
+
cwd "#{node['chef-acceptance']['suite-dir']}/terraform"
|
|
24
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
ruby_block "get ip" do
|
|
2
|
+
block do
|
|
3
|
+
tf_state = JSON.parse(File.read("#{node['chef-acceptance']['suite-dir']}/terraform/terraform.tfstate"))
|
|
4
|
+
node.default["ip"] = tf_state["modules"].first["resources"]["aws_instance.mixlib_install_sh"]["primary"]["attributes"]["public_ip"]
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
execute "run inspec" do
|
|
9
|
+
command lazy { "inspec exec verify.rb -t ssh://centos@#{node['ip']} -i ~/.ssh/es-infrastructure.pem" }
|
|
10
|
+
cwd "#{node['chef-acceptance']['suite-dir']}/inspec"
|
|
11
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Uncomment when re-running for local development
|
|
2
|
+
describe command("sudo rm -rf /tmp/metadata /tmp/checksum /tmp/bad; sudo yum remove chef -y") do
|
|
3
|
+
its("exit_status") { should eq 0 }
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
#
|
|
7
|
+
# DOWNLOAD URL TESTS
|
|
8
|
+
#
|
|
9
|
+
# No checksum provided
|
|
10
|
+
describe command("sudo /tmp/install.sh") do
|
|
11
|
+
its("stdout") { should match /Download URL override specified/ }
|
|
12
|
+
its("stdout") { should match /tmp\/checksum\/chef.* not found/ }
|
|
13
|
+
its("stdout") { should match /Thank you/ }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Running same script again
|
|
17
|
+
describe command("sudo /tmp/install.sh") do
|
|
18
|
+
its("stdout") { should match /Download URL override specified/ }
|
|
19
|
+
its("stdout") { should match /Verifying local file/ }
|
|
20
|
+
its("stdout") { should match /Checksum not specified/ }
|
|
21
|
+
its("stdout") { should match /Thank you/ }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Now with a valid checksum
|
|
25
|
+
describe command("sudo /tmp/install_checksum.sh") do
|
|
26
|
+
its("stdout") { should match /Download URL override specified/ }
|
|
27
|
+
its("stdout") { should match /Verifying local file/ }
|
|
28
|
+
its("stdout") { should match /Checksum match/ }
|
|
29
|
+
its("stdout") { should match /Thank you/ }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Corrupt the file we just downloaded
|
|
33
|
+
describe command("sudo chown centos /tmp/checksum; sudo chown centos /tmp/checksum/*; for i in /tmp/checksum/*; do echo 'oops'>>$i; done;") do
|
|
34
|
+
its("exit_status") { should eq 0 }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Run with checksum and it should download and re-verify the checksum
|
|
38
|
+
describe command("sudo /tmp/install_checksum.sh") do
|
|
39
|
+
its("stdout") { should match /Download URL override specified/ }
|
|
40
|
+
its("stdout") { should match /Verifying local file/ }
|
|
41
|
+
its("stdout") { should match /Checksum mismatch/ }
|
|
42
|
+
its("stdout") { should match /Thank you/ }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# clean up
|
|
46
|
+
describe command("sudo yum remove chef -y") do
|
|
47
|
+
its("stdout") { should match /Complete!/ }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
#
|
|
51
|
+
# METADATA URL TESTS
|
|
52
|
+
#
|
|
53
|
+
# Default behavior when specifying a download location (otherwise caching is unavailable)
|
|
54
|
+
describe command("sudo /tmp/install_metadata.sh") do
|
|
55
|
+
its("stdout") { should_not match /tmp\/metadata\/chef.* exists/ }
|
|
56
|
+
its("stdout") { should match /Thank you/ }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Running same script again
|
|
60
|
+
describe command("sudo /tmp/install_metadata.sh") do
|
|
61
|
+
its("stdout") { should match /tmp\/metadata\/chef.* exists/ }
|
|
62
|
+
its("stdout") { should match /Thank you/ }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# clean up
|
|
66
|
+
describe command("sudo yum remove chef -y") do
|
|
67
|
+
its("stdout") { should match /Complete!/ }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
#
|
|
71
|
+
# DOWNLOAD URL BAD CHECKSUM TESTS
|
|
72
|
+
#
|
|
73
|
+
describe command("sudo /tmp/install_bad.sh") do
|
|
74
|
+
its("stdout") { should match /Download URL override specified/ }
|
|
75
|
+
its("stdout") { should match /tmp\/bad\/chef.* not found/ }
|
|
76
|
+
its("stdout") { should match /Package checksum mismatch/ }
|
|
77
|
+
its("exit_status") { should eq 1 }
|
|
78
|
+
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
data "aws_ami" "centos_7_ami" {
|
|
2
|
+
most_recent = true
|
|
3
|
+
|
|
4
|
+
filter {
|
|
5
|
+
name = "owner-id"
|
|
6
|
+
values = ["679593333241"]
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
filter {
|
|
10
|
+
name = "name"
|
|
11
|
+
values = ["CentOS Linux 7*"]
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
filter {
|
|
15
|
+
name = "architecture"
|
|
16
|
+
values = ["x86_64"]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
filter {
|
|
20
|
+
name = "virtualization-type"
|
|
21
|
+
values = ["hvm"]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
filter {
|
|
25
|
+
name = "block-device-mapping.volume-type"
|
|
26
|
+
values = ["standard"]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
filter {
|
|
30
|
+
name = "image-type"
|
|
31
|
+
values = ["machine"]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
resource "aws_instance" "mixlib_install_sh" {
|
|
36
|
+
count = 1
|
|
37
|
+
|
|
38
|
+
ami = "${data.aws_ami.centos_7_ami.id}"
|
|
39
|
+
instance_type = "${var.aws_instance_type}"
|
|
40
|
+
key_name = "es-infrastructure"
|
|
41
|
+
|
|
42
|
+
associate_public_ip_address = true
|
|
43
|
+
|
|
44
|
+
subnet_id = "subnet-11ac0174" # Planet Releng Public Subnet
|
|
45
|
+
source_dest_check = false
|
|
46
|
+
|
|
47
|
+
vpc_security_group_ids = [
|
|
48
|
+
"sg-96274af3",
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
connection {
|
|
52
|
+
user = "centos"
|
|
53
|
+
private_key = "${file("${var.connection_private_key}")}"
|
|
54
|
+
agent = "${var.connection_agent}"
|
|
55
|
+
timeout = "10m"
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
tags {
|
|
59
|
+
# ChefOps's AWS standard tags:
|
|
60
|
+
X-Dept = "EngServ"
|
|
61
|
+
X-Contact = "pwright"
|
|
62
|
+
X-Production = "false"
|
|
63
|
+
X-Environment = "acceptance"
|
|
64
|
+
X-Application = "mixlib-install"
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
provisioner "file" {
|
|
68
|
+
source = "../../.acceptance_data/centos_install_url.sh"
|
|
69
|
+
destination = "/tmp/install.sh"
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
provisioner "file" {
|
|
73
|
+
source = "../../.acceptance_data/centos_install_checksum.sh"
|
|
74
|
+
destination = "/tmp/install_checksum.sh"
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
provisioner "file" {
|
|
78
|
+
source = "../../.acceptance_data/centos_install_metadata.sh"
|
|
79
|
+
destination = "/tmp/install_metadata.sh"
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
provisioner "file" {
|
|
83
|
+
source = "../../.acceptance_data/centos_install_bad.sh"
|
|
84
|
+
destination = "/tmp/install_bad.sh"
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
provisioner "remote-exec" {
|
|
88
|
+
inline = [
|
|
89
|
+
"chmod +x /tmp/install.sh",
|
|
90
|
+
"chmod +x /tmp/install_checksum.sh",
|
|
91
|
+
"chmod +x /tmp/install_metadata.sh",
|
|
92
|
+
"chmod +x /tmp/install_bad.sh",
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Restrict operation of terraform to chef-es profile so that
|
|
2
|
+
# we do not create resources in other aws profiles.
|
|
3
|
+
# We assume user has configured standard aws credentials
|
|
4
|
+
# under ~/.aws/credentials or with $AWS_SHARED_CREDENTIALS_FILE
|
|
5
|
+
provider "aws" {
|
|
6
|
+
region = "${var.aws_region}"
|
|
7
|
+
profile = "chef-aws"
|
|
8
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Region to create infrastructure in
|
|
2
|
+
variable "aws_region" {
|
|
3
|
+
type = "string"
|
|
4
|
+
default = "us-west-2"
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
variable "aws_instance_type" {
|
|
8
|
+
type = "string"
|
|
9
|
+
default = "t2.micro"
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
# Used to indicidate whether the environment should be treated as "prod"
|
|
13
|
+
# This is mainly used for the `X-Production` AWS tag.
|
|
14
|
+
variable "production" {
|
|
15
|
+
default = "false"
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
# SSH Connection info used for remote provisioning instances
|
|
19
|
+
variable "connection_agent" {
|
|
20
|
+
description = "Set to false to disable using ssh-agent to authenticate"
|
|
21
|
+
default = false
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
variable "connection_private_key" {
|
|
25
|
+
description = "File path to AWS keypair private key to provision with"
|
|
26
|
+
default = "~/.ssh/es-infrastructure.pem"
|
|
27
|
+
}
|
|
File without changes
|
data/acceptance/windows-server-2012r2-checksum/.acceptance/acceptance-cookbook/recipes/provision.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Nothing to see here...
|
|
2
|
+
|
|
3
|
+
install_url = "install -download_url_override https://packages.chef.io/files/stable/chef/13.2.20/windows/2012r2/chef-client-13.2.20-1-x64.msi"
|
|
4
|
+
|
|
5
|
+
execute "bundle exec ruby -e \"require 'mixlib/install'; puts Mixlib::Install.install_ps1, '#{install_url}'\" > ../.acceptance_data/powershell_install_url.ps1" do
|
|
6
|
+
cwd node['chef-acceptance']['suite-dir']
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
install_checksum = "#{install_url} -checksum 82772d31ad110b7a584492f3a51358a56f4d706a41920c0d441b87c94b71336c -verbose"
|
|
10
|
+
|
|
11
|
+
execute "bundle exec ruby -e \"require 'mixlib/install'; puts Mixlib::Install.install_ps1, '#{install_checksum}'\" > ../.acceptance_data/powershell_install_checksum.ps1" do
|
|
12
|
+
cwd node['chef-acceptance']['suite-dir']
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
execute "terraform plan" do
|
|
16
|
+
cwd "#{node['chef-acceptance']['suite-dir']}/terraform"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
execute "terraform apply" do
|
|
20
|
+
cwd "#{node['chef-acceptance']['suite-dir']}/terraform"
|
|
21
|
+
end
|
|
22
|
+
|
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
describe package("Chef Client v13*") do
|
|
2
|
+
it { should be_installed }
|
|
3
|
+
its("version") { should match /13.2.20/ }
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
# redirect verbose output
|
|
7
|
+
describe command("powershell.exe -file /tmp/install_with_checksum.ps1 *>&1") do
|
|
8
|
+
its("stdout") { should match /Found existing installer/ }
|
|
9
|
+
its("stdout") { should match /Checksum verified, using existing installer/ }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# corrupt the file
|
|
13
|
+
describe powershell("Out-File -filepath C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\chef-client-13.2.20-1-x64.msi") do
|
|
14
|
+
its("exit_status") { should eq 0 }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# redirect verbose output
|
|
18
|
+
describe command("powershell.exe -file /tmp/install_with_checksum.ps1 *>&1") do
|
|
19
|
+
its("stdout") { should match /Found existing installer/ }
|
|
20
|
+
its("stdout") { should match /Checksum mismatch/ }
|
|
21
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
data "aws_ami" "windows_ami" {
|
|
2
|
+
most_recent = true
|
|
3
|
+
|
|
4
|
+
filter {
|
|
5
|
+
name = "owner-alias"
|
|
6
|
+
values = ["amazon"]
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
filter {
|
|
10
|
+
name = "name"
|
|
11
|
+
values = ["Windows_Server-2012-R2*-English-*-Base-*"]
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
filter {
|
|
15
|
+
name = "architecture"
|
|
16
|
+
values = ["x86_64"]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
filter {
|
|
20
|
+
name = "virtualization-type"
|
|
21
|
+
values = ["hvm"]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
filter {
|
|
25
|
+
name = "block-device-mapping.volume-type"
|
|
26
|
+
values = ["gp2"]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
filter {
|
|
30
|
+
name = "image-type"
|
|
31
|
+
values = ["machine"]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
resource "aws_instance" "mixlib_install_ps1" {
|
|
36
|
+
count = 1
|
|
37
|
+
|
|
38
|
+
ami = "${data.aws_ami.windows_ami.id}"
|
|
39
|
+
instance_type = "${var.aws_instance_type}"
|
|
40
|
+
key_name = "es-infrastructure"
|
|
41
|
+
|
|
42
|
+
associate_public_ip_address = true
|
|
43
|
+
|
|
44
|
+
subnet_id = "subnet-11ac0174" # Planet Releng Public Subnet
|
|
45
|
+
source_dest_check = false
|
|
46
|
+
|
|
47
|
+
vpc_security_group_ids = [
|
|
48
|
+
"sg-96274af3",
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
connection {
|
|
52
|
+
type = "winrm"
|
|
53
|
+
user = "Administrator"
|
|
54
|
+
password = "${var.admin_password}"
|
|
55
|
+
timeout = "10m"
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
user_data = <<EOF
|
|
59
|
+
<script>
|
|
60
|
+
winrm quickconfig -q & winrm set winrm/config/winrs @{MaxMemoryPerShellMB="300"} & winrm set winrm/config @{MaxTimeoutms="1800000"} & winrm set winrm/config/service @{AllowUnencrypted="true"} & winrm set winrm/config/service/auth @{Basic="true"}
|
|
61
|
+
</script>
|
|
62
|
+
<powershell>
|
|
63
|
+
Set-ExecutionPolicy -ExecutionPolicy Bypass
|
|
64
|
+
netsh advfirewall firewall add rule name="WinRM in" protocol=TCP dir=in profile=any localport=5985 remoteip=any localip=any action=allow
|
|
65
|
+
$admin = [adsi]("WinNT://./administrator, user")
|
|
66
|
+
$admin.psbase.invoke("SetPassword", "${var.admin_password}")
|
|
67
|
+
</powershell>
|
|
68
|
+
EOF
|
|
69
|
+
|
|
70
|
+
tags {
|
|
71
|
+
# ChefOps's AWS standard tags:
|
|
72
|
+
X-Dept = "EngServ"
|
|
73
|
+
X-Contact = "pwright"
|
|
74
|
+
X-Production = "false"
|
|
75
|
+
X-Environment = "acceptance"
|
|
76
|
+
X-Application = "mixlib-install"
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
provisioner "file" {
|
|
80
|
+
source = "../../.acceptance_data/powershell_install_url.ps1"
|
|
81
|
+
destination = "/tmp/install.ps1"
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
provisioner "file" {
|
|
85
|
+
source = "../../.acceptance_data/powershell_install_checksum.ps1"
|
|
86
|
+
destination = "/tmp/install_with_checksum.ps1"
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
provisioner "remote-exec" {
|
|
90
|
+
inline = [
|
|
91
|
+
"powershell.exe -file /tmp/install.ps1",
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Restrict operation of terraform to chef-es profile so that
|
|
2
|
+
# we do not create resources in other aws profiles.
|
|
3
|
+
# We assume user has configured standard aws credentials
|
|
4
|
+
# under ~/.aws/credentials or with $AWS_SHARED_CREDENTIALS_FILE
|
|
5
|
+
provider "aws" {
|
|
6
|
+
region = "${var.aws_region}"
|
|
7
|
+
profile = "chef-aws"
|
|
8
|
+
}
|
data/acceptance/{windows-server-2012r2 → windows-server-2012r2-checksum}/terraform/variables.tf
RENAMED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
ruby_block "get ip" do
|
|
2
|
+
block do
|
|
3
|
+
tf_state = JSON.parse(File.read("#{node['chef-acceptance']['suite-dir']}/terraform/terraform.tfstate"))
|
|
4
|
+
node.default["ip"] = tf_state["modules"].first["resources"]["aws_instance.mixlib_install_ps1"]["primary"]["attributes"]["public_ip"]
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
execute "run inspec" do
|
|
9
|
+
command lazy { "inspec exec verify.rb -t winrm://Administrator@#{node['ip']} --password $WINDOWS_PASSWORD" }
|
|
10
|
+
cwd "#{node['chef-acceptance']['suite-dir']}/inspec"
|
|
11
|
+
environment(
|
|
12
|
+
"WINDOWS_PASSWORD" => ENV["TF_VAR_admin_password"] || "Pas5w0rD"
|
|
13
|
+
)
|
|
14
|
+
end
|
|
File without changes
|
data/acceptance/{windows-server-2012r2 → windows-server-2012r2-ps1}/terraform/application.tf
RENAMED
|
File without changes
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Restrict operation of terraform to chef-es profile so that
|
|
2
|
+
# we do not create resources in other aws profiles.
|
|
3
|
+
# We assume user has configured standard aws credentials
|
|
4
|
+
# under ~/.aws/credentials or with $AWS_SHARED_CREDENTIALS_FILE
|
|
5
|
+
provider "aws" {
|
|
6
|
+
region = "${var.aws_region}"
|
|
7
|
+
profile = "chef-aws"
|
|
8
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Region to create infrastructure in
|
|
2
|
+
variable "aws_region" {
|
|
3
|
+
type = "string"
|
|
4
|
+
default = "us-west-2"
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
variable "aws_instance_type" {
|
|
8
|
+
type = "string"
|
|
9
|
+
default = "t2.micro"
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
variable "admin_password" {
|
|
13
|
+
description = "Set Windows Administrator password"
|
|
14
|
+
type = "string"
|
|
15
|
+
default = "Pas5w0rD"
|
|
16
|
+
}
|
|
@@ -43,7 +43,8 @@ if test "x$download_url_override" = "x"; then
|
|
|
43
43
|
sha256=`awk '$1 == "sha256" { print $2 }' "$metadata_filename"`
|
|
44
44
|
else
|
|
45
45
|
download_url=$download_url_override
|
|
46
|
-
sha256
|
|
46
|
+
# Set sha256 to empty string if checksum not set
|
|
47
|
+
sha256=${checksum=""}
|
|
47
48
|
fi
|
|
48
49
|
|
|
49
50
|
############
|
|
@@ -31,20 +31,54 @@ download_dir=`dirname $download_filename`
|
|
|
31
31
|
(umask 077 && mkdir -p $download_dir) || exit 1
|
|
32
32
|
|
|
33
33
|
# check if we have that file locally available and if so verify the checksum
|
|
34
|
+
# Use cases
|
|
35
|
+
# 1) metadata - new download
|
|
36
|
+
# 2) metadata - cached download when cmdline_dl_dir set
|
|
37
|
+
# 3) url override - no checksum new download
|
|
38
|
+
# 4) url override - with checksum new download
|
|
39
|
+
# 5) url override - with checksum cached download when cmdline_dl_dir set
|
|
40
|
+
|
|
34
41
|
cached_file_available="false"
|
|
42
|
+
verify_checksum="true"
|
|
43
|
+
|
|
35
44
|
if test -f $download_filename; then
|
|
36
|
-
echo "$download_filename
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
45
|
+
echo "$download_filename exists"
|
|
46
|
+
cached_file_available="true"
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
if test "x$download_url_override" != "x"; then
|
|
50
|
+
echo "Download URL override specified"
|
|
51
|
+
if test "x$cached_file_available" = "xtrue"; then
|
|
52
|
+
echo "Verifying local file"
|
|
53
|
+
if test "x$sha256" = "x"; then
|
|
54
|
+
echo "Checksum not specified, ignoring existing file"
|
|
55
|
+
cached_file_available="false" # download new file
|
|
56
|
+
verify_checksum="false" # no checksum to compare after download
|
|
57
|
+
elif do_checksum "$download_filename" "$sha256"; then
|
|
58
|
+
echo "Checksum match, using existing file"
|
|
59
|
+
cached_file_available="true" # don't need to download file
|
|
60
|
+
verify_checksum="false" # don't need to checksum again
|
|
61
|
+
else
|
|
62
|
+
echo "Checksum mismatch, ignoring existing file"
|
|
63
|
+
cached_file_available="false" # download new file
|
|
64
|
+
verify_checksum="true" # checksum new downloaded file
|
|
65
|
+
fi
|
|
40
66
|
else
|
|
41
|
-
echo "
|
|
67
|
+
echo "$download_filename not found"
|
|
68
|
+
cached_file_available="false" # download new file
|
|
69
|
+
if test "x$sha256" = "x"; then
|
|
70
|
+
verify_checksum="false" # no checksum to compare after download
|
|
71
|
+
else
|
|
72
|
+
verify_checksum="true" # checksum new downloaded file
|
|
73
|
+
fi
|
|
42
74
|
fi
|
|
43
75
|
fi
|
|
44
76
|
|
|
45
|
-
# download if no local version of the file available
|
|
46
77
|
if test "x$cached_file_available" != "xtrue"; then
|
|
47
|
-
do_download "$download_url"
|
|
78
|
+
do_download "$download_url" "$download_filename"
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
if test "x$verify_checksum" = "xtrue"; then
|
|
48
82
|
do_checksum "$download_filename" "$sha256" || checksum_mismatch
|
|
49
83
|
fi
|
|
50
84
|
|
|
@@ -10,13 +10,15 @@
|
|
|
10
10
|
# $cmdline_filename: Name of the package downloaded on local disk.
|
|
11
11
|
# $cmdline_dl_dir: Name of the directory downloaded package will be saved to on local disk.
|
|
12
12
|
# $install_strategy: Method of package installations. default strategy is to always install upon exec. Set to "once" to skip if project is installed
|
|
13
|
+
# $download_url_override: Install package downloaded from a direct URL.
|
|
14
|
+
# $checksum: SHA256 for download_url_override file (optional)
|
|
13
15
|
############
|
|
14
16
|
|
|
15
17
|
# Defaults
|
|
16
18
|
channel="stable"
|
|
17
19
|
project="chef"
|
|
18
20
|
|
|
19
|
-
while getopts pnv:c:f:P:d:s opt
|
|
21
|
+
while getopts pnv:c:f:P:d:s:l:a opt
|
|
20
22
|
do
|
|
21
23
|
case "$opt" in
|
|
22
24
|
|
|
@@ -28,9 +30,11 @@ do
|
|
|
28
30
|
P) project="$OPTARG";;
|
|
29
31
|
d) cmdline_dl_dir="$OPTARG";;
|
|
30
32
|
s) install_strategy="$OPTARG";;
|
|
33
|
+
l) download_url_override="$OPTARG";;
|
|
34
|
+
a) checksum="$OPTARG";;
|
|
31
35
|
\?) # unknown flag
|
|
32
36
|
echo >&2 \
|
|
33
|
-
"usage: $0 [-P project] [-c release_channel] [-v version] [-f filename | -d download_dir] [-s install_strategy]"
|
|
37
|
+
"usage: $0 [-P project] [-c release_channel] [-v version] [-f filename | -d download_dir] [-s install_strategy] [-l download_url_override] [-a checksum]"
|
|
34
38
|
exit 1;;
|
|
35
39
|
esac
|
|
36
40
|
done
|
|
@@ -48,11 +48,10 @@ function Install-Project {
|
|
|
48
48
|
$daemon = 'auto',
|
|
49
49
|
[string]
|
|
50
50
|
$http_proxy,
|
|
51
|
-
# Specify an alternate download url
|
|
51
|
+
# Specify an alternate download url
|
|
52
52
|
[string]
|
|
53
53
|
$download_url_override,
|
|
54
|
-
# SHA256 checksum
|
|
55
|
-
# Must be present when using download_url_override
|
|
54
|
+
# SHA256 checksum to verify cached files (optional)
|
|
56
55
|
[string]
|
|
57
56
|
$checksum,
|
|
58
57
|
# Set to 'once' to skip install if project is detected
|
|
@@ -71,6 +70,9 @@ function Install-Project {
|
|
|
71
70
|
if(-not [string]::IsNullOrEmpty($http_proxy)) {
|
|
72
71
|
$env:http_proxy = $http_proxy
|
|
73
72
|
}
|
|
73
|
+
|
|
74
|
+
$cached_installer_available = $false
|
|
75
|
+
$verify_checksum = $true
|
|
74
76
|
|
|
75
77
|
if (-not [string]::IsNullOrEmpty($download_url_override)) {
|
|
76
78
|
$download_url = $download_url_override
|
|
@@ -97,41 +99,60 @@ function Install-Project {
|
|
|
97
99
|
if (-not (test-path $download_directory)) {
|
|
98
100
|
mkdir $download_directory
|
|
99
101
|
}
|
|
102
|
+
|
|
100
103
|
$download_directory = (resolve-path $download_directory).providerpath
|
|
101
104
|
$download_destination = join-path $download_directory $filename
|
|
102
105
|
|
|
103
|
-
if ((test-path $download_destination)
|
|
104
|
-
|
|
105
|
-
|
|
106
|
+
if ((test-path $download_destination)) {
|
|
107
|
+
Write-Verbose "Found existing installer at $download_destination."
|
|
108
|
+
if (-not [string]::IsNullOrEmpty($sha256)) {
|
|
109
|
+
Write-Verbose "Checksum specified"
|
|
110
|
+
$valid_checksum = Test-ProjectPackage -Path $download_destination -Algorithm 'SHA256' -Hash $sha256
|
|
111
|
+
if ($valid_checksum -eq $true) {
|
|
112
|
+
Write-Verbose "Checksum verified, using existing installer."
|
|
113
|
+
$cached_installer_available=$true # local file OK
|
|
114
|
+
$verify_checksum = $false # no need to re-verify checksums
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
Write-Verbose "Checksum mismatch, ignoring existing installer."
|
|
118
|
+
$cached_installer_available=$false # bad local file
|
|
119
|
+
$verify_checksum = $false # re-verify checksums
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
Write-Verbose "Checksum not specified, existing installer ignored."
|
|
124
|
+
$cached_installer_available=$false # ignore local file
|
|
125
|
+
$verify_checksum = $false # no checksum to compare
|
|
126
|
+
}
|
|
106
127
|
}
|
|
107
|
-
|
|
128
|
+
|
|
129
|
+
if (-not ($cached_installer_available)) {
|
|
108
130
|
if ($pscmdlet.ShouldProcess("$($download_url)", "Download $project")) {
|
|
109
131
|
Write-Verbose "Downloading $project from $($download_url) to $download_destination."
|
|
110
132
|
Get-WebContent $download_url -filepath $download_destination
|
|
111
133
|
}
|
|
112
134
|
}
|
|
113
135
|
|
|
114
|
-
if ($pscmdlet.ShouldProcess("$download_destination", "Installing")){
|
|
115
|
-
if (Test-ProjectPackage -Path $download_destination -Algorithm 'SHA256' -Hash $sha256) {
|
|
116
|
-
Write-Host "Installing $project from $download_destination"
|
|
117
|
-
$installingProject = $True
|
|
118
|
-
$installAttempts = 0
|
|
119
|
-
while ($installingProject) {
|
|
120
|
-
$installAttempts++
|
|
121
|
-
$result = $false
|
|
122
|
-
if($download_destination.EndsWith(".appx")) {
|
|
123
|
-
$result = Install-ChefAppx $download_destination $project
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
$result = Install-ChefMsi $download_destination $daemon
|
|
127
|
-
}
|
|
128
|
-
if(!$result) { continue }
|
|
129
|
-
$installingProject = $False
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
136
|
+
if ($pscmdlet.ShouldProcess("$download_destination", "Installing")) {
|
|
137
|
+
if (($verify_checksum) -and (-not (Test-ProjectPackage -Path $download_destination -Algorithm 'SHA256' -Hash $sha256))) {
|
|
133
138
|
throw "Failed to validate the downloaded installer for $project."
|
|
134
139
|
}
|
|
140
|
+
|
|
141
|
+
Write-Host "Installing $project from $download_destination"
|
|
142
|
+
$installingProject = $True
|
|
143
|
+
$installAttempts = 0
|
|
144
|
+
while ($installingProject) {
|
|
145
|
+
$installAttempts++
|
|
146
|
+
$result = $false
|
|
147
|
+
if($download_destination.EndsWith(".appx")) {
|
|
148
|
+
$result = Install-ChefAppx $download_destination $project
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
$result = Install-ChefMsi $download_destination $daemon
|
|
152
|
+
}
|
|
153
|
+
if(!$result) { continue }
|
|
154
|
+
$installingProject = $False
|
|
155
|
+
}
|
|
135
156
|
}
|
|
136
157
|
}
|
|
137
158
|
set-alias install -value Install-Project
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mixlib-install
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Thom May
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2017-08-
|
|
12
|
+
date: 2017-08-31 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: mixlib-shellout
|
|
@@ -79,8 +79,37 @@ files:
|
|
|
79
79
|
- Rakefile
|
|
80
80
|
- VERSION
|
|
81
81
|
- acceptance/.gitignore
|
|
82
|
+
- acceptance/.suites/ubuntu_install_checksum/.acceptance/acceptance-cookbook/.gitignore
|
|
83
|
+
- acceptance/.suites/ubuntu_install_checksum/.acceptance/acceptance-cookbook/metadata.rb
|
|
84
|
+
- acceptance/.suites/ubuntu_install_checksum/.acceptance/acceptance-cookbook/recipes/destroy.rb
|
|
85
|
+
- acceptance/.suites/ubuntu_install_checksum/.acceptance/acceptance-cookbook/recipes/provision.rb
|
|
86
|
+
- acceptance/.suites/ubuntu_install_checksum/.acceptance/acceptance-cookbook/recipes/verify.rb
|
|
87
|
+
- acceptance/.suites/ubuntu_install_checksum/inspec/verify.rb
|
|
88
|
+
- acceptance/.suites/ubuntu_install_checksum/terraform/application.tf
|
|
89
|
+
- acceptance/.suites/ubuntu_install_checksum/terraform/aws.tf
|
|
90
|
+
- acceptance/.suites/ubuntu_install_checksum/terraform/terraform.tfstate
|
|
91
|
+
- acceptance/.suites/ubuntu_install_checksum/terraform/variables.tf
|
|
92
|
+
- acceptance/.suites/windows-nano/.acceptance/acceptance-cookbook/.gitignore
|
|
93
|
+
- acceptance/.suites/windows-nano/.acceptance/acceptance-cookbook/libraries/chef_extentions.rb
|
|
94
|
+
- acceptance/.suites/windows-nano/.acceptance/acceptance-cookbook/metadata.rb
|
|
95
|
+
- acceptance/.suites/windows-nano/.acceptance/acceptance-cookbook/recipes/destroy.rb
|
|
96
|
+
- acceptance/.suites/windows-nano/.acceptance/acceptance-cookbook/recipes/provision.rb
|
|
97
|
+
- acceptance/.suites/windows-nano/.acceptance/acceptance-cookbook/recipes/verify.rb
|
|
98
|
+
- acceptance/.suites/windows-nano/inspec/verify.rb
|
|
99
|
+
- acceptance/.suites/windows-nano/terraform/application.tf
|
|
100
|
+
- acceptance/.suites/windows-nano/terraform/aws.tf
|
|
101
|
+
- acceptance/.suites/windows-nano/terraform/variables.tf
|
|
82
102
|
- acceptance/Gemfile
|
|
83
103
|
- acceptance/README.md
|
|
104
|
+
- acceptance/centos_install_checksum/.acceptance/acceptance-cookbook/.gitignore
|
|
105
|
+
- acceptance/centos_install_checksum/.acceptance/acceptance-cookbook/metadata.rb
|
|
106
|
+
- acceptance/centos_install_checksum/.acceptance/acceptance-cookbook/recipes/destroy.rb
|
|
107
|
+
- acceptance/centos_install_checksum/.acceptance/acceptance-cookbook/recipes/provision.rb
|
|
108
|
+
- acceptance/centos_install_checksum/.acceptance/acceptance-cookbook/recipes/verify.rb
|
|
109
|
+
- acceptance/centos_install_checksum/inspec/verify.rb
|
|
110
|
+
- acceptance/centos_install_checksum/terraform/application.tf
|
|
111
|
+
- acceptance/centos_install_checksum/terraform/aws.tf
|
|
112
|
+
- acceptance/centos_install_checksum/terraform/variables.tf
|
|
84
113
|
- acceptance/ubuntu_install_command/.acceptance/acceptance-cookbook/.gitignore
|
|
85
114
|
- acceptance/ubuntu_install_command/.acceptance/acceptance-cookbook/metadata.rb
|
|
86
115
|
- acceptance/ubuntu_install_command/.acceptance/acceptance-cookbook/recipes/destroy.rb
|
|
@@ -108,16 +137,15 @@ files:
|
|
|
108
137
|
- acceptance/ubuntu_install_sh/terraform/application.tf
|
|
109
138
|
- acceptance/ubuntu_install_sh/terraform/aws.tf
|
|
110
139
|
- acceptance/ubuntu_install_sh/terraform/variables.tf
|
|
111
|
-
- acceptance/windows-
|
|
112
|
-
- acceptance/windows-
|
|
113
|
-
- acceptance/windows-
|
|
114
|
-
- acceptance/windows-
|
|
115
|
-
- acceptance/windows-
|
|
116
|
-
- acceptance/windows-
|
|
117
|
-
- acceptance/windows-
|
|
118
|
-
- acceptance/windows-
|
|
119
|
-
- acceptance/windows-
|
|
120
|
-
- acceptance/windows-nano/terraform/variables.tf
|
|
140
|
+
- acceptance/windows-server-2012r2-checksum/.acceptance/acceptance-cookbook/.gitignore
|
|
141
|
+
- acceptance/windows-server-2012r2-checksum/.acceptance/acceptance-cookbook/metadata.rb
|
|
142
|
+
- acceptance/windows-server-2012r2-checksum/.acceptance/acceptance-cookbook/recipes/destroy.rb
|
|
143
|
+
- acceptance/windows-server-2012r2-checksum/.acceptance/acceptance-cookbook/recipes/provision.rb
|
|
144
|
+
- acceptance/windows-server-2012r2-checksum/.acceptance/acceptance-cookbook/recipes/verify.rb
|
|
145
|
+
- acceptance/windows-server-2012r2-checksum/inspec/verify.rb
|
|
146
|
+
- acceptance/windows-server-2012r2-checksum/terraform/application.tf
|
|
147
|
+
- acceptance/windows-server-2012r2-checksum/terraform/aws.tf
|
|
148
|
+
- acceptance/windows-server-2012r2-checksum/terraform/variables.tf
|
|
121
149
|
- acceptance/windows-server-2012r2-fips/.acceptance/acceptance-cookbook/.gitignore
|
|
122
150
|
- acceptance/windows-server-2012r2-fips/.acceptance/acceptance-cookbook/metadata.rb
|
|
123
151
|
- acceptance/windows-server-2012r2-fips/.acceptance/acceptance-cookbook/recipes/destroy.rb
|
|
@@ -136,15 +164,15 @@ files:
|
|
|
136
164
|
- acceptance/windows-server-2012r2-once/terraform/application.tf
|
|
137
165
|
- acceptance/windows-server-2012r2-once/terraform/aws.tf
|
|
138
166
|
- acceptance/windows-server-2012r2-once/terraform/variables.tf
|
|
139
|
-
- acceptance/windows-server-2012r2/.acceptance/acceptance-cookbook/.gitignore
|
|
140
|
-
- acceptance/windows-server-2012r2/.acceptance/acceptance-cookbook/metadata.rb
|
|
141
|
-
- acceptance/windows-server-2012r2/.acceptance/acceptance-cookbook/recipes/destroy.rb
|
|
142
|
-
- acceptance/windows-server-2012r2/.acceptance/acceptance-cookbook/recipes/provision.rb
|
|
143
|
-
- acceptance/windows-server-2012r2/.acceptance/acceptance-cookbook/recipes/verify.rb
|
|
144
|
-
- acceptance/windows-server-2012r2/inspec/verify.rb
|
|
145
|
-
- acceptance/windows-server-2012r2/terraform/application.tf
|
|
146
|
-
- acceptance/windows-server-2012r2/terraform/aws.tf
|
|
147
|
-
- acceptance/windows-server-2012r2/terraform/variables.tf
|
|
167
|
+
- acceptance/windows-server-2012r2-ps1/.acceptance/acceptance-cookbook/.gitignore
|
|
168
|
+
- acceptance/windows-server-2012r2-ps1/.acceptance/acceptance-cookbook/metadata.rb
|
|
169
|
+
- acceptance/windows-server-2012r2-ps1/.acceptance/acceptance-cookbook/recipes/destroy.rb
|
|
170
|
+
- acceptance/windows-server-2012r2-ps1/.acceptance/acceptance-cookbook/recipes/provision.rb
|
|
171
|
+
- acceptance/windows-server-2012r2-ps1/.acceptance/acceptance-cookbook/recipes/verify.rb
|
|
172
|
+
- acceptance/windows-server-2012r2-ps1/inspec/verify.rb
|
|
173
|
+
- acceptance/windows-server-2012r2-ps1/terraform/application.tf
|
|
174
|
+
- acceptance/windows-server-2012r2-ps1/terraform/aws.tf
|
|
175
|
+
- acceptance/windows-server-2012r2-ps1/terraform/variables.tf
|
|
148
176
|
- bin/mixlib-install
|
|
149
177
|
- ci/before-script.sh
|
|
150
178
|
- ci/es-infrastructure.pem.enc
|