# Use Ansible ## Run with docker ssh agent side proxy ### build docker images ```sh git clone -q --depth 1 --branch master https://github.com/arcodange/ssh-agent.git /tmp/ssh-agent (cd /tmp/ssh-agent ; docker build -t docker-ssh-agent:latest -f Dockerfile . ; rm -rf /tmp/ssh-agent) (cd ansible; docker build -t arcodange-ansible:0.0.0 .) ``` ### run in container ```sh # git clone -q --depth 1 --branch master https://github.com/arcodange/ssh-agent.git /tmp/ssh-agent # (cd /tmp/ssh-agent ; docker build -t docker-ssh-agent:latest -f Dockerfile . ; rm -rf /tmp/ssh-agent) # (cd ansible; docker build -t arcodange-ansible:0.0.0 .) docker run -d --name=ssh-agent docker-ssh-agent:latest docker run --rm --volumes-from=ssh-agent -v ~/.ssh:/.ssh -it docker-ssh-agent:latest ssh-add /root/.ssh/id_rsa docker run --rm -u root --name test --volumes-from=ssh-agent -v $PWD:/home/arcodange/code \ -v "$HOME"/.kube/config:/home/arcodange/.kube/config \ -e ANSIBLE_VAULT_PASSWORD_FILE=$ANSIBLE_VAULT_PASSWORD_FILE -v $ANSIBLE_VAULT_PASSWORD_FILE:$ANSIBLE_VAULT_PASSWORD_FILE \ arcodange-ansible:0.0.0 \ ansible-playbook ansible/arcodange/factory/playbooks/03_cicd.yml -i ansible/arcodange/factory/inventory -vv ``` ### use vault with single password > [!IMPORTANT] > Required for gitea mailer > ```sh > kubectl create secret generic arcodange-ansible-vault --from-literal="pass=" -n kube-system` > ``` > to be set as a file variable for gitea runners ```sh ANSIBLE_VAULT_PASSWORD_FILE=~/.local/bin/read-vault-key.sh; mkdir -p `dirname $ANSIBLE_VAULT_PASSWORD_FILE`; set +o histexpand; echo -e "#!/bin/bash\nkubectl get secret -n kube-system arcodange-ansible-vault --template='{{index .data.pass | base64decode}}'" > $ANSIBLE_VAULT_PASSWORD_FILE; set -o histexpand; chmod +x $ANSIBLE_VAULT_PASSWORD_FILE; echo "export ANSIBLE_VAULT_PASSWORD_FILE=$ANSIBLE_VAULT_PASSWORD_FILE" >> `find ~ -maxdepth 1 -type f -name '\.*profile' -or -name '\.bashrc' | head -n1` ``` ### a tool to reuse a ssh agent (not required) ```sh FIND_SSH_AGENT=$HOME/.local/bin/ssh-find-agent curl -s https://raw.githubusercontent.com/wwalker/ssh-find-agent/master/ssh-find-agent.sh > $FIND_SSH_AGENT chmod +x $FIND_SSH_AGENT echo 'ssh_find_agent "$@"' >> $FIND_SSH_AGENT which brew && brew install coreutils # if on macos ``` ```sh eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa ``` ## dev ### test an expression ```sh ansible -i ,localhost -c local localhost -m raw -a "echo hello world {{ inventory_hostname }} : {{ hostvars | to_nice_json | regex_replace(\"['\n]\",' ') }}" ``` ### local python environment with pipx #### add dependency - `pipx runpip ansible-core install dnspython`