Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

おめーだれねん?

Slide 3

Slide 3 text

おれは、関東人でも、 関西人でもないです。

Slide 4

Slide 4 text

貴様を倒すアメリカ県民だ

Slide 5

Slide 5 text

イアンです。

Slide 6

Slide 6 text

@IanMLewis

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

女性フレンドリー

Slide 11

Slide 11 text

連絡事項

Slide 12

Slide 12 text

21:30まで

Slide 13

Slide 13 text

Ansible とは?

Slide 14

Slide 14 text

An ansible is a fictional machine capable of instantaneous or superluminal communication.

Slide 15

Slide 15 text

\

Slide 16

Slide 16 text

Ansible is an IT automation tool

Slide 17

Slide 17 text

自動化

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

pip install ansible

Slide 21

Slide 21 text

ansible provisioning/site.yml

Slide 22

Slide 22 text

Ansibleの基本

Slide 23

Slide 23 text

SSH NODE1 NODE2 ... Ansible 女子です

Slide 24

Slide 24 text

●Playbook ●Inventory ●Module ●Role ●Task ●Handler 用語

Slide 25

Slide 25 text

Playbook

Slide 26

Slide 26 text

YAML

Slide 27

Slide 27 text

%YAML 1.2 --- YAML: YAML Ain't Markup Language What It Is: YAML is a human friendly data serialization standard for all programming languages.

Slide 28

Slide 28 text

--- - hosts: dbservers sudo: True roles: - common - mysql …

Slide 29

Slide 29 text

production # 本番環境のInventory stage # ステージング環境のInventory group_vars/ group1 # グループ変数 group2 # "" host_vars/ hostname1 # ホスト変数 hostname2 # "" site.yml # マスターPlaybook webservers.yml # ウェブサーバーのPlaybook dbservers.yml # DBサーバーのPlaybook

Slide 30

Slide 30 text

roles/ common/ # この下は”common”と言うロール tasks/ # main.yml # <-- ファイルを分割できます。 handlers/ # main.yml # <-- ハンドラー templates/ # <-- テンプレート ntp.conf.j2 # <------- ファイル拡張子は.j2 files/ # bar.txt # <-- コピーするファイル vars/ # main.yml # <-- このロールの変数

Slide 31

Slide 31 text

http://docs.ansible.com/playbooks_best_practices.html

Slide 32

Slide 32 text

Inventory

Slide 33

Slide 33 text

mail.example.com [webservers] foo.example.com bar.example.com [dbservers] one.example.com two.example.com three.example.com

Slide 34

Slide 34 text

SSH foo.example.com ... Ansible 女子です bar.example.com

Slide 35

Slide 35 text

Roles

Slide 36

Slide 36 text

roles/ common/ # この下は”common”と言うロール tasks/ # main.yml # <-- ファイルを分割できます。 handlers/ # main.yml # <-- ハンドラー templates/ # <-- テンプレート ntp.conf.j2 # <------- ファイル拡張子は.j2 files/ # bar.txt # <-- コピーするファイル vars/ # main.yml # <-- このロールの変数

Slide 37

Slide 37 text

Tasks

Slide 38

Slide 38 text

roles/ common/ # この下は”common”と言うロール tasks/ # main.yml # <-- ファイルを分割できます。 handlers/ # main.yml # <-- ハンドラー templates/ # <-- テンプレート ntp.conf.j2 # <------- ファイル拡張子は.j2 files/ # bar.txt # <-- コピーするファイル vars/ # main.yml # <-- このロールの変数

Slide 39

Slide 39 text

--- - name: Add the OS specific varibles include_vars: "{{ ansible_os_family }}.yml" - name: Install the required packages in Redhat derivatives yum: name={{ item }} state=installed with_items: ntp_pkgs when: ansible_os_family == 'RedHat' …

Slide 40

Slide 40 text

Modules

Slide 41

Slide 41 text

- name: reboot the servers command: /sbin/reboot -t now

Slide 42

Slide 42 text

Handlers

Slide 43

Slide 43 text

roles/ common/ # この下は”common”と言うロール tasks/ # main.yml # <-- ファイルを分割できます。 handlers/ # main.yml # <-- ハンドラー templates/ # <-- テンプレート ntp.conf.j2 # <------- ファイル拡張子は.j2 files/ # bar.txt # <-- コピーするファイル vars/ # main.yml # <-- このロールの変数

Slide 44

Slide 44 text

--- - name: restart ntp service: name={{ ntp_svc_name }} state=restarted enabled=yes

Slide 45

Slide 45 text

まとめ

Slide 46

Slide 46 text

Playbook Role Task Task … Role Task … Handler Inventory webservers dbservers

Slide 47

Slide 47 text

事例

Slide 48

Slide 48 text

MySQL

Slide 49

Slide 49 text

めんどくせー

Slide 50

Slide 50 text

https://github.com/bennojoy/ansible-roles/ tree/master/mysql

Slide 51

Slide 51 text

- name: Install the mysql packages in Debian derivatives apt: name={{ item }} state=installed update_cache=yes with_items: mysql_pkgs environment: env - name: Copy the my.cnf file template: - src: my.cnf.{{ ansible_os_family }}.j2 dest: {{ mysql_conf_dir }}/my.cnf notify: - restart mysql

Slide 52

Slide 52 text

- name: remove the test database mysql_db: name=test state=absent - name: Create the database's mysql_db: name={{ item.name }} state=present with_items: mysql_db when: mysql_db|lower() != 'none'

Slide 53

Slide 53 text

Primary

Slide 54

Slide 54 text

- name: Create the replication users mysql_user: - name: {{ item.name }} host: "%" password: {{ item.pass|default("foobar") }} priv: *.*:"REPLICATION SLAVE" state: present with_items: mysql_repl_user when: mysql_repl_role == 'master'

Slide 55

Slide 55 text

Replica

Slide 56

Slide 56 text

- name: Get primary servers replication status mysql_replication: mode=getmaster delegate_to: "{{ mysql_repl_master }}" register: repl_stat when: slave|failed and mysql_repl_role == 'slave' and mysql_repl_master is defined

Slide 57

Slide 57 text

- name: Change the master in slave mysql_replication: - mode: changemaster master_host: {{ mysql_repl_master }} master_log_file: {{ repl_stat.File }} master_log_pos: {{ repl_stat.Position }} master_user: {{ mysql_repl_user[0].name }} master_password: {{ mysql_repl_user[0].pass }} when:

Slide 58

Slide 58 text

- name: Start slave mysql_replication: mode=startslave ignore_errors: true when: mysql_repl_role == 'slave'

Slide 59

Slide 59 text

またまとめ

Slide 60

Slide 60 text

Playbook Role Task Task … Role Task … Handler Inventory webservers dbservers

Slide 61

Slide 61 text

Playbook copy my.cnf MASTER STATUS … Replica copy my.cnf … Restart mysql Inventory primaries replicas Primary SLAVE START

Slide 62

Slide 62 text

ありがとう

Slide 63

Slide 63 text

さいごに

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

@IanMLewis http://www.ianlewis.org/ どうも!