ami_spec 1.0.1 → 1.1.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 +1 -0
- data/README.md +15 -1
- data/Rakefile +3 -1
- data/lib/ami_spec/version.rb +1 -1
- data/lib/ami_spec/wait_for_rc.rb +32 -8
- data/spec/containers/Dockerfile.amazon_linux +9 -0
- data/spec/containers/Dockerfile.trusty +8 -0
- data/spec/containers/Dockerfile.xenial +22 -0
- data/spec/containers/README.md +5 -0
- data/spec/containers/ami-spec +27 -0
- data/spec/containers/ami-spec.pub +1 -0
- data/spec/containers/docker-compose.yml +28 -0
- data/spec/containers/rc.conf +17 -0
- data/spec/containers/sshd_config +17 -0
- data/spec/wait_for_rc_spec.rb +25 -0
- metadata +22 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4504c60fd0ce24f40be03e192159fcc9c8509cddbc2642cb0c8c50e351a7c7fa
|
4
|
+
data.tar.gz: 8fc38e659fb6436b8ad37467564445de49c92940991d3f8b820d1b2f6927355a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a86bbfccdfbbe323eea7cea45bc9450d41626d3a40ed456a41b4228ef4eb1b211e23268a024dbecd81ebb768a06f00ac19e99f31387ce14e6b32635c99886cf
|
7
|
+
data.tar.gz: 65effb5f2d0a7053c645c79b9ffa0c42ca93c4ee4183cdfbc7ab909263affb431d54ba0ea7f0dcb339bc5f3b81466ed765393d644886910b499e6a8df501c673
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -110,9 +110,23 @@ For bug fixes, documentation changes, and small features:
|
|
110
110
|
4. Push to the branch (git push origin my-new-feature)
|
111
111
|
5. Create a new Pull Request
|
112
112
|
|
113
|
+
## Running tests
|
114
|
+
|
115
|
+
Use the following command to run non-integration tests:
|
116
|
+
```
|
117
|
+
bundle exec rake spec
|
118
|
+
```
|
119
|
+
|
120
|
+
If you're working on the `WaitForRC` feature you can run it's integration tests by first bringing up the containers, then executing the integration tests:
|
121
|
+
```
|
122
|
+
docker-compose -f spec/containers/docker-compose.yml up -d
|
123
|
+
bundle exec rspec . --tag integration
|
124
|
+
docker-compose -f spec/containers/docker-compose.yml down
|
125
|
+
```
|
126
|
+
|
113
127
|
## Maintainers
|
114
128
|
|
115
|
-
Patrick Robinson (@
|
129
|
+
Patrick Robinson (@patrobinson)
|
116
130
|
|
117
131
|
## License
|
118
132
|
|
data/Rakefile
CHANGED
data/lib/ami_spec/version.rb
CHANGED
data/lib/ami_spec/wait_for_rc.rb
CHANGED
@@ -2,15 +2,39 @@ require 'net/ssh'
|
|
2
2
|
|
3
3
|
module AmiSpec
|
4
4
|
class WaitForRC
|
5
|
-
def self.wait(ip_address, user, key)
|
6
|
-
Net::SSH.start(ip_address, user, keys: [key], paranoid: false) do |ssh|
|
7
|
-
|
8
|
-
#
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
def self.wait(ip_address, user, key, port=22)
|
6
|
+
Net::SSH.start(ip_address, user, keys: [key], paranoid: false, port: port) do |ssh|
|
7
|
+
distrib_stdout = ""
|
8
|
+
# Determine the OS family
|
9
|
+
ssh.exec!("source /etc/*release && echo -n $DISTRIB_ID && echo -n $ID") do |channel, stream, data|
|
10
|
+
distrib_stdout << data if stream == :stdout
|
11
|
+
end
|
12
|
+
if distrib_stdout == "Ubuntu"
|
13
|
+
codename_stdout = ""
|
14
|
+
ssh.exec!("source /etc/*release && echo -n $DISTRIB_CODENAME") do |channel, stream, data|
|
15
|
+
codename_stdout << data if stream == :stdout
|
16
|
+
end
|
17
|
+
if codename_stdout == "trusty"
|
18
|
+
ssh.exec 'while /usr/sbin/service rc status | grep -q "^rc start/running, process"; do sleep 1; done'
|
19
|
+
elsif codename_stdout == "xenial"
|
20
|
+
ssh.exec 'while /usr/sbin/service rc status >/dev/null; do sleep 1; done'
|
21
|
+
else
|
22
|
+
puts "WARNING: Only Ubuntu trusty and xenial supported and we detected '#{codename_stdout}'. --wait-for-rc has no effect."
|
23
|
+
end
|
24
|
+
elsif distrib_stdout == "amzn"
|
25
|
+
version_stdout = ""
|
26
|
+
ssh.exec!("source /etc/*release && echo -n $VERSION_ID") do |channel, stream, data|
|
27
|
+
version_stdout << data if stream == :stdout
|
28
|
+
end
|
29
|
+
if version_stdout =~ %r{201[0-9]{1}\.[0-9]+}
|
30
|
+
ssh.exec 'while initctl status rc |grep -q "^rc start/running"; do sleep 1; done'
|
31
|
+
else
|
32
|
+
puts "WARNING: Only Amazon Linux 1 is supported and we detected '#{version_stdout}'. --wait-for-rc has no effect."
|
33
|
+
end
|
34
|
+
else
|
35
|
+
puts "WARNING: Only Ubuntu and Amazon linux are supported and we detected '#{distrib_stdout}'. --wait-for-rc has no effect."
|
36
|
+
end
|
12
37
|
end
|
13
38
|
end
|
14
39
|
end
|
15
40
|
end
|
16
|
-
|
@@ -0,0 +1,22 @@
|
|
1
|
+
FROM ubuntu:xenial
|
2
|
+
|
3
|
+
RUN cd /lib/systemd/system/sysinit.target.wants/; ls | grep -v systemd-tmpfiles-setup | xargs rm -f $1 \
|
4
|
+
rm -f /lib/systemd/system/multi-user.target.wants/*;\
|
5
|
+
rm -f /etc/systemd/system/*.wants/*;\
|
6
|
+
rm -f /lib/systemd/system/local-fs.target.wants/*; \
|
7
|
+
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
|
8
|
+
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
|
9
|
+
rm -f /lib/systemd/system/basic.target.wants/*;\
|
10
|
+
rm -f /lib/systemd/system/anaconda.target.wants/*; \
|
11
|
+
rm -f /lib/systemd/system/plymouth*; \
|
12
|
+
rm -f /lib/systemd/system/systemd-update-utmp*;
|
13
|
+
|
14
|
+
RUN apt-get update && apt-get install -y openssh-server dbus && apt-get clean
|
15
|
+
|
16
|
+
RUN systemctl set-default multi-user.target
|
17
|
+
|
18
|
+
COPY ami-spec.pub /root/.ssh/authorized_keys
|
19
|
+
|
20
|
+
EXPOSE 22
|
21
|
+
|
22
|
+
CMD ["/bin/bash", "-c", "exec /sbin/init --log-target=journal 3>&1"]
|
@@ -0,0 +1,5 @@
|
|
1
|
+
## Integration test containers
|
2
|
+
|
3
|
+
This directory is used to create containers that can be used to test the `WaitForRC` class. Because they require upstart/systemd to exist we have to install and start the init environment. We also setup SSH so that we can simple call the `wait` function and have it SSH to our container to execute.
|
4
|
+
|
5
|
+
Refer to the [README](../../README.md#running-tests) for how to execute them.
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEowIBAAKCAQEAwWn2++lylp8RcHzy7H9QpYli3nxLDh769DDbnb9cw2UDd9OH
|
3
|
+
6JZKaT3xe3IbMr39SmkGlOygkBmeH43VxAkiVJv3awDPRU0UvDyUvCsbaYj1/cOS
|
4
|
+
8Vxr7ENExoiKkengcg6k3mFj65ooJ1pf8RoXuj+0+YU0fgejuR/M4x6V8GKFCJhU
|
5
|
+
wFmRs3mcoCx0EiJtTx40IW87uOQUruDX5HcgTUInRhyRxltNrXJaap1weMGpIA/o
|
6
|
+
Bo8foOx1Os9o3YKQlkPF4iqk2AVJ4FZGbMay0cIq3075Jeig6bdlIhRpYA+w+SAI
|
7
|
+
y/yT/K3U1ciQqKtPgahGEyihrh7Ks2F2FSLhdwIDAQABAoIBABWt/QNLrY54kgnb
|
8
|
+
15buxmlntu9dW0Rf8J1ChLtv4cP9JKBf05IcloapbNH7flT3utaGYzh6NZ0xYeoD
|
9
|
+
ifyJUZHOUbNqydDozPQ0ji9xXYc81OX28Beh1m8LM0BVucKVRpVCUvSiUgLsqqeO
|
10
|
+
l8Z8uEAmN/DoH3QpAw8TI3Ip0YC6OHA2aRV9PXuDnR5OTdBPOBj33Fdtf0rUAk41
|
11
|
+
UFe/BHFyACfTK05+bcQz9DvRV/H+SnBeOCqDie1eNDnEgza4NS2cnBUCogKsaCrY
|
12
|
+
gV06pivS2aHsK5CuNB1lcZi1tVf3DnDwPvFWqLLG9PIHaevPDpDURECirCrpCWJT
|
13
|
+
VSHm7KECgYEA4K5jSna4Jzo9FlHzF+yGEju5QwEJTjnhunNw1FpcgPAddFQ4hs3w
|
14
|
+
0EhyPlZyf3vwhfdH4vBhTLjRTrOF2SIvSSPwrkWlAhaluVvpVRFd/ncYW4kAVwhQ
|
15
|
+
15/ZBtvu8OQnKeeztsLlkEi4ik3cKjeXyeDQReb2Guvc6IM4fr6ZrlkCgYEA3F/S
|
16
|
+
uJr04UgzX0cQuNLX7uXz6oeyJupwFkTuAhvLcHDsDHFkP1M9zfFzg5aEcQungz/l
|
17
|
+
5s/vFJmfLBrzhSoYY1T9PDdLwEL/JKaxhKNEV9lExF4exMui6QPWdTMA8ndvB7r5
|
18
|
+
Ur85X8scH1qJo99fsEmNmG5O72PGXmltOB0sNE8CgYEApeuCPYIweh+C7xGzkE5F
|
19
|
+
r/9Uz4tbYN5TuMn5X4gfWcR4K+jqGXrJxDZLz4ctZMGVHIlBF/DmGa8+On1OccvR
|
20
|
+
2ZRl73xU35bz6U9bn0uE+x7d6PLiQmNMt/8+WNdfu5rw5PxLdcK1nnhldxUKak7F
|
21
|
+
k/qmM4jc44Kcj0QgG1EL0nkCgYAFbV61KSvKuIp7WDazNo4W1hbxubHLf46PHdd2
|
22
|
+
udSCymUl0U0UuioVflLH9NcCKbVQaCxzSL+slDP1VByXNPgwyhEKgJoe/Adokaph
|
23
|
+
h9vRBgrJgz/ivNkgP/XyIPVvAz36xMILJaZ2E3x30TT+kiu7HbSdAmpzPtPN027b
|
24
|
+
KOzDxQKBgEv2OvEtpvpv9DgPHs9Mq4haTh2o8c8JW7kwHqbbZOZjZ/4daEh89FhH
|
25
|
+
gjvJV5NjaNhFqBWTnNfjSr4o09WFDoQyVwEUrWNJXXZmsjOHqMDT/kwVoAsld1tO
|
26
|
+
N+JW6/4M+EMYvF39yWzdQn/U3A1gZIfzAC6S3HUCi9BgKLBMKEN3
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1 @@
|
|
1
|
+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBafb76XKWnxFwfPLsf1CliWLefEsOHvr0MNudv1zDZQN304folkppPfF7chsyvf1KaQaU7KCQGZ4fjdXECSJUm/drAM9FTRS8PJS8KxtpiPX9w5LxXGvsQ0TGiIqR6eByDqTeYWPrmignWl/xGhe6P7T5hTR+B6O5H8zjHpXwYoUImFTAWZGzeZygLHQSIm1PHjQhbzu45BSu4NfkdyBNQidGHJHGW02tclpqnXB4wakgD+gGjx+g7HU6z2jdgpCWQ8XiKqTYBUngVkZsxrLRwirfTvkl6KDpt2UiFGlgD7D5IAjL/JP8rdTVyJCoq0+BqEYTKKGuHsqzYXYVIuF3
|
@@ -0,0 +1,28 @@
|
|
1
|
+
version: '3'
|
2
|
+
services:
|
3
|
+
xenial:
|
4
|
+
build:
|
5
|
+
context: .
|
6
|
+
dockerfile: Dockerfile.xenial
|
7
|
+
ports:
|
8
|
+
- "1122:22"
|
9
|
+
# --security-opt seccomp=unconfined --tmpfs /run --tmpfs /run/lock -v /sys/fs/cgroup:/sys/fs/cgroup:ro
|
10
|
+
security_opt:
|
11
|
+
- seccomp:unconfined
|
12
|
+
tmpfs:
|
13
|
+
- /run
|
14
|
+
- /run/lock
|
15
|
+
volumes:
|
16
|
+
- /sys/fs/cgroup:/sys/fs/cgroup:ro
|
17
|
+
trusty:
|
18
|
+
build:
|
19
|
+
context: .
|
20
|
+
dockerfile: Dockerfile.trusty
|
21
|
+
ports:
|
22
|
+
- "1123:22"
|
23
|
+
amazon_linux:
|
24
|
+
build:
|
25
|
+
context: .
|
26
|
+
dockerfile: Dockerfile.amazon_linux
|
27
|
+
ports:
|
28
|
+
- "1124:22"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# rc - System V runlevel compatibility
|
2
|
+
#
|
3
|
+
# This task runs the old sysv-rc runlevel scripts. It
|
4
|
+
# is usually started by the telinit compatibility wrapper.
|
5
|
+
#
|
6
|
+
# Do not edit this file directly. If you want to change the behaviour,
|
7
|
+
# please create a file rc.override and put your changes there.
|
8
|
+
|
9
|
+
start on runlevel [0123456]
|
10
|
+
|
11
|
+
stop on runlevel [!$RUNLEVEL]
|
12
|
+
|
13
|
+
task
|
14
|
+
|
15
|
+
export RUNLEVEL
|
16
|
+
console output
|
17
|
+
exec /etc/rc.d/rc $RUNLEVEL
|
@@ -0,0 +1,17 @@
|
|
1
|
+
HostKey /etc/ssh/ssh_host_rsa_key
|
2
|
+
HostKey /etc/ssh/ssh_host_ecdsa_key
|
3
|
+
HostKey /etc/ssh/ssh_host_ed25519_key
|
4
|
+
SyslogFacility AUTHPRIV
|
5
|
+
AuthorizedKeysFile .ssh/authorized_keys
|
6
|
+
PasswordAuthentication no
|
7
|
+
ChallengeResponseAuthentication no
|
8
|
+
UsePAM yes
|
9
|
+
X11Forwarding yes
|
10
|
+
PrintLastLog yes
|
11
|
+
UsePrivilegeSeparation sandbox
|
12
|
+
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
|
13
|
+
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
|
14
|
+
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
|
15
|
+
AcceptEnv XMODIFIERS
|
16
|
+
Subsystem sftp /usr/libexec/openssh/sftp-server
|
17
|
+
PermitRootLogin yes
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AmiSpec::WaitForRC, integration: true do
|
4
|
+
let(:private_key_file) { File.expand_path(File.join('..', 'containers', 'ami-spec'), __FILE__) }
|
5
|
+
context 'xenial server' do
|
6
|
+
let(:ssh_port) { 1122 }
|
7
|
+
it 'executes without printing any errors' do
|
8
|
+
expect { described_class.wait("localhost", "root", private_key_file, ssh_port) }.to_not output.to_stdout
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'trusty server' do
|
13
|
+
let(:ssh_port) { 1123 }
|
14
|
+
it 'executes without printing any errors' do
|
15
|
+
expect { described_class.wait("localhost", "root", private_key_file, ssh_port) }.to_not output.to_stdout
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'amazon linux server' do
|
20
|
+
let(:ssh_port) { 1124 }
|
21
|
+
it 'executes without printing any errors' do
|
22
|
+
expect { described_class.wait("localhost", "root", private_key_file, ssh_port) }.to_not output.to_stdout
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ami_spec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Robinson
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-08-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk
|
@@ -135,7 +135,17 @@ files:
|
|
135
135
|
- lib/ami_spec/wait_for_ssh.rb
|
136
136
|
- spec/ami_spec_spec.rb
|
137
137
|
- spec/aws_instance_spec.rb
|
138
|
+
- spec/containers/Dockerfile.amazon_linux
|
139
|
+
- spec/containers/Dockerfile.trusty
|
140
|
+
- spec/containers/Dockerfile.xenial
|
141
|
+
- spec/containers/README.md
|
142
|
+
- spec/containers/ami-spec
|
143
|
+
- spec/containers/ami-spec.pub
|
144
|
+
- spec/containers/docker-compose.yml
|
145
|
+
- spec/containers/rc.conf
|
146
|
+
- spec/containers/sshd_config
|
138
147
|
- spec/spec_helper.rb
|
148
|
+
- spec/wait_for_rc_spec.rb
|
139
149
|
- spec/wait_for_ssh_spec.rb
|
140
150
|
homepage: https://github.com/envato/ami-spec
|
141
151
|
licenses: []
|
@@ -163,5 +173,15 @@ summary: Acceptance testing your AMIs
|
|
163
173
|
test_files:
|
164
174
|
- spec/ami_spec_spec.rb
|
165
175
|
- spec/aws_instance_spec.rb
|
176
|
+
- spec/containers/Dockerfile.amazon_linux
|
177
|
+
- spec/containers/Dockerfile.trusty
|
178
|
+
- spec/containers/Dockerfile.xenial
|
179
|
+
- spec/containers/README.md
|
180
|
+
- spec/containers/ami-spec
|
181
|
+
- spec/containers/ami-spec.pub
|
182
|
+
- spec/containers/docker-compose.yml
|
183
|
+
- spec/containers/rc.conf
|
184
|
+
- spec/containers/sshd_config
|
166
185
|
- spec/spec_helper.rb
|
186
|
+
- spec/wait_for_rc_spec.rb
|
167
187
|
- spec/wait_for_ssh_spec.rb
|