YOU CAN (NOT)
Ansible Indonesia - MUM ID 2018
AUTOMATE
Ansible Indonesia - MUM ID 2018
VIM ♡ TMUX ♡ ARCH ♡ ANSIBLE
ansible.id l t.me/rshier l r@ansible.id
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
#ashenone
Ansible Indonesia - MUM ID 2018
ONCE UPON A TIME...
THERE'S AN FINAL EXAM
Ansible Indonesia - MUM ID 2018
VS
ME
PPL
CHOOSE YOUR FIGHTER
Ansible Indonesia - MUM ID 2018
OFFICIAL RECORD:
30 mins
HIDDEN RECORD:
5 mins
Ansible Indonesia - MUM ID 2018
VS
AUTOMATION
IBM MODEL M
INTENSIFIES
Ansible Indonesia - MUM ID 2018
#faker
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
[p-router]
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
[pe-router]
10.1.0.[1:3]
[p-router:vars]
ospf_area = backbone
ldp_enabled = yes
Ansible Indonesia - MUM ID 2018
---
- hosts: p-router
remote_user: admin
tasks:
- name: enable ospf
ospf: ...
- name: enable ldp
ldp: ...
- name: blah...
blah: ...
Ansible Indonesia - MUM ID 2018
#ansiblevor
Ansible Indonesia - MUM ID 2018
LINK 10.AB.0.AB/24
WHERE A = LOWER ID
B = HIGHER ID
E.G. 10.23.0.2/24
10.14.0.1/24
Ansible Indonesia - MUM ID 2018
MODULES
OSPF-
LDP -
BGP -
VRF -
Ansible Indonesia - MUM ID 2018
LOWER MODULE
DEPENDS ON
HIGHER MODULE
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
$ git clone https://github.com/ansible-id/mum18
.
├── group_vars/
├── host_vars/
├── playbooks/
├── templates/
├── ansible.cfg
├── inventory.py
├── LICENSE
└── README.md
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
subnet 10.0.0.0 netmask 255.0.0.0 {
range 10.255.255.1 10.255.255.254;
option subnet-mask 255.0.0.0;
}
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
#!/usr/bin/env python
from isc_dhcp_leases import IscDhcpLeases
from json import dump
from sys import stdout, argv
from collections import defaultdict
def get_lease():
leases = IscDhcpLeases('/var/lib/dhcp/dhcpd.leases')
return leases.get()
def get_group(name, delimiter):
pos = name.index(delimiter)
group = name[:pos]
return group
def generate_hosts():
leases = get_lease()
hosts = dict()
groups = dict()
for l in leases:
name = l.hostname
name = name.lower()
group = get_group(name, '-')
active = l.active and l.valid
ip = l.ip
if group not in groups.keys():
groups[group] = dict(hosts=[])
groups[group]['hosts'].append(name)
hosts[name] = dict(ansible_host=ip, active=active, group=group)
return {
'hosts': hosts,
'groups': groups
}
def generate_inventory():
inventory = generate_hosts()
groups = inventory['groups']
meta = dict(hostvars=inventory['hosts'])
return dict(**inventory['groups'], _meta=meta)
def main(argv):
result = generate_inventory()
if argv[1] == '--host' and argv[2]:
result = result['_meta']['hostvars'][argv[2]]
return dump(result, stdout)
if __name__ == '__main__':
main(argv)
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
[defaults]
inventory = ./inventory.py
host_key_checking = False
command_warnings = False
hash_behaviour = merge
log_path = ./ansible.log
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
---
ip:
- name: loopback
address: 3.3.3.3/32
- name: ether2
address: 10.13.0.3/24
- name: ether3
address: 10.23.0.3/24
- name: ether4
address: 10.35.0.3/24
bgp:
asn: 65500
peers:
- name: edge-4
address: 4.4.4.4
asn: 65500
af:
- vpnv4
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
/ip address
{% for i in ip %}
add address={{ i['address'] }} interface={{ i['name'] }} \
comment="ANSIBLE IS AWESOME!!" disabled=no
{% endfor %}
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
---
- hosts: all
gather_facts: no
connection: local
vars:
user: admin
output: ../outputs/{{ inventory_hostname }}
tasks:
- name: generate ip
template:
src: ../templates/ip.auto.rsc.j2
dest: "{{ output }}/ip.auto.rsc"
notify: upload ip
handlers:
- name: upload ip
shell: "curl -T {{ output }}/ip.auto.rsc ftp://{{ user }}@{{ansible_host}}"
Ansible Indonesia - MUM ID 2018
[insert some sorta march bgm here]
Ansible Indonesia - MUM ID 2018
$ ansible-playbook playbooks/....yml
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
ansible
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018
Ansible Indonesia - MUM ID 2018