Ansible
Jump to navigation
Jump to search
Install and Use
Using apt and older version
sudo apt install ansible sshpass
python3 -m venv venv source ansible/bin/activate # pip install -U pip pip install ansible pywinrm
inventory.yaml
all: vars: ansible_user: <myusername> ansible_password: <mypass> windows: hosts: winhost.example.com: vars: ansible_connection: winrm ansible_port: 5985 ansible_winrm_scheme: http # Recommend https if possible ansible_winrm_transport: ntlm ansible_winrm_server_cert_validation: ignore # Not recommended linux: hosts: linuxhost.example.com: vars: ansible_connection: ssh
https://www.vgemba.net/ansible/Ansible-WinRM-Workgroup/
ansible 'Windows' -m win_shell -i inventory.yaml -a 'pwd' ansible 'Linux' -i inventory.yaml -a 'pwd'
Run local script on remotes
ansible 'Windows' -m "script ./a.ps1" -i inventory.yaml
ansible myhost.example.com -a "pwd" --ask-pass
Use latest Python and Pip source
Or lets just use Python Source of latest, pip
#!/usr/bin/env bash set -e pipefail version='3.9.6' get() { sudo apt install -y build-essential checkinstall sudo apt install -y libreadline-gplv2-dev libncursesw5-dev libssl-dev \ libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev curl -LO https://www.python.org/ftp/python/$version/Python-$version.tgz tar xzf Python-$version.tgz } install() { cd Python-$version ./configure --prefix=/usr/local #./configure --prefix=/usr/local --enable-optimizations sudo make altinstall } get install
Install ansible in virtual env
python3.9 -m venv venv source ansible/bin/activate # pip install -U pip pip install ansible pywinrm
inventory.toml
[Windows] winhost.example.com [Windows:vars] ansible_user=<myuser> ansible_password=<mypass> ansible_connection=winrm # ansible_port=5985 # ansible_winrm_scheme=http ansible_port=5986 ansible_winrm_scheme=https ansible_winrm_server_cert_validation: ignore [Linux] linuxhost.example.com [Linux:vars] ansible_user=<my user> ansible_password=<my pass> ansible_connection=ssh
Presentations
https://www.vgemba.net/ansible/Ansible-WinRM-Workgroup/
No set inventory file to run script on remote
#!/usr/bin/env bash set -e # Create .env file with ANSIBLE_USER/PASSWORD using export then . .env if [ "$#" -ne 3 ]; then echo "Usage $0 <os type linux/windows> <hostname> <script>" echo "Example $0 windows myhost.example.com ./test.ps1" exit fi os=$1 host=$2 script=$3 inventory=$(mktemp tmp.inventory.XXXXX.yaml) ansible_user=${ANSIBLE_USER} ansible_password=${ANSIBLE_PASSWORD} if [[ "$os"=="windows" ]]; then windowshost="$host:" elif [[ "$os"=="linux" ]]; then linuxhost="$host:" else echo E: Unsupported os. Must be windows or linux. exit fi text=" all: vars: ansible_user: ${ansible_user} ansible_password: ${ansible_password} windows: hosts: ${windowshost} vars: ansible_connection: winrm ansible_port: 5985 ansible_winrm_scheme: http ansible_winrm_transport: ntlm ansible_winrm_server_cert_validation: ignore linux: hosts: $linuxhost vars: ansible_connection: ssh " echo "$text" > $inventory ansible "$host" -m "script $script" -i $inventory rm $inventory