Ansible

Aus Alexander's Wiki

Ansible Terms

* Controller Machine: the machine where Ansible is installed, responsible for running the provisioning on the servers you are managing
* Inventory: an INI file that contains information about the servers you are managing
* Playbook: the entry point for Ansible provisionings, where the automation is defined through tasks using YAML format
* Task: a block that defines a single procedure to be executed, e.g.: install a package
* Module: a module typically abstracts a system task, like dealing with packages or creating and changing files. Ansible has a multitude of built-in modules, but you can also create custom ones
* Role: a pre-defined way for organizing playbooks and other files in order to facilitate sharing and reusing portions of a provisioning
* Play: a provisioning executed from start to finish is called a play
* Facts: global variables containing information about the system, like network interfaces or operating system
* Handlers: used to trigger service status changes, like restarting or stopping a service

Ansible provisionings are written using YAML, a simple data serialization language.

Installation (Ubuntu)

apt-get install software-properties-common
apt-add-repository ppa:ansible/ansible
apt-get update
apt-get install ansible

Installation (Manuell, Control machine)

git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible

source ./hacking/env-setup

apt-get install build-essential libssl-dev libffi-dev python-dev
apt-get install python-setuptools
easy_install pip

pip install paramiko PyYAML Jinja2 httplib2 six

Update (Manuell)

Beim Update von Ansible müssen auch die Submodule mit upgedated werden. Diese geschieht durch die beiden Befehle:

git pull --rebase
git submodule update --init --recursive

Benutzung

hosts

hinzufügen:

[servers]
10.200.5.117

group_vars

Damit ansible nicht den verwendeten Nutzer zum Anmelden am Remote verwendet:

  • mkdir /etc/ansible/group_vars
  • nano /etc/ansible/group_vars/servers
---
ansible_connection: ssh 
ansible_ssh_user: root
ansible_ssh_pass: vagrant

Test 1

  ansible -m ping servers

Shell

  ansible -m shell -a 'free -m' host1

playbook.yml

ansible-playbook playbook.yml --ask-sudo-pass

- hosts: all
  become: true
  vars:
     packages: [ 'hsm-base', 'hsm-sqlanywhere', 'hsm-sqlanywhere-config' ]
  tasks:
     - name: Install apt-https support
       apt: name=apt-transport-https state=latest

     - name: Set package repository
       shell: echo "deb [arch=amd64] http://10.200.5.115:9000/hsm-2.0.1-54/ HAGLEITNER_SM main" > /etc/apt/sources.list.d/byansible.list

     - name: Install pgp key
       shell: wget -O - https://*****:*****@hsmupdate.hagleitner.com/hsm-arm-ring0/conf/Linova.gpg.key | apt-key add -

     - name: Update apt
       apt: update_cache=yes

     - name: Install Package
       apt: name={{ item }} state=latest
       with_items: packages