Download - Automate with Ansible basic (2/e)
[ chusiang@secret ~ ] $ cat .profile # Author: / chusiang.lai (at) gmail.com # Blog: http://note.drx.tw # Modified: 2017-03-09 15:54
2nd
• (@chusiang_lai)
• 1 Ansible
• Roles
• php7 (php-fpm)
• switch-apt-mirror
• vim-and-vi-mode
• zabbix-agent
2
3
OutlineI. IT
4
OutlineI. IT
II.
5
OutlineI. IT
II.
III. Ansible
6
OutlineI. IT
II.
III. Ansible
IV. Ansible
7
OutlineI. IT
II.
III. Ansible
IV. Ansible
V. Ansible
8
OutlineI. IT
II.
III. Ansible
IV. Ansible
V. Ansible
VI. Q & A
9
Ⅰ. IT
10
DevOps
IT
11
IT IT
(hr) 30 (min)
code code
( )
Ⅱ.
12
※ = Configuration management (CM)
" "
14
Ⅲ. Ansible
15
Ansible
Ender
- https://goo.gl/4xftZT16
Ansible
• Puppet, SaltStack, Chef (Infrastructure as Code)
DevOps
• Push Python SSH Angent
• Python
18
Ⅳ. Ansible
19
Ansible inventory Managed node SSH Python
20
Ansible• Control Machine Ansible Managed node
Python 2.5+ SSH
21
# Debian & Ubuntu (apt).$ sudo apt-get install ansible
# RHEL & CentOS (yum).$ sudo yum install ansible
# Mac OS X (homebrew). $ brew install ansible
# Python (pip).$ sudo pip install ansible
Ansible• ansible.cfg inventory (host file)
Managed node ( ) SSH …
22
$ vim ansible.cfg[defaults] # inventory hostfile = hosts
# remote_user = docker#private_key_file = ~/.ssh/id_rsa
# host_key_checking: ssh host_key_checking = False
inventory • Managed node ( )
ssh
23
$ vim hosts # ansible_ssh_host: SSH # ansible_ssh_port: SSH (Port)# ansible_ssh_user: SSH # ansible_ssh_private_key_file: SSH # ansible_ssh_pass: SSH ( )[dev]ansible-demo ansible_ssh_host=127.0.0.1 ansible_ssh_pass=pwd
[test]ansible-test ansible_ssh_host=172.10.10.1 ansible_ssh_port=2222
[prod]ansible-prod ansible_ssh_host=10.10.10.1 ansible_ssh_user=deploy
Ⅴ. Ansible
24
Ad-Hoc command, Playbook* (Module)
Ad-Hoc command
and
25
Playbook
Ad-Hoc command • ( ) command line
26
# command line
$ ping ansible-demo.localPING localhost (127.0.0.1): 56 data bytes64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.037 ms
--- localhost ping statistics ---1 packets transmitted, 1 packets received, 0.0% packet lossround-trip min/avg/max/stddev = 0.037/0.037/0.037/0.000 ms
$ echo Hello WorldHello World
Ad-Hoc command • Ansible -m
Module Index
27
# ansible < > -m < >
$ ansible all -m ping ansible-demo.local | SUCCESS => { "changed": false, "ping": "pong" }
$ ansible all -m command -a "echo Hello World"ansible-demo.local | SUCCESS | rc=0 >>Hello World
Playbooks
• Shell Script
• YAML code
• Play, Task, Module
• Jinja2 (template )
Baby Playbook Onesie - http://goo.gl/GKJvXn28
Playbooks • Playbook Play Tasks
• Play*1, Task*3 Module*3 (command, apt, lineinfile)
29
$ vim example.yml ---
- name: This is a Super-basic playbook. hosts: all tasks: - name: Hello World command: echo "Hello World"
- name: Install Vim & Emacs become: yes apt: name={{ item }} state=present with_items: - vim - emacs
# emacs - name: use vi-mode in readline become: yes lineinfile: dest=/etc/inputrc line="set editing-mode vi"
Playbooks • Playbook Play Tasks
• Play*1, Task*3 Module*3 (command, apt, lineinfile)
30
$ vim example.yml ---
- name: This is a Super-basic playbook. hosts: all tasks: - name: Hello World command: echo "Hello World"
- name: Install Vim & Emacs become: yes apt: name={{ item }} state=present with_items: - vim - emacs
# emacs - name: use vi-mode in readline become: yes lineinfile: dest=/etc/inputrc line="set editing-mode vi"
Play
Playbooks • Playbook Play Tasks
• Play*1, Task*3 Module*3 (command, apt, lineinfile)
31
$ vim example.yml ---
- name: This is a Super-basic playbook. hosts: all tasks: - name: Hello World command: echo "Hello World"
- name: Install Vim & Emacs become: yes apt: name={{ item }} state=present with_items: - vim - emacs
# emacs - name: use vi-mode in readline become: yes lineinfile: dest=/etc/inputrc line="set editing-mode vi"
Task 1
Task 2
Task 3
Playbooks • Playbook Play Tasks
• Play*1, Task*3 Module*3 (command, apt, lineinfile)
32
$ vim example.yml ---
- name: This is a Super-basic playbook. hosts: all tasks: - name: Hello World command: echo "Hello World"
- name: Install Vim & Emacs become: yes apt: name={{ item }} state=present with_items: - vim - emacs
# emacs - name: use vi-mode in readline become: yes lineinfile: dest=/etc/inputrc line="set editing-mode vi"
Module
Playbooks • example.yml playbook
33
$ ansible-playbook example.yml
PLAY [This is a Super-basic playbook.] *****************************************
TASK [setup] *******************************************************************ok: [ansible-demo.local]
TASK [Hello World] *************************************************************changed: [ansible-demo.local]
TASK [Install Vim & Emacs] *****************************************************changed: [ansible-demo.local] => (item=[u'vim', u'emacs'])
TASK [use vi-mode in readline] *************************************************changed: [ansible-demo.local]
PLAY RECAP *********************************************************************ansible-demo.local : ok=4 changed=3 unreachable=0 failed=0
Playbooks • example.yml playbook
34
$ ansible-playbook example.yml
PLAY [This is a Super-basic playbook.] *****************************************
TASK [setup] *******************************************************************ok: [ansible-demo.local]
TASK [Hello World] *************************************************************changed: [ansible-demo.local]
TASK [Install Vim & Emacs] *****************************************************changed: [ansible-demo.local] => (item=[u'vim', u'emacs'])
TASK [use vi-mode in readline] *************************************************changed: [ansible-demo.local]
PLAY RECAP *********************************************************************ansible-demo.local : ok=4 changed=3 unreachable=0 failed=0
Setup
(Recap)
Module
35
http://docs.ansible.com/ansible/list_of_commands_modules.html
Docs » commands Modules
yes
Practice
39
https://goo.gl/EYJ40O Control Machine*1 Managed node*2
Ansible Jupyter Managed node
40
Q & A
42
E N D