ami_spec 1.7.0 → 1.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 718f947b58e6bedd2093507f23b7bcc1c8deae4503dde3603c6768700729948a
4
- data.tar.gz: b8c05a3702f5951932d372f6c3788a2ee71f9d0ead934a4bdfb52cae382bbe70
3
+ metadata.gz: 52b2bb6051e9962f16d4743d539763034bdf6e5ae33154852bbd335fe0a1b26b
4
+ data.tar.gz: 3b8876510c793c28911dab088fa35f003a0f15862c869bda17092db38e266929
5
5
  SHA512:
6
- metadata.gz: a2ceb57cf5b2ea84f085a835e47e1533065338479c23bf3da88ff962d5c046c6109f2c0b93461ac4c1d5093a14bc7d522e4c154d1f34225ef3813ebd70f6ecda
7
- data.tar.gz: ca6403909f96efb50c412ed722e6449b51ea147677f10d2e7729e31d02adc8ae82561eeaf2bbe054ab774bdf9086fe7b690254512f590c49d977920f99e2f371
6
+ metadata.gz: '06228534001d96065a6bc5937533e4e00a250d821ce264259cc792d41165639d0142e04e4dfa0374cd934fc9b0786fa80c76deb577e96649519017a28a23a4c1'
7
+ data.tar.gz: 3aff902fd3205ce1704dbddb09eda7b5a02ce960cc253e944c04473e5101624d8459c31b3bb69400ac20565745647dfbb178f1c23b2f6fc2f259bc7fc50c02a8
data/README.md CHANGED
@@ -54,7 +54,8 @@ Options:
54
54
  group will be generated in AWS
55
55
  -n, --allow-any-temporary-security-group The temporary security group will allow SSH connections
56
56
  from any IP address (0.0.0.0/0), otherwise allow the subnet's block
57
- -p, --aws-public-ip Launch instances with a public IP
57
+ -p, --aws-public-ip Launch instances with a public IP and use that IP for SSH
58
+ -q, --associate-public-ip Launch instances with a public IP and use the Private IP for SSH
58
59
  -t, --ssh-retries=<i> The number of times we should try sshing to the ec2 instance
59
60
  before giving up. Defaults to 30 (default: 30)
60
61
  -g, --tags=<s> Additional tags to add to launched instances in the form of
@@ -19,27 +19,34 @@ module AmiSpec
19
19
  @key_name = options.fetch(:key_name)
20
20
  @instance_type = options.fetch(:aws_instance_type)
21
21
  @public_ip = options.fetch(:aws_public_ip)
22
+ @associate_public_ip = options.fetch(:associate_public_ip)
22
23
  @region = options.fetch(:aws_region)
23
24
  @security_group_ids = options.fetch(:aws_security_groups)
24
25
  @tags = ec2ify_tags(options.fetch(:tags))
25
26
  @user_data_file = options.fetch(:user_data_file, nil)
26
27
  @iam_instance_profile_arn = options.fetch(:iam_instance_profile_arn, nil)
28
+ @logger = options.fetch(:logger)
27
29
  end
28
30
 
29
31
  def_delegators :@instance, :instance_id, :tags, :private_ip_address, :public_ip_address
30
32
 
31
33
  def start
34
+ @logger.info "Creating AWS EC2 instance for #{@ami}"
32
35
  client = Aws::EC2::Client.new(client_options)
33
36
  placeholder_instance = client.run_instances(instances_options).instances.first
34
37
 
35
38
  @instance = Aws::EC2::Instance.new(placeholder_instance.instance_id, client_options)
39
+ @logger.info "Waiting for AWS EC2 instance to start: #{@instance.id}"
36
40
  @instance.wait_until_running
37
41
  tag_instance
42
+ @logger.info "AWS EC2 instance started: #{@instance.id}"
38
43
  end
39
44
 
40
45
  def terminate
46
+ @logger.info "Terminating AWS EC2 instance: #{@instance.id}"
41
47
  @instance.terminate
42
48
  @instance.wait_until_terminated
49
+ @logger.info "AWS EC2 instance terminated: #{@instance.id}"
43
50
  end
44
51
 
45
52
  private
@@ -61,7 +68,7 @@ module AmiSpec
61
68
  key_name: @key_name,
62
69
  network_interfaces: [{
63
70
  device_index: 0,
64
- associate_public_ip_address: @public_ip,
71
+ associate_public_ip_address: @public_ip || @associate_public_ip,
65
72
  subnet_id: @subnet_id,
66
73
  }]
67
74
  }
@@ -12,8 +12,10 @@ module AmiSpec
12
12
  property :aws_public_ip
13
13
  property :aws_region
14
14
  property :aws_security_groups
15
+ property :associate_public_ip
15
16
  property :tags
16
17
  property :user_data_file
17
18
  property :iam_instance_profile_arn
19
+ property :logger
18
20
  end
19
21
  end
@@ -1,3 +1,3 @@
1
1
  module AmiSpec
2
- VERSION = '1.7.0'
2
+ VERSION = '1.8.1'
3
3
  end
data/lib/ami_spec.rb CHANGED
@@ -38,7 +38,9 @@ module AmiSpec
38
38
  # aws_instance_type::
39
39
  # AWS ec2 instance type
40
40
  # aws_public_ip::
41
- # Should the instances get a public IP address
41
+ # Should the instances get a public IP address and use that IP for SSH
42
+ # associate_public_ip::
43
+ # Launch instances with a public IP but don't use that IP for SSH
42
44
  # ssh_user::
43
45
  # The username to SSH to the AMI with.
44
46
  # ssh_retries::
@@ -81,17 +83,25 @@ module AmiSpec
81
83
 
82
84
  instances = []
83
85
  options[:amis].each_pair do |role, ami|
84
- aws_instance_options = AwsInstanceOptions.new(options.merge(role: role, ami: ami))
86
+ aws_instance_options = AwsInstanceOptions.new(options.merge(role: role, ami: ami, logger: logger))
85
87
  instances << AwsInstance.start(aws_instance_options)
86
88
  end
87
89
 
88
90
  results = []
89
91
  instances.each do |instance|
90
92
  ip_address = options[:aws_public_ip] ? instance.public_ip_address : instance.private_ip_address
93
+ logger.info("Waiting for SSH…")
91
94
  WaitForSSH.wait(ip_address, options[:ssh_user], options[:key_file], options[:ssh_retries])
92
- WaitForRC.wait(ip_address, options[:ssh_user], options[:key_file]) if options[:wait_for_rc]
93
- WaitForCloudInit.wait(ip_address, options[:ssh_user], options[:key_file]) if options[:wait_for_cloud_init]
95
+ if options[:wait_for_rc]
96
+ logger.info("Waiting for RC…")
97
+ WaitForRC.wait(ip_address, options[:ssh_user], options[:key_file])
98
+ end
99
+ if options[:wait_for_cloud_init]
100
+ logger.info("Waiting for cloud init…")
101
+ WaitForCloudInit.wait(ip_address, options[:ssh_user], options[:key_file])
102
+ end
94
103
 
104
+ logger.info("Running serverspec…")
95
105
  server_spec_options = ServerSpecOptions.new(options.merge(instance: instance))
96
106
  results << ServerSpec.new(server_spec_options).run
97
107
  end
@@ -147,7 +157,8 @@ web_server,ami-id.',
147
157
  type: :string, default: nil, multi: true, short: :c
148
158
  opt :allow_any_temporary_security_group, 'The temporary security group will allow SSH connections from any IP address (0.0.0.0/0)',
149
159
  short: :n
150
- opt :aws_public_ip, 'Launch instances with a public IP', short: :p
160
+ opt :aws_public_ip, 'Launch instances with a public IP and use that IP for SSH', short: :p
161
+ opt :associate_public_ip, "Launch instances with a public IP but don't use that IP for SSH", short: :q
151
162
  opt :ssh_retries, 'The number of times we should try sshing to the ec2 instance before giving up. Defaults to 30',
152
163
  type: :int, default: 30, short: :t
153
164
  opt :tags, 'Additional tags to add to launched instances in the form of comma separated key=value pairs. i.e. Name=AmiSpec',
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ami_spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Robinson
8
8
  - Martin Jagusch
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-07-01 00:00:00.000000000 Z
12
+ date: 2022-12-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk-ec2
@@ -134,7 +134,7 @@ files:
134
134
  homepage: https://github.com/envato/ami-spec
135
135
  licenses: []
136
136
  metadata: {}
137
- post_install_message:
137
+ post_install_message:
138
138
  rdoc_options: []
139
139
  require_paths:
140
140
  - lib
@@ -149,8 +149,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
149
  - !ruby/object:Gem::Version
150
150
  version: '0'
151
151
  requirements: []
152
- rubygems_version: 3.0.4
153
- signing_key:
152
+ rubygems_version: 3.3.26
153
+ signing_key:
154
154
  specification_version: 4
155
155
  summary: Acceptance testing your AMIs
156
156
  test_files: []