[Linux]Ansible自動化運維② - 工具與模組

SkyBiuBiu發表於2021-10-09

參考:

一、Ansible的工具

1.1 Ansible的工作前提

image-20211008225502092

Ansible正常工作需要滿足兩個前提:

  1. 主控機與被控機都要開啟SSH服務
  2. 主控機與被控即都要裝有Python

1.2 Ansible的安裝檔案

[root@localhost /]# rpm -ql ansible | more
/etc/ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
/etc/ansible/roles
/usr/bin/ansible
/usr/bin/ansible-config
/usr/bin/ansible-connection
/usr/bin/ansible-console
/usr/bin/ansible-doc
/usr/bin/ansible-galaxy
/usr/bin/ansible-inventory
/usr/bin/ansible-playbook
/usr/bin/ansible-pull
/usr/bin/ansible-vault
--More--

通過 rpm -ql ansible | more 命令可檢視 Ansible的相關檔案:

/etc/ansible/ansible.cfg :預設ansible的預設配置檔案位置

/etc/ansible/hosts :預設inventory主機清單位置

/etc/ansible/roles:預設inventory角色位置

/usr/bin/ansible :ansible命令的檔案

/usr/lib/python3.6/site-packages/ansible:提供Python模組

/usr/share/man/man1/ :幫助文件

備註:RPM(紅帽軟體包管理器)。RPM 有點像Windows 系統中的控制皮膚,會建立統一的資料庫檔案,詳細記錄軟體資訊並能夠自動分析依賴關係。

1.3 Ansible的配置檔案

[root@localhost /]# grep "^\[" /etc/ansible/ansible.cfg
[defaults]
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]

以下是/etc/ansible/ansible.cfg中配置塊的含義:

[defaults]:預設常用配置

[inventory]:主機清單外掛

[privilege_escalation]:用於提權

[paramiko_connection]:Python paramiko模組的連線裝置(預設SSH)

[ssh_connection]:SSH連線設定

[persistent_connection]:長連線設定

[accelerate]:加速模式的配置

[selinux]:selinux設定

[colors]:輸出結果顏色的設定

[diff]:輸出不同的設定

1.4 Ansible的相關工具

[root@localhost /]# ansible
ansible             ansible-doc         ansible-pull
ansible-config      ansible-galaxy      ansible-vault
ansible-connection  ansible-inventory   
ansible-console     ansible-playbook 

輸入 ansible 然後雙擊Tab鍵

ansible:主程式,臨時命令執行工具

ansible-doc:用於檢視配置文件,模組功能

ansible-galaxy:用於上傳、下載Roles模組,需要網路

ansible-playbook:用於定製自動化任務,編排劇本的工具

ansible-pull:用於遠端執行命令的工具

ansible-vault:檔案加密工具

ansible-console:基於Console介面與使用者互動的執行工具

利用ansible實現管理的主要方式:

  1. 臨時命令使用場景 —> Ad-hoc
  2. 大型專案場景,有規劃過程 —> Ansible-playbook

1.4.1 【幫助工具】Ansible-doc

[root@localhost /]# ansible-doc -l | wc -l
3387

ansible-doc -l | wc -l :可以檢視ansible有多少個模組

ansible-doc -l | grep <module_name> :可以檢視相關的模組

ansible-doc <module_name> :可以檢視對應模組的詳細功能

1.4.2 【角色共享】Ansible-galaxy

  • Ansible-galaxy官網:Ansible Galaxy

    Galaxy中可以下載到寫好的Roles(Roles可以理解為Playbook的集合)

Galaxy安裝一個Nginx Rols的示例:

  1. 以Web類為例

image-20211009201055552

  1. 下載一個Nginx

image-20211009201158736

image-20211009201251326

  1. 通過命令ansible-galaxy install <module_name>安裝
[root@localhost /]# ansible-galaxy install geerlingguy.nginx

- downloading role 'nginx', owned by geerlingguy

- downloading role from https://github.com/geerlingguy/ansible-role-nginx/archive/3.1.0.tar.gz
- extracting geerlingguy.nginx to /root/.ansible/roles/geerlingguy.nginx
- geerlingguy.nginx (3.1.0) was installed successfully
  1. 安裝完之後,預設會放在使用者家目錄下的.ansible目錄中

預設放在:/root/.ansible/roles/<role_name>

[root@localhost geerlingguy.nginx]# pwd
/root/.ansible/roles/geerlingguy.nginx
  1. 會有以下的目錄及檔案

各個資料夾下檔案的作用後面補充

1.4.3 【劇本工具】Ansible-playbook

ansible-playbook <playbook_name> :用於執行寫好的劇本

1.4.4 【加密工具】Ansible-vault

ansible-vault encrypt <playbook_name>:加密Playbook

ansible-vault decrypt <playbook_name>:解密Playbook

ansible-vault view <playbook_name>:檢視加密的Playbook

ansible-vault edit <playbook_name>:編輯加密的Playbook

ansible-vault create <playbook_name>:建立新的加密的Playbook

加解密的示例:

  1. 一個未加密的 test.yml 檔案
    image-20211009203813324

  2. 將 test.yml 加密
    image-20211009204011619

1.4.5 【互動工具】Ansible-console

[root@localhost /]# ansible-console
Welcome to the ansible console.
Type help or ? to list commands.

root@all (2)[f:5]$ cd vm_group
root@vm_group (2)[f:5]$ ping
vm2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
vm1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
root@vm_group (2)[f:5]$ 

通過 ansible-console 工具,可以實現互動輸入命令

forks n:設定併發數

cd <host_group>:切換主機組

list:列出主機組列表

help&?:列出內建命令

ping:ping測試(當前主機組)

二、Ansible的模組

參考:

2.1 Ansible 模組簡介

我們可以通過 ansible-doc -l 檢視所有的模組。

通過 ansible-doc <module_name> 檢視指定模組的幫助資訊。

模組有兩種呼叫方式,一種通過ad-hoc命令列,另一種通過playbook呼叫。

第一種:ad-hoc 命令列

格式:ansible <host_group> -m <module_name> -a "key=value"

通過 -m 指定模組,通過 -a 指定引數(key=value的形式)

例如:

ansible webservers -m service -a "name=httpd state=started"
ansible webservers -m ping
ansible webservers -m command -a "/sbin/reboot -t now"

第二種:playbook 劇本

例如:

  1. 以簡單key:value的形式傳遞引數
- name: reboot the servers
  action: command /sbin/reboot -t now

​ 或者簡寫成:

- name: reboot the servers
  command: /sbin/reboot -t now
  1. 以yaml語法中的"complex args"傳遞引數
- name: restart webserver
  service:
    name: httpd
    state: restarted

2.2 Ansible 模組速查

Ansible中的模組種類有很多,如雲端計算類模組、叢集類模組、命令類模組、資料庫類模組、檔案類模組、訊息類模組、監控類模組等等。根據需求可以到網站中查詢模組的詳細說明。

至於一些常見的模組,後面專門整理一篇博文(✿◡‿◡)!

所有內建的模組都可以到上面的文件中查詢?

image-20211009210718193

2.3 共同的返回值

image-20211009212111619

2.3.1 Facts

一些模組返回"facts"(例如:setup模組),這些是通過一個"ansible_facts"作為key和內部一些自動收集的值直接作為當前主機的變數並且他們不需要註冊這些資料。

2.3.2 Status

每一個模組都必須返回一個status,來表示這個模組是成功的,是否有任何改變或者沒有發生改變。當檢查模式下發現模組不支援或者不滿足某些條件,Ansible自己會返回一個status並跳過這個模組。

2.3.3 其他的共同返回值

如msg,會被用來解釋執行失敗的原因或者是關於執行過程的一些說明。

相關文章