diff options
-rw-r--r-- | ansible/test/bin/.env | 14 | ||||
-rwxr-xr-x | ansible/test/bin/molecule.sh | 54 | ||||
-rwxr-xr-x | ansible/test/bin/set_molecule_paths.sh | 23 | ||||
-rw-r--r-- | ansible/test/molecule-docker/Dockerfile | 20 | ||||
-rwxr-xr-x | ansible/test/molecule-docker/build.sh | 32 |
5 files changed, 143 insertions, 0 deletions
diff --git a/ansible/test/bin/.env b/ansible/test/bin/.env new file mode 100644 index 00000000..d81bce59 --- /dev/null +++ b/ansible/test/bin/.env @@ -0,0 +1,14 @@ +# +# Define environment variables here that are visible for each Molecule run. +# Format is shell format. +# +# Alternative, env variables can be also defined specificly for certain role +# by creating .env.yml file (yml format) into role's directory from where also +# Molecule is run. Variables in this role specific .env.yml file will override +# variables in this file. +# + +# Passwords needed (when using molecule-dev container) to access localhost by ssh +#LOCALHOST_ANSIBLE_PASSWORD= +#LOCALHOST_ANSIBLE_SUDO_PASS= + diff --git a/ansible/test/bin/molecule.sh b/ansible/test/bin/molecule.sh new file mode 100755 index 00000000..d983ca08 --- /dev/null +++ b/ansible/test/bin/molecule.sh @@ -0,0 +1,54 @@ +#! /usr/bin/env bash + +# COPYRIGHT NOTICE STARTS HERE + +# Copyright 2019 © Samsung Electronics Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# COPYRIGHT NOTICE ENDS HERE + +SCRIPT_DIR=$(dirname "${0}") +LOCAL_PATH=$(readlink -f "$SCRIPT_DIR") +# main root dir in this git repo (relative to this script location) +ROOT_DIR=$(cd ${LOCAL_PATH}/../../../ && pwd)/ +PROJECT_ROOT_IN_CONTAINER=${PWD##${ROOT_DIR}} +# Make dir structure same in container to make localhost ssh actions to match same dirs +CONTAINER_ROOT=${ROOT_DIR} + +if [ "${PWD}" == "${PROJECT_ROOT_IN_CONTAINER}" ]; then + echo "Please run it under subdir of ${ROOT_DIR} directory" + exit 1 +fi + +env_params=(--env LOCALHOST_ANSIBLE_HOST=$(hostname -I | cut -f 1 -d ' ')) +env_params+=(--env LOCALHOST_ANSIBLE_USER=$(id -nu)) + +if [ -e "${LOCAL_PATH}/.env" ]; then + env_file="--env-file ${LOCAL_PATH}/.env" +fi + +MOLECULE_IMAGE=${MOLECULE_IMAGE:-molecule-dev} +MOLECULE_IMAGE_VERSION=${MOLECULE_IMAGE_VERSION:-2.20.0} +echo "Running molecule image: ${MOLECULE_IMAGE}:${MOLECULE_IMAGE_VERSION}" +MOLECULE_CMD=${MOLECULE_CMD:-molecule} +docker run --rm -it \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v ${ROOT_DIR}:${CONTAINER_ROOT}:rw \ + -w ${CONTAINER_ROOT}/${PROJECT_ROOT_IN_CONTAINER} \ + "${env_params[@]}" \ + ${env_file} \ + --name ${MOLECULE_IMAGE} \ + ${MOLECULE_IMAGE}:${MOLECULE_IMAGE_VERSION} \ + ${MOLECULE_CMD} "$@" + diff --git a/ansible/test/bin/set_molecule_paths.sh b/ansible/test/bin/set_molecule_paths.sh new file mode 100755 index 00000000..e237eb1b --- /dev/null +++ b/ansible/test/bin/set_molecule_paths.sh @@ -0,0 +1,23 @@ +#! /usr/bin/env bash + +# COPYRIGHT NOTICE STARTS HERE + +# Copyright 2019 © Samsung Electronics Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# COPYRIGHT NOTICE ENDS HERE +SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd) +LOCAL_PATH=$(readlink -f "$SCRIPT_DIR") + +export PATH=${LOCAL_PATH}:${PATH} diff --git a/ansible/test/molecule-docker/Dockerfile b/ansible/test/molecule-docker/Dockerfile new file mode 100644 index 00000000..e4207f2e --- /dev/null +++ b/ansible/test/molecule-docker/Dockerfile @@ -0,0 +1,20 @@ +FROM quay.io/ansible/molecule:2.20 + +ARG USER_ID +ARG GROUP_ID +ARG DOCKER_GROUP_ID + +# When user/group provided, create user to have matching ids (for the host user) +# to avoid this docker writing files as root owned +RUN if [ ${USER_ID:-0} -ne 0 ] && [ ${GROUP_ID:-0} -ne 0 ]; then \ + # shadow needed for addgroup + # sshpass needed for accessing docker_host (localhost) with ssh and without password prompt + apk --no-cache add shadow sshpass && \ + addgroup -g ${GROUP_ID} molecule && \ + adduser -D -u ${USER_ID} -G molecule molecule && \ + # Add user to same docker group as in docker_host to be able to use docker driver as sudo + groupadd docker-host -g ${DOCKER_GROUP_ID} && \ + usermod -aG ${DOCKER_GROUP_ID} molecule \ +;fi + +USER molecule diff --git a/ansible/test/molecule-docker/build.sh b/ansible/test/molecule-docker/build.sh new file mode 100755 index 00000000..0b65f2a7 --- /dev/null +++ b/ansible/test/molecule-docker/build.sh @@ -0,0 +1,32 @@ +#! /usr/bin/env bash + +# COPYRIGHT NOTICE STARTS HERE + +# Copyright 2019 © Samsung Electronics Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# COPYRIGHT NOTICE ENDS HERE + +SCRIPT_DIR=$(dirname "${0}") +LOCAL_PATH=$(readlink -f "$SCRIPT_DIR") + +set -e + +docker build \ + --build-arg USER_ID=$(id -u ${USER}) \ + --build-arg GROUP_ID=$(id -g ${USER}) \ + --build-arg DOCKER_GROUP_ID=$(getent group docker | cut -f 3 -d ':') \ + -t molecule-dev:2.20.0 \ + ${LOCAL_PATH} + |