Ansible
Revision as of 11:59, 25 March 2016 by Pio2pio (talk | contribs) (→Prepare environment for automation)
Ansible - management and configuration system
... watch the space :j
Install
apt-cache policy ansible | grep -A1 Installed # check version it will install sudo apt-get install ansible
Install dependencies manually
sudo apt-get install python python-setuptools python-crypto python-jinja2 python-paramiko python-pkg-resources python-yaml python python-httplib2 python-netaddr
Download a version from Ansible git repository you need
wget https://releases.ansible.com/ansible/ansible-1.9.4.tar.gz tar -xzvf ansible-1.9.4.tar.gz cd ansible-1.9.4/ sudo make sudo python setup.py install
Build VM with Vagrant
sudo apt-get install virtualbox
Then install Vagrant
Adhoc commands reference
--options ansible* host/-i hostfile -m modulename -a 'module arguments' -b (become) --ask-become-pass (-K in short) ansible local -m setup -a 'filter=ans*ipv4*' #filter facts ansible appsrv -m shell -a 'apt-get -y install lynx' -b --ask-become-pass #-s deprecated replaced by -b 'become' ansible appsrv -m apt -a 'pkg=lynx state=installed update_cache=true' -b -K ansible appsrv -m file -a 'path=/tmp/etc state=directory mode=0700 owner=root' #create directory ansible appsrv -m copy -a 'src=/etc/fstab dest=/tmp/etc/fstab' #copy a file to a remote system ansible appsrv -m command -a 'rm -rf /tmp/etc/fstab' #delete a file ansible appsrv -m service -a 'name=apache2 state=stopped' -u user -b -K #stop Ubuntu apache ansible appsrv -m apt -a 'name=apache2 state=absent' -b --ask-become-pass #removes package
Specify a user that ansible control server should connect as, a key also can be specified but not necessary
$ ansible centos -m ping -u username --private-key=~/.ssh/id_rsa
Copy a user ssh public key to remote server, if you do not specify a username, the current user will be used
ssh-copy-id username@server.com
Modules
shell
is not interactive, therefore 'apt-get install' requires -y flag. STDOUT is displayed on your terminal. The pipe and all redirections do work. Executes commands on a remote node.copy
- copies files from a local control server to remote nodefetch
- copies files from remote node to the local box
Get facts
Examples of the most common facts. It requires Python to be installed on a remote node
ansible awsweb -m setup -a 'filter=ansible_distr*' -u user --become --ask-become-pass ansible awsweb -m setup -a 'filter=ansible_fqdn' ansible awsweb -m setup -a 'filter=ansible_interfaces' ansible awsweb -m setup -a 'filter=ansible_kernel' ansible awsweb -m setup -a 'filter=ansible_mem*' ansible awsweb -m setup -a 'filter=ansible_proc*'
Prepare environment for automation
Make an ansible_service user to run sudo without password asked
sudo visudo piotr ALL=(ALL) NOPASSWD: ALL #user can run as root without password sudo -l #check your rules, last rule take precedence
Stop Ansible to require sudo password at each run
sudo vi /etc/ansible/ansible.cfg #ask_sudo_pass = True #needs to be commented out, otherwise works like --ask-become-pass
Install ansible_service user ssh_keys on local host
ssh-copy-id localhost ssh-copy-id localhost.localdomain
Reference
- Ansible installation
- My GitLab repository Linux Academy - Ansible training examples