packer-config 1.3.1 → 1.4.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/COPYRIGHT +1 -0
- data/README.md +10 -3
- data/RELEASENOTES.md +7 -0
- data/TODO.md +0 -1
- data/lib/packer-config.rb +14 -4
- data/lib/packer/builder.rb +88 -0
- data/lib/packer/builders/amazon.rb +2 -17
- data/lib/packer/builders/null.rb +1 -26
- data/lib/packer/builders/virtualbox.rb +2 -29
- data/lib/packer/builders/vmware_iso.rb +2 -37
- data/lib/packer/builders/vmware_vmx.rb +2 -25
- data/lib/packer/version.rb +1 -1
- data/packer-config.gemspec +3 -1
- data/spec/integration/centos_vagrant_spec.rb +4 -3
- data/spec/packer/builder_spec.rb +6 -0
- data/spec/packer/builders/amazon_spec.rb +28 -8
- data/spec/packer/builders/null_spec.rb +2 -16
- data/spec/packer/builders/virtualbox_spec.rb +11 -4
- data/spec/packer/builders/vmware_iso_spec.rb +10 -12
- data/spec/packer/builders/vmware_vmx_spec.rb +8 -10
- data/spec/packer_config_spec.rb +13 -0
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4920f738fb0ed191d9670882f3336847462a085
|
4
|
+
data.tar.gz: c41a894f64a07e8e61c1f94dfc5160fdf700880d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59da5cd9f6be7590e63b8210049d4db889d4339e7f64b6f18e20cded754a377dddc8531e211fad5c801fde8aea16750aa931a27d61823d114c58756c8ccff963
|
7
|
+
data.tar.gz: 304585133fb571ad92c8864f731f0454d5888cc9c85ef47879ad18ba44db52d2e82feb56535964f6430b9f73d0922ecf9a9175c3e6254315f32d327ac0aabbd0
|
data/.travis.yml
CHANGED
data/COPYRIGHT
CHANGED
data/README.md
CHANGED
@@ -23,6 +23,10 @@ Bonus: you can really go to town with templates when it's all done it Ruby.
|
|
23
23
|
|
24
24
|
require 'packer-config'
|
25
25
|
|
26
|
+
## Requires
|
27
|
+
|
28
|
+
* [Packer](http://packer.io) version 0.8.5 or higher
|
29
|
+
|
26
30
|
### Builders
|
27
31
|
|
28
32
|
The following [Packer builders](http://www.packer.io/docs/templates/builders.html) are currently implemented:
|
@@ -35,6 +39,8 @@ The following [Packer builders](http://www.packer.io/docs/templates/builders.htm
|
|
35
39
|
* [vmware-iso](https://www.packer.io/docs/builders/vmware-iso)
|
36
40
|
* [null](https://www.packer.io/docs/builders/null.html)
|
37
41
|
|
42
|
+
[Communicators](https://www.packer.io/docs/templates/communicator.html) are supported as options on Builders in `packer-config`. The `none`, `ssh`, and `winrm` communicators are all available as is the `docker` communicator on the Docker-type builders. `packer-config` will raise an error if you try to use a Communicator type that isn't valid for the Builder.
|
43
|
+
|
38
44
|
### Provisioners
|
39
45
|
|
40
46
|
The following [Packer provisioners](http://www.packer.io/docs/templates/provisioners.html) are currently implemented:
|
@@ -79,15 +85,16 @@ This example is based on the integration test [spec/integration/centos_vagrant_s
|
|
79
85
|
builder.guest_additions_path "VBoxGuestAdditions_#{pconfig.macro.Version}.iso"
|
80
86
|
builder.guest_os_type "RedHat_64"
|
81
87
|
builder.http_directory "scripts/kickstart"
|
82
|
-
builder.iso_checksum '
|
88
|
+
builder.iso_checksum '7bb8c1c23a4fdef93e6f0a6347d570e5764d0b38'
|
83
89
|
builder.iso_checksum_type 'sha1'
|
84
|
-
builder.iso_url "#{pconfig.variable 'mirror'}/6.
|
90
|
+
builder.iso_url "#{pconfig.variable 'mirror'}/6.7/isos/x86_64/CentOS-6.7-x86_64-bin-DVD1.iso"
|
85
91
|
builder.output_directory "#{OS}-x86_64-virtualbox"
|
86
92
|
builder.shutdown_command "echo 'vagrant'|sudo -S /sbin/halt -h -p"
|
93
|
+
builder.communicator "ssh"
|
87
94
|
builder.ssh_password "vagrant"
|
88
95
|
builder.ssh_port 22
|
89
96
|
builder.ssh_username "vagrant"
|
90
|
-
builder.
|
97
|
+
builder.ssh_timeout "10000s"
|
91
98
|
builder.vboxmanage [
|
92
99
|
[
|
93
100
|
"modifyvm",
|
data/RELEASENOTES.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# packer-config Release Notes
|
2
2
|
|
3
|
+
## 1.4.0
|
4
|
+
|
5
|
+
* Adds support for Communicators (with help from [diamond29][]).
|
6
|
+
* Validates the minimum version of Packer is met before running any Packer command line calls. Minimum version is set to 0.8.5 to support Communicators.
|
7
|
+
* Bumps integration spec and working example in the README to CentOS 6.7.
|
8
|
+
|
3
9
|
## 1.3.1
|
4
10
|
|
5
11
|
* Adds a fix for [issue #8](https://github.com/ianchesal/packer-config/issues/8). Removes psuedo-terminals from the runner library which were causing the problem.
|
@@ -34,3 +40,4 @@
|
|
34
40
|
[frasercobb]: https://github.com/frasercobb
|
35
41
|
[grepory]: https://github.com/grepory
|
36
42
|
[ianchesal]: https://github.com/ianchesal
|
43
|
+
[diamond29]: https://github.com/diamond29
|
data/TODO.md
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# TODO
|
2
2
|
|
3
|
-
* Use [lowered-expectations](https://rubygems.org/gems/lowered-expectations) to enforce a minimum version of `packer` exists in order to use this gem
|
4
3
|
* Add an option to Packer::Config#validate to run the configuration through packer's `validate` command
|
5
4
|
* Add spec tests for every method on every sub-class. Found during integration testing that some methods on the sub-classes had typos in the `__*` method calls. Spec tests would have caught this.
|
6
5
|
* Look in to something like VCR to drive the tests of the child classes -- there's a lot of repetitive testing that could be done on them.
|
data/lib/packer-config.rb
CHANGED
@@ -8,6 +8,7 @@ require 'packer/postprocessor'
|
|
8
8
|
require 'packer/macro'
|
9
9
|
require 'packer/envvar'
|
10
10
|
require 'packer/version'
|
11
|
+
require 'lowered/expectations'
|
11
12
|
|
12
13
|
module Packer
|
13
14
|
class Config < Packer::DataObject
|
@@ -20,6 +21,8 @@ module Packer
|
|
20
21
|
attr_reader :envvar
|
21
22
|
attr_reader :output_file
|
22
23
|
|
24
|
+
PACKER_VERSION = '0.8.5'
|
25
|
+
|
23
26
|
def initialize(file)
|
24
27
|
super()
|
25
28
|
self.data['variables'] = {}
|
@@ -35,6 +38,7 @@ module Packer
|
|
35
38
|
|
36
39
|
def validate
|
37
40
|
super
|
41
|
+
verify_packer_version
|
38
42
|
if self.builders.length == 0
|
39
43
|
raise DataValidationError.new("At least one builder is required")
|
40
44
|
end
|
@@ -117,10 +121,6 @@ module Packer
|
|
117
121
|
self.__add_string('description', description)
|
118
122
|
end
|
119
123
|
|
120
|
-
def min_packer_version(version)
|
121
|
-
self.__add_string('min_packer_version', version)
|
122
|
-
end
|
123
|
-
|
124
124
|
def variables
|
125
125
|
self.data['variables']
|
126
126
|
end
|
@@ -160,8 +160,18 @@ module Packer
|
|
160
160
|
end
|
161
161
|
|
162
162
|
private
|
163
|
+
|
163
164
|
attr_writer :output_file
|
164
165
|
attr_writer :macro
|
165
166
|
attr_writer :envvar
|
167
|
+
|
168
|
+
def min_packer_version(version)
|
169
|
+
self.__add_string('min_packer_version', version)
|
170
|
+
end
|
171
|
+
|
172
|
+
def verify_packer_version
|
173
|
+
min_packer_version PACKER_VERSION
|
174
|
+
LoweredExpectations.expect('packer', ">= #{PACKER_VERSION}", vopt: 'version')
|
175
|
+
end
|
166
176
|
end
|
167
177
|
end
|
data/lib/packer/builder.rb
CHANGED
@@ -39,6 +39,8 @@ module Packer
|
|
39
39
|
}.fetch(type).new
|
40
40
|
end
|
41
41
|
|
42
|
+
attr_reader :communicators
|
43
|
+
|
42
44
|
def self.types
|
43
45
|
VALID_BUILDER_TYPES
|
44
46
|
end
|
@@ -46,13 +48,99 @@ module Packer
|
|
46
48
|
def initialize
|
47
49
|
super
|
48
50
|
self.add_required('type')
|
51
|
+
self.communicators = []
|
49
52
|
end
|
50
53
|
|
51
54
|
def name(name)
|
52
55
|
self.__add_string('name', name)
|
53
56
|
end
|
54
57
|
|
58
|
+
# @ianchesal: Communicators are technically Templates in Packer land but
|
59
|
+
# they modify Builders. Weird. So we'll treat them as Builder attributes.
|
60
|
+
# See: https://packer.io/docs/templates/communicator.html
|
61
|
+
def communicator(comm)
|
62
|
+
raise(DataValidationError, "unknown communicator protocol #{comm}") unless communicators.include? comm
|
63
|
+
self.__add_string('communicator', comm)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Technically these only apply if the communicator is ssh
|
67
|
+
def ssh_host(host)
|
68
|
+
self.__add_string('ssh_host', host)
|
69
|
+
end
|
70
|
+
|
71
|
+
def ssh_port(port)
|
72
|
+
self.__add_integer('ssh_port', port)
|
73
|
+
end
|
74
|
+
|
75
|
+
def ssh_username(username)
|
76
|
+
self.__add_string('ssh_username', username)
|
77
|
+
end
|
78
|
+
|
79
|
+
def ssh_password(password)
|
80
|
+
self.__add_string('ssh_password', password)
|
81
|
+
end
|
82
|
+
|
83
|
+
def ssh_private_key_file(filename)
|
84
|
+
self.__add_string('ssh_private_key_file', filename)
|
85
|
+
end
|
86
|
+
|
87
|
+
def ssh_pty(pty)
|
88
|
+
self.__add_boolean('ssh_pty', pty)
|
89
|
+
end
|
90
|
+
|
91
|
+
def ssh_timeout(timeout)
|
92
|
+
self.__add_string('ssh_timeout', timeout)
|
93
|
+
end
|
94
|
+
|
95
|
+
def ssh_handshake_attempts(attempts)
|
96
|
+
self.__add_integer('ssh_handshake_attempts', attempts)
|
97
|
+
end
|
98
|
+
|
99
|
+
def ssh_disable_agent(disable)
|
100
|
+
self.__add_boolean('ssh_disable_agent', disable)
|
101
|
+
end
|
102
|
+
|
103
|
+
def ssh_bastion_host(hostname)
|
104
|
+
self.__add_string('ssh_bastion_host', hostname)
|
105
|
+
end
|
106
|
+
|
107
|
+
def ssh_bastion_username(username)
|
108
|
+
self.__add_string('ssh_bastion_username', username)
|
109
|
+
end
|
110
|
+
|
111
|
+
def ssh_bastion_password(password)
|
112
|
+
self.__add_string('ssh_bastion_password', password)
|
113
|
+
end
|
114
|
+
|
115
|
+
def ssh_bastion_private_key_file(filename)
|
116
|
+
self.__add_string('ssh_bastion_private_key_file', filename)
|
117
|
+
end
|
118
|
+
|
119
|
+
# Technically these only apply if the communicator is winrm
|
120
|
+
def winrm_host(host)
|
121
|
+
self.__add_string('winrm_host', host)
|
122
|
+
end
|
123
|
+
|
124
|
+
def winrm_port(port)
|
125
|
+
self.__add_string('winrm_port', port)
|
126
|
+
end
|
127
|
+
|
128
|
+
def winrm_username(username)
|
129
|
+
self.__add_string('winrm_username', username)
|
130
|
+
end
|
131
|
+
|
132
|
+
def winrm_password(password)
|
133
|
+
self.__add_string('winrm_password', password)
|
134
|
+
end
|
135
|
+
|
136
|
+
def winrm_timeout(timeout)
|
137
|
+
self.__add_string('winrm_timeout', timeout)
|
138
|
+
end
|
139
|
+
|
55
140
|
private
|
141
|
+
|
142
|
+
attr_writer :communicators
|
143
|
+
|
56
144
|
def self.validate_type(type)
|
57
145
|
VALID_BUILDER_TYPES.include? type
|
58
146
|
end
|
@@ -12,8 +12,9 @@ module Packer
|
|
12
12
|
'instance_type',
|
13
13
|
'region',
|
14
14
|
'source_ami',
|
15
|
-
'
|
15
|
+
'communicator'
|
16
16
|
)
|
17
|
+
self.communicators = %w(none ssh winrm)
|
17
18
|
end
|
18
19
|
|
19
20
|
def access_key(key)
|
@@ -36,10 +37,6 @@ module Packer
|
|
36
37
|
self.__add_string('source_ami', name)
|
37
38
|
end
|
38
39
|
|
39
|
-
def ssh_username(username)
|
40
|
-
self.__add_string('ssh_username', username)
|
41
|
-
end
|
42
|
-
|
43
40
|
def secret_key(key)
|
44
41
|
self.__add_string('secret_key', key)
|
45
42
|
end
|
@@ -104,18 +101,6 @@ module Packer
|
|
104
101
|
self.__add_array_of_strings('security_group_ids', ids, %w[security_group_id])
|
105
102
|
end
|
106
103
|
|
107
|
-
def ssh_port(port)
|
108
|
-
self.__add_integer('ssh_port', port)
|
109
|
-
end
|
110
|
-
|
111
|
-
def ssh_private_key_file(file)
|
112
|
-
self.__add_string('ssh_private_key_file', file)
|
113
|
-
end
|
114
|
-
|
115
|
-
def ssh_timeout(time)
|
116
|
-
self.__add_string('ssh_timeout', time)
|
117
|
-
end
|
118
|
-
|
119
104
|
def subnet_id(id)
|
120
105
|
self.__add_string('subnet_id', id)
|
121
106
|
end
|
data/lib/packer/builders/null.rb
CHANGED
@@ -8,32 +8,7 @@ module Packer
|
|
8
8
|
def initialize
|
9
9
|
super
|
10
10
|
self.data['type'] = NULL
|
11
|
-
self.
|
12
|
-
'host',
|
13
|
-
'ssh_password',
|
14
|
-
'ssh_private_key_file',
|
15
|
-
'ssh_username'
|
16
|
-
)
|
17
|
-
end
|
18
|
-
|
19
|
-
def host(name)
|
20
|
-
self.__add_string('host', name)
|
21
|
-
end
|
22
|
-
|
23
|
-
def ssh_password(passwd)
|
24
|
-
self.__add_string('ssh_password', passwd)
|
25
|
-
end
|
26
|
-
|
27
|
-
def ssh_private_key_file(filename)
|
28
|
-
self.__add_string('ssh_private_key_file', filename)
|
29
|
-
end
|
30
|
-
|
31
|
-
def ssh_username(name)
|
32
|
-
self.__add_string('ssh_username', name)
|
33
|
-
end
|
34
|
-
|
35
|
-
def port(number)
|
36
|
-
self.__add_integer('port', number)
|
11
|
+
self.communicators = %w(none ssh winrm)
|
37
12
|
end
|
38
13
|
end
|
39
14
|
end
|
@@ -12,8 +12,9 @@ module Packer
|
|
12
12
|
'iso_checksum',
|
13
13
|
'iso_checksum_type',
|
14
14
|
'iso_url',
|
15
|
-
'
|
15
|
+
'communicator'
|
16
16
|
)
|
17
|
+
self.communicators = %w(none ssh winrm)
|
17
18
|
end
|
18
19
|
|
19
20
|
def iso_checksum(checksum)
|
@@ -32,10 +33,6 @@ module Packer
|
|
32
33
|
self.__add_array_of_strings('iso_urls', urls, %[iso_url])
|
33
34
|
end
|
34
35
|
|
35
|
-
def ssh_username(username)
|
36
|
-
self.__add_string('ssh_username', username)
|
37
|
-
end
|
38
|
-
|
39
36
|
def boot_command(commands)
|
40
37
|
self.__add_array_of_strings('boot_command', commands)
|
41
38
|
end
|
@@ -112,30 +109,6 @@ module Packer
|
|
112
109
|
self.__add_string('shutdown_timeout', time)
|
113
110
|
end
|
114
111
|
|
115
|
-
def ssh_host_port_min(port_number)
|
116
|
-
self.__add_integer('ssh_host_port_min', port_number)
|
117
|
-
end
|
118
|
-
|
119
|
-
def ssh_host_port_max(port_number)
|
120
|
-
self.__add_integer('ssh_host_port_max', port_number)
|
121
|
-
end
|
122
|
-
|
123
|
-
def ssh_key_path(path)
|
124
|
-
self.__add_string('ssh_key_path', path)
|
125
|
-
end
|
126
|
-
|
127
|
-
def ssh_password(password)
|
128
|
-
self.__add_string('ssh_password', password)
|
129
|
-
end
|
130
|
-
|
131
|
-
def ssh_port(port_number)
|
132
|
-
self.__add_integer('ssh_port', port_number)
|
133
|
-
end
|
134
|
-
|
135
|
-
def ssh_wait_timeout(time)
|
136
|
-
self.__add_string('ssh_wait_timeout', time)
|
137
|
-
end
|
138
|
-
|
139
112
|
def vboxmanage(array_of_commands)
|
140
113
|
self.__add_array_of_array_of_strings('vboxmanage', array_of_commands)
|
141
114
|
end
|
@@ -12,8 +12,9 @@ module Packer
|
|
12
12
|
'iso_checksum',
|
13
13
|
'iso_checksum_type',
|
14
14
|
'iso_url',
|
15
|
-
'
|
15
|
+
'communicator'
|
16
16
|
)
|
17
|
+
self.communicators = %w(none ssh winrm)
|
17
18
|
end
|
18
19
|
|
19
20
|
def iso_checksum(checksum)
|
@@ -32,10 +33,6 @@ module Packer
|
|
32
33
|
self.__add_array_of_strings('iso_urls', urls, %[iso_url])
|
33
34
|
end
|
34
35
|
|
35
|
-
def ssh_username(username)
|
36
|
-
self.__add_string('ssh_username', username)
|
37
|
-
end
|
38
|
-
|
39
36
|
def boot_command(commands)
|
40
37
|
self.__add_array_of_strings('boot_command', commands)
|
41
38
|
end
|
@@ -130,38 +127,6 @@ module Packer
|
|
130
127
|
self.__add_boolean('skip_compaction', bool)
|
131
128
|
end
|
132
129
|
|
133
|
-
def ssh_host(host)
|
134
|
-
self.__add_string('ssh_host', host)
|
135
|
-
end
|
136
|
-
|
137
|
-
def ssh_host_port_min(port_number)
|
138
|
-
self.__add_integer('ssh_host_port_min', port_number)
|
139
|
-
end
|
140
|
-
|
141
|
-
def ssh_host_port_max(port_number)
|
142
|
-
self.__add_integer('ssh_host_port_max', port_number)
|
143
|
-
end
|
144
|
-
|
145
|
-
def ssh_key_path(path)
|
146
|
-
self.__add_string('ssh_key_path', path)
|
147
|
-
end
|
148
|
-
|
149
|
-
def ssh_password(password)
|
150
|
-
self.__add_string('ssh_password', password)
|
151
|
-
end
|
152
|
-
|
153
|
-
def ssh_port(port_number)
|
154
|
-
self.__add_integer('ssh_port', port_number)
|
155
|
-
end
|
156
|
-
|
157
|
-
def ssh_skip_request_pty(bool)
|
158
|
-
self.__add_boolean('ssh_skip_request_pty', bool)
|
159
|
-
end
|
160
|
-
|
161
|
-
def ssh_wait_timeout(time)
|
162
|
-
self.__add_string('ssh_wait_timeout', time)
|
163
|
-
end
|
164
|
-
|
165
130
|
def tools_upload_flavor(flavor)
|
166
131
|
self.__add_string('tools_upload_flavor', flavor)
|
167
132
|
end
|
@@ -6,22 +6,15 @@ module Packer
|
|
6
6
|
data['type'] = VMWARE_VMX
|
7
7
|
add_required(
|
8
8
|
'source_path',
|
9
|
-
'
|
9
|
+
'communicator'
|
10
10
|
)
|
11
|
+
self.communicators = %w(none ssh winrm)
|
11
12
|
end
|
12
13
|
|
13
14
|
def source_path(path)
|
14
15
|
__add_string('source_path', path)
|
15
16
|
end
|
16
17
|
|
17
|
-
def ssh_username(username)
|
18
|
-
__add_string('ssh_username', username)
|
19
|
-
end
|
20
|
-
|
21
|
-
def ssh_password(password)
|
22
|
-
__add_string('ssh_password', password)
|
23
|
-
end
|
24
|
-
|
25
18
|
def boot_command(commands)
|
26
19
|
__add_array_of_strings('boot_command', commands)
|
27
20
|
end
|
@@ -70,22 +63,6 @@ module Packer
|
|
70
63
|
__add_boolean('skip_compaction', bool)
|
71
64
|
end
|
72
65
|
|
73
|
-
def ssh_key_path(path)
|
74
|
-
__add_string('ssh_key_path', path)
|
75
|
-
end
|
76
|
-
|
77
|
-
def ssh_port(port)
|
78
|
-
__add_integer('ssh_port', port)
|
79
|
-
end
|
80
|
-
|
81
|
-
def ssh_skip_request_pty(bool)
|
82
|
-
__add_boolean('ssh_skip_request_pty', bool)
|
83
|
-
end
|
84
|
-
|
85
|
-
def ssh_wait_timeout(timeout)
|
86
|
-
__add_string('ssh_wait_timeout', timeout)
|
87
|
-
end
|
88
|
-
|
89
66
|
def vm_name(name)
|
90
67
|
__add_string('vm_name', name)
|
91
68
|
end
|
data/lib/packer/version.rb
CHANGED
data/packer-config.gemspec
CHANGED
@@ -6,7 +6,7 @@ require 'packer/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "packer-config"
|
8
8
|
spec.version = Packer::VERSION
|
9
|
-
spec.authors = ["Ian Chesal", "Fraser Cobb", "Greg Poirier", "Matasano Security"]
|
9
|
+
spec.authors = ["Ian Chesal", "Fraser Cobb", "Greg Poirier", "Matasano Security", "Greg Diamond"]
|
10
10
|
spec.email = ["ian.chesal@gmail.com"]
|
11
11
|
spec.summary = 'An object model to build packer.io configurations in Ruby.'
|
12
12
|
spec.description = <<-END
|
@@ -26,6 +26,8 @@ END
|
|
26
26
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
27
27
|
spec.require_paths = ["lib"]
|
28
28
|
|
29
|
+
spec.add_runtime_dependency "lowered-expectations"
|
30
|
+
|
29
31
|
spec.add_development_dependency "bundler", "~> 1.7"
|
30
32
|
spec.add_development_dependency "rake", "~> 10.3"
|
31
33
|
spec.add_development_dependency "rspec", "~> 3.0"
|
@@ -18,15 +18,16 @@ RSpec.describe Packer::Config do
|
|
18
18
|
builder.guest_additions_path "VBoxGuestAdditions_#{pconfig.macro.Version}.iso"
|
19
19
|
builder.guest_os_type "RedHat_64"
|
20
20
|
builder.http_directory "scripts/kickstart"
|
21
|
-
builder.iso_checksum '
|
21
|
+
builder.iso_checksum '7bb8c1c23a4fdef93e6f0a6347d570e5764d0b38'
|
22
22
|
builder.iso_checksum_type 'sha1'
|
23
|
-
builder.iso_url "#{pconfig.variable 'mirror'}/6.
|
23
|
+
builder.iso_url "#{pconfig.variable 'mirror'}/6.7/isos/x86_64/CentOS-6.7-x86_64-bin-DVD1.iso"
|
24
24
|
builder.output_directory "#{OS}-x86_64-virtualbox"
|
25
25
|
builder.shutdown_command "echo 'vagrant'|sudo -S /sbin/halt -h -p"
|
26
|
+
builder.communicator "ssh"
|
26
27
|
builder.ssh_password "vagrant"
|
27
28
|
builder.ssh_port 22
|
28
29
|
builder.ssh_username "vagrant"
|
29
|
-
builder.
|
30
|
+
builder.ssh_timeout "10000s"
|
30
31
|
builder.vboxmanage [
|
31
32
|
[
|
32
33
|
"modifyvm",
|
data/spec/packer/builder_spec.rb
CHANGED
@@ -23,4 +23,10 @@ RSpec.describe Packer::Builder do
|
|
23
23
|
builder.data.delete('name')
|
24
24
|
end
|
25
25
|
end
|
26
|
+
|
27
|
+
describe '#communicator' do
|
28
|
+
it 'raises an error if you try to set an invalid communicator' do
|
29
|
+
expect { builder.communicator 'foo' }.to raise_error Packer::DataObject::DataValidationError
|
30
|
+
end
|
31
|
+
end
|
26
32
|
end
|
@@ -57,19 +57,39 @@ end
|
|
57
57
|
RSpec.describe Packer::Builder::Amazon::EBS do
|
58
58
|
let(:builder) { Packer::Builder.get_builder(Packer::Builder::AMAZON_EBS) }
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
60
|
+
it 'has a type of amazon-ebs' do
|
61
|
+
expect(builder.data['type']).to eq(Packer::Builder::AMAZON_EBS)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'requires ami_name, instance_type, region, source_ami, and communicator' do
|
65
|
+
expect { builder.validate }.to raise_error(Packer::DataObject::DataValidationError)
|
66
|
+
builder.ami_name 'foo'
|
67
|
+
builder.instance_type 'foo'
|
68
|
+
builder.region 'foo'
|
69
|
+
builder.source_ami 'foo'
|
70
|
+
builder.communicator 'ssh'
|
71
|
+
expect { builder.validate }.not_to raise_error
|
64
72
|
end
|
65
73
|
end
|
66
74
|
|
67
75
|
RSpec.describe Packer::Builder::Amazon::Instance do
|
68
76
|
let(:builder) { Packer::Builder.get_builder(Packer::Builder::AMAZON_INSTANCE) }
|
69
77
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
78
|
+
it 'has a type of amazon-instance' do
|
79
|
+
expect(builder.data['type']).to eq(Packer::Builder::AMAZON_INSTANCE)
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'requires ami_name, instance_type, region, source_ami, account_id, s3_bucket, x509_cert_path, x509_key_path, and communicator' do
|
83
|
+
expect { builder.validate }.to raise_error(Packer::DataObject::DataValidationError)
|
84
|
+
builder.ami_name 'foo'
|
85
|
+
builder.instance_type 'foo'
|
86
|
+
builder.region 'foo'
|
87
|
+
builder.source_ami 'foo'
|
88
|
+
builder.account_id 'foo'
|
89
|
+
builder.s3_bucket 'foo'
|
90
|
+
builder.x509_cert_path 'foo'
|
91
|
+
builder.x509_key_path 'foo'
|
92
|
+
builder.communicator 'ssh'
|
93
|
+
expect { builder.validate }.not_to raise_error
|
74
94
|
end
|
75
95
|
end
|
@@ -5,21 +5,7 @@ RSpec.describe Packer::Builder::Null do
|
|
5
5
|
let(:builder) { Packer::Builder.get_builder(Packer::Builder::NULL) }
|
6
6
|
let(:some_string) { 'some string' }
|
7
7
|
|
8
|
-
it '
|
9
|
-
expect
|
10
|
-
builder.host :some_string
|
11
|
-
expect{ builder.validate }.to raise_error
|
12
|
-
builder.ssh_password :some_string
|
13
|
-
expect{ builder.validate }.to raise_error
|
14
|
-
builder.ssh_private_key_file :some_string
|
15
|
-
expect{ builder.validate }.to raise_error
|
16
|
-
builder.ssh_username :some_string
|
17
|
-
expect(builder.validate).to be_truthy
|
18
|
-
end
|
19
|
-
|
20
|
-
describe '#initialize' do
|
21
|
-
it 'has a type of null' do
|
22
|
-
expect(builder.data['type']).to eq(Packer::Builder::NULL)
|
23
|
-
end
|
8
|
+
it 'has a type of null' do
|
9
|
+
expect(builder.data['type']).to eq(Packer::Builder::NULL)
|
24
10
|
end
|
25
11
|
end
|
@@ -7,10 +7,17 @@ RSpec.describe Packer::Builder::VirtualBoxISO do
|
|
7
7
|
let(:in_commands_mixed) { [["command1", 1 ], ["command2", 2 ]] }
|
8
8
|
let(:out_commands_strings) { [["command1", "1"], ["command2", "2"]] }
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
it 'has a type of virtualbox-iso' do
|
11
|
+
expect(builder.data['type']).to eq(Packer::Builder::VIRTUALBOX_ISO)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'requires iso_checksum, iso_checksum_type, iso_url and communicator' do
|
15
|
+
expect { builder.validate }.to raise_error(Packer::DataObject::DataValidationError)
|
16
|
+
builder.iso_checksum '88197272b2a442402820fcc788a8cc7a'
|
17
|
+
builder.iso_checksum_type "MD5"
|
18
|
+
builder.iso_url 'path'
|
19
|
+
builder.communicator 'ssh'
|
20
|
+
expect { builder.validate }.not_to raise_error
|
14
21
|
end
|
15
22
|
|
16
23
|
describe '#vboxmanage' do
|
@@ -4,19 +4,17 @@ require 'spec_helper'
|
|
4
4
|
RSpec.describe Packer::Builder::VMWareISO do
|
5
5
|
let(:builder) { Packer::Builder.get_builder(Packer::Builder::VMWARE_ISO) }
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
7
|
+
it 'has a type of VMWare ISO' do
|
8
|
+
expect(builder.data['type']).to eq(Packer::Builder::VMWARE_ISO)
|
9
|
+
end
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
11
|
+
it 'requires iso_checksum, iso_checksum_type, iso_url and communicator' do
|
12
|
+
expect { builder.validate }.to raise_error(Packer::DataObject::DataValidationError)
|
13
|
+
builder.iso_checksum '88197272b2a442402820fcc788a8cc7a'
|
14
|
+
builder.iso_checksum_type "MD5"
|
15
|
+
builder.iso_url 'path'
|
16
|
+
builder.communicator 'ssh'
|
17
|
+
expect { builder.validate }.not_to raise_error
|
20
18
|
end
|
21
19
|
|
22
20
|
describe '#vmx_data' do
|
@@ -4,17 +4,15 @@ require 'spec_helper'
|
|
4
4
|
RSpec.describe Packer::Builder::VMWareVMX do
|
5
5
|
let(:builder) { Packer::Builder.get_builder(Packer::Builder::VMWARE_VMX) }
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
7
|
+
it 'has a type of VMWare VMX' do
|
8
|
+
expect(builder.data['type']).to eq(Packer::Builder::VMWARE_VMX)
|
9
|
+
end
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
11
|
+
it 'requires source_path and communicator' do
|
12
|
+
expect { builder.validate }.to raise_error(Packer::DataObject::DataValidationError)
|
13
|
+
builder.source_path 'path'
|
14
|
+
builder.communicator 'ssh'
|
15
|
+
expect { builder.validate }.not_to raise_error
|
18
16
|
end
|
19
17
|
|
20
18
|
describe '#vmx_data' do
|
data/spec/packer_config_spec.rb
CHANGED
@@ -22,6 +22,7 @@ RSpec.describe Packer::Config do
|
|
22
22
|
it 'returns true for a valid instance' do
|
23
23
|
expect(packer.builders).to receive(:length).and_return(1)
|
24
24
|
expect(Packer::Runner).to receive(:run!).and_return('')
|
25
|
+
expect(LoweredExpectations).to receive(:expect).and_return(true)
|
25
26
|
FakeFS do
|
26
27
|
expect(packer.validate).to be_truthy
|
27
28
|
end
|
@@ -29,10 +30,22 @@ RSpec.describe Packer::Config do
|
|
29
30
|
|
30
31
|
it 'raises an error for an invalid instance' do
|
31
32
|
expect(packer.builders).to receive(:length).and_return(0)
|
33
|
+
expect(LoweredExpectations).to receive(:expect).and_return(true)
|
32
34
|
FakeFS do
|
33
35
|
expect { packer.validate }.to raise_error
|
34
36
|
end
|
35
37
|
end
|
38
|
+
|
39
|
+
it 'sets the minimum Packer version' do
|
40
|
+
expect(packer.builders).to receive(:length).and_return(1)
|
41
|
+
expect(Packer::Runner).to receive(:run!).and_return('')
|
42
|
+
expect(LoweredExpectations).to receive(:expect).and_return(true)
|
43
|
+
expect(packer.data['min_packer_version']).to be_falsey
|
44
|
+
FakeFS do
|
45
|
+
expect(packer.validate).to be_truthy
|
46
|
+
end
|
47
|
+
expect(packer.data['min_packer_version']).to eq(Packer::Config::PACKER_VERSION)
|
48
|
+
end
|
36
49
|
end
|
37
50
|
|
38
51
|
describe '#dump' do
|
metadata
CHANGED
@@ -1,18 +1,33 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: packer-config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian Chesal
|
8
8
|
- Fraser Cobb
|
9
9
|
- Greg Poirier
|
10
10
|
- Matasano Security
|
11
|
+
- Greg Diamond
|
11
12
|
autorequire:
|
12
13
|
bindir: bin
|
13
14
|
cert_chain: []
|
14
|
-
date: 2015-
|
15
|
+
date: 2015-09-14 00:00:00.000000000 Z
|
15
16
|
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name: lowered-expectations
|
19
|
+
requirement: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '0'
|
24
|
+
type: :runtime
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
requirements:
|
28
|
+
- - ">="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
16
31
|
- !ruby/object:Gem::Dependency
|
17
32
|
name: bundler
|
18
33
|
requirement: !ruby/object:Gem::Requirement
|
@@ -229,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
229
244
|
version: '0'
|
230
245
|
requirements: []
|
231
246
|
rubyforge_project:
|
232
|
-
rubygems_version: 2.4.
|
247
|
+
rubygems_version: 2.4.8
|
233
248
|
signing_key:
|
234
249
|
specification_version: 4
|
235
250
|
summary: An object model to build packer.io configurations in Ruby.
|