diff --git a/docker/docker-run-ansible-playbook-local.sh b/docker/docker-run-ansible-playbook-local.sh index 81f1ebe..ee5e0ef 100755 --- a/docker/docker-run-ansible-playbook-local.sh +++ b/docker/docker-run-ansible-playbook-local.sh @@ -6,9 +6,10 @@ docker build docker \ -t ${IMAGE_NAME} docker run --rm \ - -e ANSIBLE_PLAYBOOK_INVENTORY=$ANSIBLE_PLAYBOOK_INVENTORY \ - -v ${VOLUME_PATH}:/workspace \ - $IMAGE_NAME + -e ANSIBLE_PLAYBOOK_INVENTORY="${ANSIBLE_PLAYBOOK_INVENTORY}" \ + -e ANSIBLE_PLAYBOOK_PRIVATE_KEY="${ANSIBLE_PLAYBOOK_PRIVATE_KEY}" \ + -e ANSIBLE_PLAYBOOK_REMOTE_USER="${ANSIBLE_PLAYBOOK_REMOTE_USER}" \ + -v ${VOLUME_PATH}:/workspace $IMAGE_NAME diff --git a/docker/scripts/run-ansible-playbook.py b/docker/scripts/run-ansible-playbook.py index 781da01..f626c86 100644 --- a/docker/scripts/run-ansible-playbook.py +++ b/docker/scripts/run-ansible-playbook.py @@ -1,29 +1,77 @@ import os import sys from ansible_runner import Runner, RunnerConfig +import subprocess +""" +https://docs.ansible.com/ansible/latest/cli/ansible-playbook.html + +usage: ansible-playbook [-h] [--version] [-v] [--private-key PRIVATE_KEY_FILE] + [-u REMOTE_USER] [-c CONNECTION] [-T TIMEOUT] + [--ssh-common-args SSH_COMMON_ARGS] + [--sftp-extra-args SFTP_EXTRA_ARGS] + [--scp-extra-args SCP_EXTRA_ARGS] + [--ssh-extra-args SSH_EXTRA_ARGS] + [-k | --connection-password-file CONNECTION_PASSWORD_FILE] + [--force-handlers] [--flush-cache] [-b] + [--become-method BECOME_METHOD] + [--become-user BECOME_USER] + [-K | --become-password-file BECOME_PASSWORD_FILE] + [-t TAGS] [--skip-tags SKIP_TAGS] [-C] [-D] + [-i INVENTORY] [--list-hosts] [-l SUBSET] + [-e EXTRA_VARS] [--vault-id VAULT_IDS] + [-J | --vault-password-file VAULT_PASSWORD_FILES] + [-f FORKS] [-M MODULE_PATH] [--syntax-check] + [--list-tasks] [--list-tags] [--step] + [--start-at-task START_AT_TASK] + playbook [playbook ...] +""" +def process_private_Keyfile(rc): + if(os.environ.get('ANSIBLE_PLAYBOOK_PRIVATE_KEY') is not None): + + with open("/root/ansible_private_key", 'w') as file: + file.write(os.environ.get('ANSIBLE_PLAYBOOK_PRIVATE_KEY')) + file.flush() + subprocess.run(['chmod', '600', '/root/ansible_private_key']) + rc.cmdline_args += "--private-key /root/ansible_private_key" + + elif (os.environ.get('ANSIBLE_PLAYBOOK_PRIVATE_KEY_FILE') is not None): + rc.cmdline_args += "--private-key " + os.environ.get('ANSIBLE_PLAYBOOK_PRIVATE_KEY_FILE') -def executePlaybook(): +def build_cmdLine_args(rc): + + if(rc.cmdline_args is None): + rc.cmdline_args="" + process_private_Keyfile(rc); + if(os.environ.get('ANSIBLE_PLAYBOOK_REMOTE_USER') is not None): + print(os.environ.get('ANSIBLE_PLAYBOOK_REMOTE_USER')) + rc.cmdline_args += " -u " + os.environ.get('ANSIBLE_PLAYBOOK_REMOTE_USER') + + +def execute_playbook(): + rc = RunnerConfig( private_data_dir="/workspace" ) rc.playbook=os.environ.get('ANSIBLE_PLAYBOOK', "site.yml") rc.inventory=os.environ.get('ANSIBLE_PLAYBOOK_INVENTORY', "127.0.0.1,") + build_cmdLine_args(rc) + if(rc.inventory=="127.0.0.1,"): - rc.cmdline_args= "--limit 127.0.0.1 --connection local" + rc.cmdline_args += "--limit 127.0.0.1 --connection local" + rc.prepare() + print(rc.generate_ansible_command()); r = Runner(config=rc) r.run() def main(): - executePlaybook() + execute_playbook() main() - -