17. September 2020
Ansible | Getting Started
Installation
Install Python 3
Install Ansible
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">pip install ansible
Setup virtual machines
In this example, we use Vagrant. But using docker is also a good choice
Create Vagrantfile
Change IP Address and Hostname for each virtual machine
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">Vagrant.configure("2") do |config|
config.vm.box = "hashicorp/bionic64"
config.vm.network "public_network", ip: "172.16.2.191", bridge: "en0: Ethernet"
config.vm.synced_folder "./data", "/DATA"
config.vm.hostname = "host1"
end
Start virtual machine
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">vagrant up
vagrant ssh
Configure virtual machine
Install required programm sshpass for running ansible commands as root on target machines.
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">sudo apt-get install sshpass
Setup SSH permissions
Create ssh key
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">ssh-keygen -t rsa
Add id_rsa_<user>.pub
to virtual machines into $HOME/.ssh
/authorized_keys
Setup config files
etc/ansible/hosts
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">ansible1
ansible2
ansible3
etc/ansible/ansible.cfg
Create Ansible configuration file in current directory with this content:
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">[defaults]
interpreter_python = auto
Ansible searches for configuration files in the following order, processing the first file it finds and ignoring the rest:
$ANSIBLE_CONFIG
if the environment variable is set.ansible.cfg
if it’s in the current directory.~/.ansible.cfg
if it’s in the user’s home directory./etc/ansible/ansible.cfg
, the default config file.
First Test
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title=""> ansible -i etc/ansible/hosts all -m ping -u vagrant
Set default Python version on Ubuntu
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">update-alternatives --install /usr/bin/python python /usr/bin/python3.6 1
Working with Playbooks
Create simple playbook
Create file httpd.yaml
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">---
- hosts: webservers
remote_user: ansible
tasks:
- name: Ensure apache is installed and updated
yum:
name: httpd
state: latest
become: yes
Run playbook
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">ansible-playbook -i etc/ansible/hosts httpd.yaml -kK
Troubleshooting
Allow SSH root login
<pre class="wp-block-preformatted">$ sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config