ansible - a brief overview...cutting the strings and setting yourself free. why not puppet? very...

23
Ansible A brief overview Robin Long June 22, 2016 Robin Long (Lancaster University) Ansible June 22, 2016 1/1

Upload: others

Post on 27-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

AnsibleA brief overviewRobin LongJune 22, 2016

Robin Long (Lancaster University) Ansible June 22, 2016 1 / 1

Page 2: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Introduction

• How could we configure a server?• Manual install? - Slow• Shell scripts? - What is I run them a second time?• Configuration Managment? Many options here.

• What do you mean I need a server to setup a server?

Robin Long (Lancaster University) Ansible June 22, 2016 2 / 1

Page 3: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Why Ansible?

• Lightweight.• Simple.• It is its own documentation.• Forces better practises.

Robin Long (Lancaster University) Ansible June 22, 2016 3 / 1

Page 4: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Cutting the strings andsetting yourself free.

• Why not puppet?• Very complex, nested, unclear.• Need a server to setup a server.• Getting too big.• RedHat bought ansible.

Robin Long (Lancaster University) Ansible June 22, 2016 4 / 1

Page 5: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Ansible Requirements

• Needs very few dependencies:• Python• Jinja2• PyYAML• Paramiko• laptop

• Ansible just uses SSH, no need for servers, certificates andclient installs.

Robin Long (Lancaster University) Ansible June 22, 2016 5 / 1

Page 6: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Ansible Setup - Hosts file

• Ansible uses a very simple hosts file• default is /etc/ansible/hosts• pass a -i <inventory file> to ansible

[storage-nodes]stor[000:031].hec.lancs.ac.uk

[service-nodes]fal-pygrid-15.lancs.ac.ukfal-pygrid-30

[loki]py-loki.lancs.ac.uk:222

[norse]py-loki.lancs.ac.uk:222py-eir.lancs.ac.uk

Robin Long (Lancaster University) Ansible June 22, 2016 6 / 1

Page 7: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Ansible - Basic commands

• We can use ansible on the command line to issue basiccommands and tasks

$ ansible <host-pattern> [-f forks] [-m module_name] [-a args]$ ansible storage-nodes -m yum -a ‘‘name=httpd state=installed’’$ ansible storage-nodes -m service -a ‘‘name=httpd state=running enabled=yes’’

• ansible uses variables. System defaults called facts

$ ansible local -m setup

• use -u <user> if host and client differ.

Robin Long (Lancaster University) Ansible June 22, 2016 7 / 1

Page 8: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Ansible - Playbooks

• simple way to manage many machines.• Declare configurations and orchestrate complex processes• Uses YAML• Contain many different plays - each play is a task (install and

start running apache.)

Robin Long (Lancaster University) Ansible June 22, 2016 8 / 1

Page 9: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Ansible - Playbooks

---- hosts: webservers

vars:http_port: 80max_clients: 200remote_user: root

tasks:- name: ensure apache is at the latest version

yum: name=httpd state=latest- name: write the apache config file

template: src=/srv/httpd.j2 dest=/etc/httpd.confnotify:- restart apache

- name: ensure apache is running (and enable it at boot)service: name=httpd state=started enabled=yes

handlers:- name: restart apache

service: name=httpd state=restarted

Robin Long (Lancaster University) Ansible June 22, 2016 9 / 1

Page 10: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

PlaybooksSplitting long lines

---- hosts: webservers

vars:http_port: 80max_clients: 200remote_user: root

tasks:- name: ensure apache is at the latest version

yum:name: httpdstate: latest

- name: write the apache config filetemplate:

src: /srv/httpd.j2dest: /etc/httpd.conf

notify:- restart apache

- name: ensure apache is running (and enable it at boot)service:

name: httpdstate: startedenabled: yes

handlers:- name: restart apache

service:name: httpdstate: restarted

Robin Long (Lancaster University) Ansible June 22, 2016 10 / 1

Page 11: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Ansible - Playbooks

• execute by running

ansible-playbook playbook.yml -f 10

Robin Long (Lancaster University) Ansible June 22, 2016 11 / 1

Page 12: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Ansible - Roles

• we can include other playbooks in our main one with- include: servers.yml

• This allows more complex playbooks, and roles.• Roles are much the same as playbooks, just with added search

paths.

site.ymlstorage-servers.ymlroles/

common/files/templates/tasks/handlers/vars/defaults/meta/

storage-servers/...

Robin Long (Lancaster University) Ansible June 22, 2016 12 / 1

Page 13: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Ansible - Roles

• storage-servers.yml would then be:

---- hosts: webservers

roles:- common- storage-servers

Robin Long (Lancaster University) Ansible June 22, 2016 13 / 1

Page 14: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Variables, Jinja2,Conditionals and Loops

• Ansible variables can be used in playbooks and templates.• System created “facts” can be seen from running

ansible hostname -m setup• most useful with templates.• variables called in playbooks and tempates using

{{ variable_name }}• can filter variables using jinja2.

Robin Long (Lancaster University) Ansible June 22, 2016 14 / 1

Page 15: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

examples - loops I

# Install cvmfs and dependencies.- name: Install cvmfs and dependencies.

yum: name={{ item }} state=presentwith_items:- fuse- cvmfs- cvmfs-init-scripts

Robin Long (Lancaster University) Ansible June 22, 2016 15 / 1

Page 16: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

examples - loops II

# copy host cert and key to /etc/grid-security/- name: copy host cert and key to /etc/grid-security/

copy: src={{item.src}} dest={{item.dest}} mode={{item.mode}}with_items:- {src: ‘‘{{ host_cert }}’’, dest: /etc/grid-security/hostcert.pem, mode: ‘‘u=rw,g=r,o=r’’}- {src: ‘‘{{ host_key }}’’, dest: /etc/grid-security/hostkey.pem, mode: ‘‘u=r,g=,o=’’}

Robin Long (Lancaster University) Ansible June 22, 2016 16 / 1

Page 17: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

examples - template - file

# Automatically created by ansible# using the ansible-bdii-site role

SITEBDII ldap://{{ ansible_fqdn }}:2170/mds-vo-name=resource,o=grid{%if SITEURLS is defined %}{% for alias, url in SITEURLS.iteritems() %}{{ alias }} ldap://{{ url }}:2170/mds-vo-name=resource,o=grid{% endfor %}{% endif %}

Robin Long (Lancaster University) Ansible June 22, 2016 17 / 1

Page 18: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

examples - loops

---SITEURLS:

HEC: carceri.hec.lancs.ac.ukDPM: fal-pygrid-30.lancs.ac.uk

Robin Long (Lancaster University) Ansible June 22, 2016 18 / 1

Page 19: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

examples - loops

# Automatically created by ansible# using the ansible-bdii-site role

SITEBDII ldap://py-fjalar.hec.lancs.ac.uk:2170/mds-vo-name=resource,o=gridDPM ldap://fal-pygrid-30.lancs.ac.uk:2170/mds-vo-name=resource,o=gridHEC ldap://carceri.hec.lancs.ac.uk:2170/mds-vo-name=resource,o=grid

Robin Long (Lancaster University) Ansible June 22, 2016 19 / 1

Page 20: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

group variables

group_vars/allbdii-sitecvmfs-clientlokiservice-nodessquidstorage-nodesvac

Robin Long (Lancaster University) Ansible June 22, 2016 20 / 1

Page 21: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

group variables---# Variables here are applicable to the bdii-site groupSITE_NAME: UKI-NORTHGRID-LANCS-HEPSITE_COUNTRY: UKSITE_DESC: UKI-NORTHGRID-LANCS-HEPSITE_WEB: https://lancsgrid.wordpress.comSITE_LOC: Lancaster, UKSITE_LAT: 54.0105SITE_LONG: -2.784SITE_EMAIL: [email protected]_SECURITY_EMAIL: [email protected]_SUPPORT_EMAIL: [email protected]

OTHERINFO:- GRID=EGEE- GRID=GRIDPP- GRID=WLCG- GRID=NORTHGRID- TIER=2

SITEURLS:HEC: carceri.hec.lancs.ac.ukDPM: fal-pygrid-30.lancs.ac.ukRobin Long (Lancaster University) Ansible June 22, 2016 21 / 1

Page 22: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Collaborate?

• Time to share code?• https://github.com/lancsgrid/

• squid ( production )• bdii ( production )• cvmfs-client ( production )• argus ( in progress )

Robin Long (Lancaster University) Ansible June 22, 2016 22 / 1

Page 23: Ansible - A brief overview...Cutting the strings and setting yourself free. Why not puppet? Very complex, nested, unclear. Need a server to setup a server. Getting too big. RedHat

Robin LongJune 22, 2016