DEVOPS06 - Ansible概述、Playbook程式設計
一、Ansible概述
1.1 安裝ansible
~ ] # pip3 install ansible
1.2 配置執行環境
1.2.1 建立ansible工作目錄
~]# mkdir /root/myansi/
1.2.2 建立配置檔案
~]# cd /root/myansi/
myansi]# cat ansible.cfg
[defaults]
inventory=hosts
remote_user=root
1.2.3 宣告被管理主機
myansi]# cat hosts
[db]
node1
[web]
node2
node3
1.2.4 配置名稱解析
myansi]# cat /etc/hosts
192.168.5.1 node1
192.168.5.2 node2
192.168.5.3 node3
1.2.5 新增遠端主機金鑰到信任列表
myansi]# ssh-keyscan 192.168.5.{1..3} node{1..3} >> /root/.ssh/known_hosts
實現所有主機免密登入的yaml檔案: --- - name: configure ssh key hosts: all tasks: - name: Set authorized key taken from file authorized_key: user: root state: present key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
1.3 測試ansible
myansi]# ansible all -m ping -k
二、Playbook程式設計
2.1 Yaml語法
1. 所有的 YAML 檔案開始行都應該是 ---。這是 YAML 格式的一部分,表明一個檔案的開始
2. 列表中的所有成員都開始於相同的縮排級別,並且使用一個 "- " 作為開頭(一個橫槓和一個空格)
3. 一個字典是由一個簡單的 鍵: 值 的形式組成(冒號後面必須是一個空格)
2.2 配置VIM
1. Yaml的縮排不能使用tab鍵
2. 建議縮排為兩個空格
3. 為了實現yml檔案按tab鍵縮排兩個空格,可以按以下方式對vim進行定製
autocmd FileType yaml setlocal sw=2 ts=2 et ai
2.3 使用模組
1. Ansible的模組實際上就是一個個的python程式檔案
2. Ansible執行任務就是通過呼叫這些模組來完成的
3. 檢視模組列表
[[email protected] myansi]# ansible-doc -l
4. 檢視模組幫助
[[email protected] myansi]# ansible-doc yum
2.4 編寫playbook
1. Playbook有兩個play
2. 一個play用於在web上安裝httpd,php,php-mysql,並啟動服務
3. 另一個play用於在db安裝並啟動mariadb服務
---
- name: install http php php-mysql
hosts: web
tasks:
- name: ensure a list of packages installed
yum:
name: "{{ packages }}"
vars:
packages:
- httpd
- php
- php-mysql
- name: Start service httpd, if not started
service:
name: httpd
state: started
enabled: yes
- name: install mariadb mariadb-server
hosts: db
tasks:
- name: install the latest version of Apache
yum:
name: httpd
state: latest
- name: Start service httpd, if not started
service:
name: httpd
state: mariadb
enabled: yes
2.5 執行playbook
1. 檢查語法
[[email protected] myansi]# ansible-playbook --syntax-check install_web.yml
2. 執行
[[email protected] myansi]# ansible-playbook install_web.yml -k
2.6 ansible-cmdb模組
1、安裝
# pip3 install ansible-cmdb
2、利用ansible收集主機資訊
[[email protected] myansi]# mkdir /tmp/ansi-cmdb
[[email protected] myansi]# ansible all -m setup --tree /tmp/ansi-cmdb/out/
3、利用ansible-cmdb生成html頁面
[[email protected] myansi]# ansible-cmdb /tmp/ansi-cmdb/out/ > /tmp/ansi-cmdb/hosts_info.html
[[email protected] myansi]# firefox /tmp/ansi-cmdb/hosts_info.html