49
アンシブルってなんだろ う? フジエカズヒ サイコロ② 本完全制覇 2015/8/4

What is an Ansible?

Embed Size (px)

Citation preview

  1. 1. 2015/8/4
  2. 2. 2
  3. 3. Michael DeHaan 3
  4. 4. LinuxPython SSH Python 2.6 or 2.7 Python 3 Ansible 2.x Windows Cygwin Python 2.4 or later 2.5 python-simplejson 4
  5. 5. 5 1. ssh 3. execute command 2. sftp (send task) 4. result [control machine] [managed node]
  6. 6. 6 [control machine] [managed nodes]
  7. 7.
  8. 8. (PIP) Mac OS X, BSDs $ sudo easy_install pip Python 2.7.9 and later include pip by default $ sudo pip install ansible 8
  9. 9. (YUM) CentOS, RHEL, or Scientific Linux $ sudo yum install ansible 9
  10. 10. (APT) Ubuntu $ sudo apt-get install software-properties-common $ sudo apt-add-repository ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install ansible 10
  11. 11. $ ansible version ansible 1.9.2 11
  12. 12. Inventory Playbook 12
  13. 13. /etc/ansible/hosts ANSIBLE_HOSTS (-i) YAML INI INI (Behavioral Inventory Parameters) 13
  14. 14. [webservers] foo.example.com bar.example.com [dbservers] one.example.com two.example.com three.example.com 14 [webservers] www[01:50].example.com [databases] db-[a:f].example.com
  15. 15. (ANSIBLE) Synopsis: $ ansible [-f forks] [-m module_name] [-a args] example: $ ansible all -m ping $ ansible webserver* -m ping $ ansible webservers:dbservers -m ping $ ansible webservers:!webserver01 -m ping 15
  16. 16. (ANSIBLE) $ ansible webserver01 -m ping webserver01 | success >> { "changed": false, "ping": "pong" } 16
  17. 17. 17 Python PythonShellScript YAML YAML plays
  18. 18. target hosts vars tasks 18
  19. 19. --- - hosts: dbservers user: root tasks: - name: install mysql yum: name=mysql state=installed 19
  20. 20. (ANSIBLE-PLAYBOOK) Synopsis: $ ansible-playbook [-f forks] [-i inventory] [--check] [--check] : dry-run option [--syntax-check] : YAML syntax check option $ ansible-playbook mysql.yml 20
  21. 21. (ANSIBLE-PLAYBOOK) $ ansible-playbook mysql.yml PLAY [dbservers] ********************************************************* GATHERING FACTS ******************************************************* ok: [192.168.100.101] TASK: [install mysql] ******************************************************* changed: [192.168.100.101] PLAY RECAP ************************************************************** 192.168.100.101 : ok=2 changed=1 unreachable=0 failed=0 21
  22. 22. --- - hosts: dbservers user: root tasks: - name: install mysql yum: name=mysql state=installed - name: install mysql-server yum: name=mysql-server state=installed - name: install mysql-devel yum: name=mysql-devel state=installed 22
  23. 23. --- - hosts: dbservers user: root tasks: - name: install mysql packages yum: name=$item state=installed with_items: - mysql - mysql-server - mysql-devel 23
  24. 24. include roles conditionals when loop 24 tags prompts error handling
  25. 25.
  26. 26. Core Modules Extras Modules Core 26
  27. 27. Cloud Modules Clustering Modules Commands Modules Database Modules Files Modules Inventory Modules Messaging Modules 27 Monitoring Modules Network Modules Notification Modules Packaging Modules Source Control Modules System Modules Utilities Modules Web Infrastructure Modules Windows Modules
  28. 28. copy file yum yumtemplate synchronize rsync 28
  29. 29. service servicecommand shell , | , & shellshell (/bin/sh)mysql_db MySQL mysql_user MySQL 29
  30. 30. --- - name: be sure mysql-server is installed yum: name={{ item }} state=installed with_items: - mysql-server - MySQL-python tags: mysqld - name: be sure mysqld is running and enabled service: name=mysqld state=running enabled=yes tags: mysqld 30 - name: Create database mysql_db: db={{ dbname }} state=present encoding=utf8 tags: mysqld - name: Create database user mysql_user: > name={{ dbuser }} password="{{ dbpassword }}" priv={{ dbname }}.*:ALL state=present tags: mysqld
  31. 31. Python Python key=valueJSON 31
  32. 32. #!/usr/bin/python import datetime import json date = str(datetime.datetime.now()) print json.dumps({ "time" : date }) 32
  33. 33.
  34. 34. Puppet Chef Salt Fabric + Cuisine Ansible 34
  35. 35. 35 author or
  36. 36. 36 2005Luke Kanies Ruby Puppet Labs DSLRuby Puppet Forge
  37. 37. 37 2009Adam Jacob Ruby chef-client Erlang Erchef Chef Opescode DSLRuby Chef Supermarket
  38. 38. 38 PythonChef 2011Thomas S Hatch Python Saltstack YAML or DSLPython
  39. 39. 39 Fabric 2011Jeff Forcier, FabricSbastien Pierre, Cuisine Ruby DSLPythonFabric
  40. 40. 2012Michael DeHaan Python Ansible YAML Ansible Galaxy 40
  41. 41. 41 CONFIGURATION MANAGEMENT
  42. 42.
  43. 43. Ansible is used by Atlassian, Twitter, OneKingsLane, Evernote, TrunkClub, edX, hootsuite, GoPro, NewsCred, and Care.com, among others. (from wikipedia) 43
  44. 44. Lightweight Language, Python, Perl, PHP, Ruby DSL (Domain Specific Language) DSL YAML JSON JSON 44
  45. 45. Disposable Infrastructure Immutable Infrastructure Infrastructure as Code SOASOA 45
  46. 46.
  47. 47. An ansible is a fictional machine capable of instantaneous or superluminal communication. S.F. Ursula K. Le Guin in her 1966 novel Rocannons World 1st of Hainish Cycle series Welcome to Ansible Galaxy https://galaxy.ansible.com/ 47
  48. 48. ANSIBLE http://docs.ansible.com/ 1.9.2 "Dancing In the Street" - Jun 26, 2015 Release Van Halen 1.8 "You Really Got Me, 1.7 "Summer Nights, 1.6 "And the Cradle Will Rock, 1.0 "Eruption" 48
  49. 49. Jinja2 Python Temple, Shinto shrine Welcome to Jinja2 http://jinja.pocoo.org/docs/dev/ 49