触るAnsible
Ansible(_spec) 習得に成功する OpenStackのRoleも
Ansibleはサーバーの構成管理をする
- 前提
- ssh接続可能
- Python2インストール済 (普通されてる)
構成を作成し保持する
- Playbookの実行結果は、
- 失敗して「fatal」
- 変更した「changed」
- そのままで「ok」
- 最初は「changed」
- その後は何回流しても「ok」にする
- 目標
Commandモジュールは病
- 指定したコマンドを実行する子
- 「changed」または「fatal」のみ返却する
- いつも「ok」と返すようにするための回避策もある (それこそ無意味)
- name : "ruby check" command: "ruby --version" failed_when: False # 失敗(fatal)しても「ok」返す changed_when: False # 変更(changed)しても「ok」返す
チュートリアル
- Ansibleをはじめる人に
- 即刻やれる
- Ansible Tutorial
- serverspecも
私もやってみる
インストール
- Vagrantfile
Vagrant.configure(2) do |config| config.vm.define "controller" do |node| node.vm.box = "centos7_x64" node.vm.hostname = "controller" node.vm.network :private_network, ip: "192.168.101.100" node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2210 end config.vm.define "target" do |node| node.vm.box = "centos7_x64" node.vm.hostname = "target" node.vm.network :private_network, ip: "192.168.101.200" node.vm.network :forwarded_port, id: "ssh", guest: 80, host: 8000 node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2220 end end
# 前提 vagrant up vagrant status # running ssh -p 2210 root@127.0.0.1 # passwordは "vagrant" vagrant sshも可 Python --version # Python 2.7.5 # インストール yum install ansible ansible --version # ansible 2.4.2.0 # sudo su - # root化(vagrant ssh) umask # 0022 mkdir -p /work/ansible/test1 # Ansibleフォルダ(プロジェクトtest1用) cd /work/ansible/test1 echo 192.168.101.100 >hosts # hosts(Inventoryファイル)作成 echo 192.168.101.200 >hosts # ssh設定 ssh-keygen -t rsa # 秘密鍵作成 ssh-copy-id root@192.168.101.100 # 自分(controller)に秘密鍵送信 ssh-copy-id root@192.168.101.200 # targetに # 疎通 ansible -i hosts 192.168.101.100 -m ping # 自分(controller)にAnsibleからping送信 ansible -i hosts 192.168.101.200 -m ping # targetに ansible -i hosts 192.168.101.* -m ping # 両方に # ↑秘密鍵にパスワード指定している場合、1台ずつ入力待ちになって止まる ansible -i hosts 192.168.101.200 -m yum -s -a name=telnet # yumでtelnetを入れる # ----> SUCCESSとなり、"changed": trueになる # インストールされた ansible -i hosts 192.168.101.200 -m yum -s -a name=telnet # 再度 # ----> SUCCESSとなり、"changed": falseになる # 既にインストール済みの場合は何もしない
初Playbook
- hosts
[test-servers] 192.168.101.100 192.168.101.200
- Playbook : simple-playbook.yml
--- - hosts: test-servers become: yes tasks: - name: be sure httpd is installed yum: name=httpd state=installed - name: be sure httpd is running and enabled service: name=httpd state=started enabled=yes
become? Ansible1.9からはsudo/suの代わりにbecomeを使う
- 実行
ansible-playbook -i hosts simple-playbook.yml --syntax-check # syntaxチェックのみ ansible-playbook -i hosts simple-playbook.yml --list-tasks # taskリスト参照のみ ansible-playbook -i hosts simple-playbook.yml --check # dry-run ansible-playbook -i hosts simple-playbook.yml # 実行(changed) ansible-playbook -i hosts simple-playbook.yml # 実行(okに) service httpd status # runnning
- ホスト情報取る
ansible -m setup -i hosts 192.168.101.100 # 膨大なJSON
- Playbook修正1 : simple-playbook.yml 追記 ( # ADD )
--- - hosts: test-servers become: yes tasks: - name: be sure httpd is installed yum: name=httpd state=installed - name: be sure httpd is running and enabled service: name=httpd state=started enabled=yes - name: gathering data task example ## ADD command: echo {{ ansible_enp0s8.ipv4.address }} ## ADD ホスト情報取る
- 実行
ansible-playbook -i hosts simple-playbook.yml # IPv4を取得する (changed)
- Playbook修正2 : simple-playbook.yml 追記 ( # ADD2 )
--- - hosts: test-servers become: yes tasks: - name: be sure httpd is installed yum: name=httpd state=installed - name: be sure httpd is running and enabled service: name=httpd state=started enabled=yes - name: gathering data task example ## ADD command: echo {{ ansible_enp0s8.ipv4.address }} ## ADD ホスト情報取る failed_when: False # ADD2 fatal(失敗)の時もokを返す changed_when: False # ADD2 changed(変更)の時も
- 実行
ansible-playbook -i hosts simple-playbook.yml # IPv4を取得する (ok)
名前解決
[test-servers] # 192.168.101.100 --> controller controller 192.168.101.200
- ssh_config
Host controller User root HostName 192.168.101.100 IdentityFile ~/.ssh/id_rsa StrictHostKeyChecking no UserKnownHostsFile /dev/null
- ansible.cfg
[ssh_connection] ssh_args = -F ssh_config
同じフォルダに置く
/work/ansible |--test1 |--ansible.cfg |--simple-playbook.yml |--ssh_config |--hosts
- tree コマンドが無い環境で tree コマンドを実現 \(^o^)/
設定ファイル
パスワード秘匿する
- 大事
- Ansible-Vault
便利テンプレ
- Role使う
- Ansible-GALAXYにある
フォルダ構成
- 公式にあるベストプラクティスにする