1. 程式人生 > >DEVOPS06 - Ansible概述、Playbook程式設計

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