38
Extending Ansible When you want some more of your favorite tool Ansible Benelux meetup, 11-02-2016 Amsterdam, Sentia Pavel Chunyayev

Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

Embed Size (px)

Citation preview

Page 1: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

Extending AnsibleWhen you want some more of your favorite tool

Ansible Benelux meetup, 11-02-2016Amsterdam, Sentia

Pavel Chunyayev

Page 2: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Amsterdam

Levi9 HQAmsterdam – 2005

25 people

Novi Sad

SerbiaNovi Sad – 2005

320+ people

Zrenjanin

SerbiaZrenjanin– 2014

30+ people

Iasi

RomaniaIasi – 200780+ people

Kiev

UkraineKiev – 2008130+ people

Page 3: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Electronic Retail

DigitalMarketing

Traffic and Transport

Software Services

Page 4: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Customer satisfaction 2015

• 4th year great results in Outsourcing Performance study

• 2015: 100% customer recommendation scoreExcellent trust score

Page 5: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

About me• 12 years of IT experience• Lived and worked in Ukraine and Estonia • Moved a year and half ago to the Netherlands

• Learning Dutch• Love cycling

• De Hollandse 100 - https://www.dehollandse100.nl/actie/pavel-chunyayev• Alpe d’HuZes - http://deelnemers.opgevenisgeenoptie.nl/levi9

Page 6: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

Continuous Delivery

* I had to talk about Continuous Delivery shortly. I’m Continuous Delivery Architect after all.

Page 7: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

Safely, rapidly and predictably deliver new features to production

Page 8: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Continuous Delivery

• Faster time to market

• How many deployments a day?

• Time between committing line of code and running in

production

Page 9: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

It’s not only about speed

Page 10: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

It’s not only about speed•Right process to support continuous feature delivery,

improvements and learning.

•Proper testing to be able to deliver at high speed.

Page 11: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

Quality > Speed

Page 12: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

Continuous DeliveryBuild • Test • DeployAnsible is perfect for Continuous DeliveryEspecially with immutable infrastructure

Page 13: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016
Page 14: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

Ansible is powerful out of the boxExtremely easy to extend

Page 16: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Extending Ansible• Dynamic inventory• Plugins• Modules• Python API

Page 17: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

Dynamic inventory

Page 18: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Dynamic inventory• http://docs.ansible.com/ansible/developing_inventory.html• http://docs.ansible.com/ansible/intro_dynamic_inventory.html

• Just a script that returns JSON dictionary of all the groups• Numerous dynamic inventory scripts: https://

github.com/ansible/ansible/tree/devel/contrib/inventory• AWS, Azure, GCE, Digital Ocean, Docker, Openstack, Jails, Zabbix• VMware, Virtualbox, Nagios, oVirt, Consul, etc.

Page 19: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

More dynamic inventories?• Combining several service providers• SNMP • LDAP• Sentia :)

Page 20: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Ideas for dynamic inventories generated during meetup• SIDN• CMDB• nmap• DNS (scan to identify inventory)• Network inventory• Ssh host config (from files)• Bonjour / ZeroConf• DHCP server• Racktables (or similar services)

Page 21: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

Plugins

Page 23: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Callback plugins• React on certain events during

Ansible execution

• Some existing:• OS X say• HipChat• Mail• Syslog JSON• Timer

• More?

• Send logs to ELK• Send metrics to Grafana• Leave audit trails• Slack• IRC

Page 24: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Ideas for callback plugins generated during meetup• Tags (assign tags based on execution)• Backup (additional step before changing something)• Change output• Nagios (or general notification to monitoring systems)

Page 25: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Connection plugins• More ways to connect to remote

systems

• Some existing:• Docker• chroot• WinRM• Jail• LXC

• More?

• Someone using anything besides SSH? :)• SNMP• SSH gateway• Multifactor authentication

Page 26: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Filter plugins• Jinja2 filters to use

• Some existing:• Various sets manipulations (math)• IP addresses manipulations• String manipulations• to / from JSON

• More?

• Test is the string is a valid running AWS EC2 instance• Convert AWS instance id into

instance name (IP, DNS name, etc)

Page 27: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Ideas for connection plugins generated during meetup• telnet• RADIUS• WebDAV / HTTP• mosh • Serial• IPMI

Page 28: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Lookup plugins• Constructs like with_items:

• Some interesting existing• consul• dict• dig• etcd• redis• etc.

• More?

• RDBMS• LDAP• DNS (IN SRV)

Page 29: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Ideas for lookup plugins generated during meetup• Mongo• Monitoring (e.g. top 10 hosts with problems)• ElasticSearch• Netstat (services or routing tables)• Multicast• IPtables / other firewalls• Vnstat• /etc/password (not a generic file lookup)

Page 30: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Strategy plugins• How to execute tasks in

playbook

• Existing:• Linear• Free

• More?

• Random• Some tasks free, some linear

Page 31: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Ideas for strategy plugins generated during meetup• One host, one task at a time• Scoring (calculate the sequence based on the score)

Page 32: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

Modules

Page 33: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Modules• http://docs.ansible.com/ansible/developing_modules.html• Reusable units of magic that can be used by the Ansible API, or by the ansible or ansible-playbook programs.

• Reading official modules is a good way to start• Test your module with hacking/test-module script• Create pull request to modules-extra

Page 34: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Modules?• Deploying your applications• Configuring running applications• Maven (manage artifacts)• Usage of less popular applications• LDAP manipulation / credentials checking• All those AWS services that are not yet covered by modules• Custom backup• Pipelines as code

Page 35: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

Ansible API

Page 36: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Execute Ansible programmatically • Trigger Ansible run or Ansible-playbook from your application!

• React to some events with running Ansible playbook• Get facts about infrastructure directly from an application• Your own Infrastructure as a Service

Page 37: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Extending Ansible

•Dynamic inventory

•Plugins

•Modules

•Python API

Page 38: Extending Ansible - Ansible Benelux meetup - Amsterdam 11-02-2016

@PavelChunyayev

Takeaways• Ansible is a perfect tool• Easily extendable when needed• Don’t be afraid to extend Ansible• Don’t forget to return code to community

• Participate in Ansible Coder’s Dojo

[email protected]

Any questions?