Ansible for beginners ...?

4,630 views

Published on

Ansible for beginners...?

This presentation shows Ansible can not only Provisioning but also orchestration like capistrano or fabric.
Module is super easy to create by not only Python like shell, Ruby and so on.

Published in: Technology

Ansible for beginners ...?

  1. 1. Ansible for Beginners …? #pyfes 2013.11 in Tokyo by @r_rudi(しろう)
  2. 2. Ansible
  3. 3. Chef Puppet Salt cfengine juju …..
  4. 4. Provisioning Tool
  5. 5. by Lee Thompson at Velocity 2010
  6. 6. s n A le ib by Lee Thompson at Velocity 2010
  7. 7. Today’s Assumptions
  8. 8. Task - name: install python homeblew: name=python installs_options={{ option }} state=present
  9. 9. Task task name (optional) - name: install python arguments homeblew: name=python module name installs_options={{ option }} variables state=present status: uninstall if “absent” (depends on the module)
  10. 10. Playbook == A set of Tasks - hostname: name=AnsibleDemo - apt_repository: repo=’deb http://….’ - apt_key: url=http://….. Order
  11. 11. How to run % ansible-playbook hoge.yml -i inventory file (connection host list) -u username -k ssh pass -C check mode -D diff
  12. 12. OK Let' Go !
  13. 13. unarchive module - unarchive: src=blah.tar.gz dest=/tmp/ copy Remote unzip untar Local Remote
  14. 14. shell module - shell: foo.sh copy Remote Run Local Remote Run
  15. 15. ec2 - local_action: ec2 args: instance_type: c1.medium image: emi-329394 count: 3
  16. 16. Launch Instances module - Google Compute Engine - Digital Ocean - Linode - Rackspace - Docker :
  17. 17. Q: How many instances? - local_action: ec2 args: count: 3 - local_action: ec2 args: count: 3 - local_action: ec2 args: count: 3
  18. 18. Q: How many instances? - local_action: ec2 args: count: 3 - local_action: ec2 args: count: 3 - local_action: ec2 args: count: 3 9
  19. 19. Q: How many instances? - local_action: ec2 args: count: 3 - local_action: ec2 args: count: 3 - local_action: ec2 args: count: 3 9 idempotence ...?
  20. 20. ec2 elb - local_action: ec2_elb args: instance_id: “{{ ansible_ec2_instance_id }}” state: present
  21. 21. deploy !! - local_action: ec2_elb args: state=absent - nagios: action=disable_alert - git: repo=.... dest=/www version=release-11 - service: name=foo state=restarted - wait_for: port=8080 state=started :
  22. 22. rolling update - serial: 1 Remote - run only a server at a single time Remote Remote
  23. 23. Python API cause this is #pyfes
  24. 24. ansible + flask from ansible.inventory import Inventory from ansible.playbook import PlayBook from ansible import callbacks from flask import Flask, render_template import json app = Flask(__name__) @app.route("/play") def play(): inventory = Inventory('localhost.conf') stats = callbacks.AggregateStats() playbook_cb = callbacks.PlaybookCallbacks() runner_cb = callbacks. PlaybookRunnerCallbacks(stats) results = PlayBook(playbook='pyfes-demo. yml', forks=1, remote_user='shirou', sudo=False, module_path='module', callbacks=playbook_cb, runner_callbacks=runner_cb, stats=stats, inventory=inventory).run() return json.dumps(results)
  25. 25. AnsibleWorks AWX
  26. 26. Demo or Die
  27. 27. Web UI demo
  28. 28. True Demo: twilio module - shell script using Twilio API #!/usr/bin/env sh AccountSid=AAAAAAAAA AuthToken=07999999999999 curl -X POST 'https://api.twilio.com/2010-0401/Accounts/ACe0361e5b6236a8948191d08635bcd449/Calls.json' -d 'From=%2B822222222222' -d 'To=%2B81999999993' -d 'Url=http%3A%2F%2Fexample.com%2Fansible.html' -u ${AccountSid}:${AuthToken} echo "changed=True" exit 0
  29. 29. module creation - super easy - Write any script languages - unfortunately, golang is impossible - If you think it’s hard to write YAML, create module - auto execute if on the ./library
  30. 30. handler tasks: - template: src=/srv/hoge.j2 dest=/etc/hoge notify: - restart apache handlers: - name: restart apache service: name=httpd state=restarted
  31. 31. How many servers Ansible can manage?
  32. 32. We have users using Ansible in push mode against 5000 machines at a time
  33. 33. Accelarated mode - Launch daemon on server via SSH - Then, direct connection - terminate after playbook ends - 2-8x faster than SSH - hosts: all accelerate: true tasks: ...
  34. 34. Module introduction
  35. 35. Arista networks - 10G/40G/100G switch - login via ssh - python included
  36. 36. Arista modules - name: enable interface Ethernet 1 arista_interface: interface_id=Ethernet1 admin=up speed=10g duplex=full logging=true
  37. 37. DB - mongodb_user - mysql_db - mysql_replication - postgres_user - postgres_db - riak - redis
  38. 38. notification - irc - hipchat - jabber - mail - osx_say
  39. 39. Conclusion - Can use Ansible as Remote Execution Tool - So many modules - Easy to create module if ansible does’nt have - You don’t need Python - Fast enough to manage over 1k servers
  40. 40. Ansible Book - Release Nov. 2013 - cover wide area - especially, not included part this slide

×