mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Add support for OS X CI on Shippable. (#17160)
This commit is contained in:
parent
92c6283e93
commit
a695e18615
5 changed files with 79 additions and 33 deletions
|
@ -8,6 +8,8 @@ matrix:
|
||||||
exclude:
|
exclude:
|
||||||
- env: TEST=none
|
- env: TEST=none
|
||||||
include:
|
include:
|
||||||
|
- env: TEST=remote TARGET=all PLATFORM=osx VERSION=10.11
|
||||||
|
|
||||||
- env: TEST=remote TARGET=all PLATFORM=freebsd VERSION=10.3-STABLE
|
- env: TEST=remote TARGET=all PLATFORM=freebsd VERSION=10.3-STABLE
|
||||||
|
|
||||||
- env: TEST=remote TARGET=ci_win1 PLATFORM=windows VERSION=2012-R2_RTM
|
- env: TEST=remote TARGET=ci_win1 PLATFORM=windows VERSION=2012-R2_RTM
|
||||||
|
|
|
@ -4,5 +4,6 @@ remote
|
||||||
[posix:vars]
|
[posix:vars]
|
||||||
ansible_connection=ssh
|
ansible_connection=ssh
|
||||||
ansible_host=@ansible_host
|
ansible_host=@ansible_host
|
||||||
|
ansible_port=@ansible_port
|
||||||
ansible_user=@ansible_user
|
ansible_user=@ansible_user
|
||||||
ansible_python_interpreter=/usr/local/bin/python2
|
ansible_python_interpreter=/usr/local/bin/python2
|
||||||
|
|
|
@ -285,6 +285,7 @@ def make_inventory(inventory_template, connection, instance_id):
|
||||||
inventory = template\
|
inventory = template\
|
||||||
.replace('@instance_id', instance_id)\
|
.replace('@instance_id', instance_id)\
|
||||||
.replace('@ansible_host', connection['hostname'])\
|
.replace('@ansible_host', connection['hostname'])\
|
||||||
|
.replace('@ansible_port', str(connection.get('port', 22)))\
|
||||||
.replace('@ansible_user', connection['username'])\
|
.replace('@ansible_user', connection['username'])\
|
||||||
.replace('@ansible_password', connection.get('password', ''))
|
.replace('@ansible_password', connection.get('password', ''))
|
||||||
|
|
||||||
|
@ -331,7 +332,7 @@ class HttpRequest:
|
||||||
return self.request('PUT', url, data, headers)
|
return self.request('PUT', url, data, headers)
|
||||||
|
|
||||||
def request(self, method, url, data=None, headers=None):
|
def request(self, method, url, data=None, headers=None):
|
||||||
args = ['/usr/bin/curl', '-s', '-i', '-X', method]
|
args = ['/usr/bin/curl', '-s', '-S', '-i', '-X', method]
|
||||||
|
|
||||||
if headers is not None:
|
if headers is not None:
|
||||||
for header in headers:
|
for header in headers:
|
||||||
|
|
|
@ -3,8 +3,7 @@
|
||||||
set -eux
|
set -eux
|
||||||
env
|
env
|
||||||
|
|
||||||
# TODO: add support for other posix environments
|
container="${PLATFORM}"
|
||||||
container=freebsd
|
|
||||||
build_dir="${HOME}/ansible"
|
build_dir="${HOME}/ansible"
|
||||||
|
|
||||||
test_target="${TARGET:-}"
|
test_target="${TARGET:-}"
|
||||||
|
@ -19,19 +18,23 @@ skip_tags='test_unarchive,test_service,test_postgresql,test_mysql_db,test_mysql_
|
||||||
|
|
||||||
cd ~/
|
cd ~/
|
||||||
|
|
||||||
# ssl certificate errors using fetch, so install curl
|
make="make"
|
||||||
pkg install -y curl
|
|
||||||
|
|
||||||
if [ ! -f bootstrap.sh ]; then
|
if [ "${container}" = "freebsd" ]; then
|
||||||
|
make="gmake"
|
||||||
|
|
||||||
|
pkg install -y curl
|
||||||
|
|
||||||
|
if [ ! -f bootstrap.sh ]; then
|
||||||
curl "https://raw.githubusercontent.com/mattclay/ansible-hacking/master/bootstrap.sh" -o bootstrap.sh
|
curl "https://raw.githubusercontent.com/mattclay/ansible-hacking/master/bootstrap.sh" -o bootstrap.sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
chmod +x bootstrap.sh
|
chmod +x bootstrap.sh
|
||||||
./bootstrap.sh pip -y -q
|
./bootstrap.sh pip -y -q
|
||||||
|
|
||||||
# tests require these packages
|
# tests require these packages
|
||||||
# TODO: bootstrap.sh should be capable of installing these
|
# TODO: bootstrap.sh should be capable of installing these
|
||||||
pkg install -y \
|
pkg install -y \
|
||||||
bash \
|
bash \
|
||||||
devel/ruby-gems \
|
devel/ruby-gems \
|
||||||
mercurial \
|
mercurial \
|
||||||
|
@ -40,6 +43,7 @@ pkg install -y \
|
||||||
subversion \
|
subversion \
|
||||||
sudo \
|
sudo \
|
||||||
zip
|
zip
|
||||||
|
fi
|
||||||
|
|
||||||
# TODO: bootstrap.sh should install these
|
# TODO: bootstrap.sh should install these
|
||||||
pip install \
|
pip install \
|
||||||
|
@ -59,8 +63,10 @@ ifconfig lo0
|
||||||
# Since tests run as root, we also need to be able to ssh to localhost as root.
|
# Since tests run as root, we also need to be able to ssh to localhost as root.
|
||||||
sed -i '' 's/^# *PermitRootLogin.*$/PermitRootLogin yes/;' /etc/ssh/sshd_config
|
sed -i '' 's/^# *PermitRootLogin.*$/PermitRootLogin yes/;' /etc/ssh/sshd_config
|
||||||
|
|
||||||
# Restart sshd for configuration changes and loopback aliases to work.
|
if [ "${container}" = "freebsd" ]; then
|
||||||
service sshd restart
|
# Restart sshd for configuration changes and loopback aliases to work.
|
||||||
|
service sshd restart
|
||||||
|
fi
|
||||||
|
|
||||||
# Generate our ssh key and add it to our authorized_keys file.
|
# Generate our ssh key and add it to our authorized_keys file.
|
||||||
# We also need to add localhost's server keys to known_hosts.
|
# We also need to add localhost's server keys to known_hosts.
|
||||||
|
@ -136,6 +142,14 @@ set -u
|
||||||
|
|
||||||
cd test/integration
|
cd test/integration
|
||||||
|
|
||||||
|
if [ "${container}" = "osx" ]; then
|
||||||
|
# FIXME: these test targets fail
|
||||||
|
sed -i '' 's/ test_gathering_facts / /;' Makefile
|
||||||
|
|
||||||
|
# FIXME: these tests fail
|
||||||
|
skip_tags="${skip_tags},test_iterators,test_template,test_git"
|
||||||
|
fi
|
||||||
|
|
||||||
# TODO: support httptester via reverse ssh tunnel
|
# TODO: support httptester via reverse ssh tunnel
|
||||||
|
|
||||||
rm -rf "/tmp/shippable"
|
rm -rf "/tmp/shippable"
|
||||||
|
@ -148,4 +162,4 @@ JUNIT_OUTPUT_DIR="/tmp/shippable/testresults" \
|
||||||
ANSIBLE_CALLBACK_WHITELIST=junit \
|
ANSIBLE_CALLBACK_WHITELIST=junit \
|
||||||
TEST_FLAGS="-e ansible_python_interpreter=/usr/local/bin/python2 --skip-tags '${skip_tags}' ${test_flags}" \
|
TEST_FLAGS="-e ansible_python_interpreter=/usr/local/bin/python2 --skip-tags '${skip_tags}' ${test_flags}" \
|
||||||
container="${container}" \
|
container="${container}" \
|
||||||
gmake ${test_target}
|
${make} ${test_target}
|
||||||
|
|
|
@ -32,6 +32,22 @@ else
|
||||||
test_auth="remote"
|
test_auth="remote"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
case "${test_platform}" in
|
||||||
|
"windows")
|
||||||
|
ci_endpoint="https://14blg63h2i.execute-api.us-east-1.amazonaws.com"
|
||||||
|
;;
|
||||||
|
"freebsd")
|
||||||
|
ci_endpoint="https://14blg63h2i.execute-api.us-east-1.amazonaws.com"
|
||||||
|
;;
|
||||||
|
"osx")
|
||||||
|
ci_endpoint="https://osx.testing.ansible.com"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "unsupported platform: ${test_platform}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
env
|
env
|
||||||
|
|
||||||
case "${test_platform}" in
|
case "${test_platform}" in
|
||||||
|
@ -56,7 +72,7 @@ function cleanup
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${keep_instance}" = '' ]; then
|
if [ "${keep_instance}" = '' ]; then
|
||||||
"${source_root}/test/utils/shippable/ansible-core-ci" -v stop "${instance_id}"
|
"${source_root}/test/utils/shippable/ansible-core-ci" --endpoint "${ci_endpoint}" -v stop "${instance_id}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "instance_id: ${instance_id}"
|
echo "instance_id: ${instance_id}"
|
||||||
|
@ -66,7 +82,7 @@ trap cleanup EXIT INT TERM
|
||||||
|
|
||||||
if [ ${start_instance} ]; then
|
if [ ${start_instance} ]; then
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
"${source_root}/test/utils/shippable/ansible-core-ci" -v \
|
"${source_root}/test/utils/shippable/ansible-core-ci" --endpoint "${ci_endpoint}" -v \
|
||||||
start --id "${instance_id}" "${test_auth}" "${test_platform}" "${test_version}" ${args}
|
start --id "${instance_id}" "${test_auth}" "${test_platform}" "${test_version}" ${args}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -94,7 +110,7 @@ case "${test_platform}" in
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
"${source_root}/test/utils/shippable/ansible-core-ci" -v \
|
"${source_root}/test/utils/shippable/ansible-core-ci" --endpoint "${ci_endpoint}" -v \
|
||||||
get "${instance_id}" \
|
get "${instance_id}" \
|
||||||
--template "${inventory_template}" \
|
--template "${inventory_template}" \
|
||||||
> "${inventory_file}" \
|
> "${inventory_file}" \
|
||||||
|
@ -123,13 +139,17 @@ test_windows() {
|
||||||
}
|
}
|
||||||
|
|
||||||
test_remote() {
|
test_remote() {
|
||||||
endpoint=$("${source_root}/test/utils/shippable/ansible-core-ci" get \
|
endpoint=$("${source_root}/test/utils/shippable/ansible-core-ci" --endpoint "${ci_endpoint}" get \
|
||||||
"${instance_id}" \
|
"${instance_id}" \
|
||||||
--template <(echo "@ansible_user@@ansible_host"))
|
--template <(echo "@ansible_user@@ansible_host"))
|
||||||
|
ssh_port=$("${source_root}/test/utils/shippable/ansible-core-ci" --endpoint "${ci_endpoint}" get \
|
||||||
|
"${instance_id}" \
|
||||||
|
--template <(echo "@ansible_port"))
|
||||||
|
|
||||||
(
|
(
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
env \
|
env \
|
||||||
|
PLATFORM='${test_platform}' \
|
||||||
REPOSITORY_URL='${REPOSITORY_URL:-}' \
|
REPOSITORY_URL='${REPOSITORY_URL:-}' \
|
||||||
REPO_NAME='${REPO_NAME:-}' \
|
REPO_NAME='${REPO_NAME:-}' \
|
||||||
PULL_REQUEST='${PULL_REQUEST:-}' \
|
PULL_REQUEST='${PULL_REQUEST:-}' \
|
||||||
|
@ -147,16 +167,24 @@ cat <<EOF
|
||||||
put "${source_root}/test/utils/shippable/remote-integration.sh" "/tmp/remote-integration.sh"
|
put "${source_root}/test/utils/shippable/remote-integration.sh" "/tmp/remote-integration.sh"
|
||||||
put "/tmp/remote-script.sh" "/tmp/remote-script.sh"
|
put "/tmp/remote-script.sh" "/tmp/remote-script.sh"
|
||||||
EOF
|
EOF
|
||||||
) | sftp -b - -o StrictHostKeyChecking=no "${endpoint}"
|
) | sftp -b - -o StrictHostKeyChecking=no -P "${ssh_port}" "${endpoint}"
|
||||||
|
|
||||||
pre_cleanup=test_remote_cleanup
|
pre_cleanup=test_remote_cleanup
|
||||||
|
|
||||||
ssh "${endpoint}" \
|
case "${test_platform}" in
|
||||||
"su -l root -c 'chmod +x /tmp/remote-script.sh; /tmp/remote-script.sh'"
|
"osx")
|
||||||
|
become="sudo -i PATH=/usr/local/bin:\$PATH"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
become="su -l root -c"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ssh -p "${ssh_port}" "${endpoint}" "${become}" "'chmod +x /tmp/remote-script.sh; /tmp/remote-script.sh'"
|
||||||
}
|
}
|
||||||
|
|
||||||
test_remote_cleanup() {
|
test_remote_cleanup() {
|
||||||
scp -r "${endpoint}:/tmp/shippable" "${source_root}"
|
scp -r -P "${ssh_port}" "${endpoint}:/tmp/shippable" "${source_root}"
|
||||||
}
|
}
|
||||||
|
|
||||||
"${test_function}"
|
"${test_function}"
|
||||||
|
|
Loading…
Reference in a new issue