Ansible的安裝及經常使用模塊

簡介

Ansible 基於 Python 語言實現,由 Paramiko 和 PyYAML 兩個關鍵模塊構建。html

Ansible 特色:

一、部署簡單,只需在主控端部署 Ansible 環境,被控端無需作任何操做。
二、默認使用 SSH(Secure Shell)協議對設備進行管理。
三、主從集中化管理。
四、配置簡單、功能強大、擴展性強。
五、支持 API 及自定義模塊,可經過 Python 輕鬆擴展。
六、經過 Playbooks 來定製強大的配置、狀態管理。
七、對雲計算平臺、大數據都有很好的支持。
八、提供一個功能強大、操做性強的 Web 管理界面和 REST API 接口 —- AWX 平臺。python

 

Ansible 與 SaltStack:

一、最大的區別是 Ansible 無需在被監控主機部署任何客戶端代理,默認經過 SSH 通道進行遠程命令執行或下發配置。
二、相同點是都具有功能強大、靈活的系統管理、狀態配置,都使用 YAML 格式來描述配置,二者都提供豐富的模板及 API,對雲計算平臺、大數據都有很好的支持。nginx

安裝ansible

yum安裝

yum -y install ansible

配置ansible

tree /etc/ansible/

/etc/ansible/

├── ansible.cfg  # ansible.cfg 是 Ansible 工具的配置文件;

├── hosts  # ansible的主倉庫 用來存儲須要管理的遠程主機的相關信息

└── roles   # roles 是一個目錄,playbook 將使用它

SSH祕鑰認證

ssh-keygen -t rsa
ssh-copy-id root@agent_host_ip

添加被管理主機

vim /etc/ansible/hosts

[Client]
angent_host_ip_1
angent_host_ip_2

測試ansible

shell > ansible Client -m ping     # 操做 Client 組 ( all 爲操做 hosts 文件中全部主機 ),-m 指定執行 ping 模塊,下面是返回結果
192.168.12.129 | SUCCESS => {
"changed": false, 
"ping": "pong"
}

# -i          指定 hosts 文件位置
# -u username 指定 SSH 鏈接的用戶名
# -k          指定遠程用戶密碼
# -f          指定併發數
# -s          如須要 root 權限執行時使用 ( 鏈接用戶不是 root 時 )
# -K          -s 時,-K 輸入 root 密碼

hosts主機文件

shell > vim /etc/ansible/hosts

www.abc.com     # 定義域名

192.168.1.100   # 定義 IP

192.168.1.150:37268   # 指定端口號

[WebServer]           # 定義分組

192.168.1.10
192.168.1.20
192.168.1.30

[DBServer]            # 定義多個分組

192.168.1.50
192.168.1.60

Monitor ansible_ssh_port=12378 ansible_ssh_host=192.168.1.200   # 定義別名

# ansible_ssh_host 鏈接目標主機的地址

# ansible_ssh_port 鏈接目標主機的端口,默認 22 時無需指定

# ansible_ssh_user 鏈接目標主機默認用戶

# ansible_ssh_pass 鏈接目標主機默認用戶密碼

# ansible_ssh_connection 目標主機鏈接類型,能夠是 local 、ssh 或 paramiko

# ansible_ssh_private_key_file 鏈接目標主機的 ssh 私鑰

# ansible_*_interpreter 指定採用非 Python 的其餘腳本語言,如 Ruby 、Perl 或其餘相似 ansible_python_interpreter 解釋器

[webservers]         # 主機名支持正則描述

www[01:50].example.com

[dbservers]

db-[a:f].example.com

ansible經常使用模塊

shell > ansible-doc -l    # 列出 Ansible 支持的模塊

shell > ansible-doc ping  # 查看該模塊幫助信息

遠程命令模塊(command / script / shell)

command

command 做爲 Ansible 的默認模塊,能夠運行遠程權限範圍全部的 shell 命令,不支持管道符。
shell > ansible Client -m command -a "free -m"               # 查看 Client 分組主機內存使用狀況

script

script 的功能是在遠程主機執行主控端存儲的 shell 腳本文件,至關於 scp + shell 組合。

shell > ansible Client -m script -a "/home/test.sh 12 34"    # 遠程執行本地腳本

shell

shell模塊基本和command相同,可是shell支持管道符

shell > ansible Client -m shell -a "/home/test.sh"           # 執行遠程腳本

copy模塊

實現主控端向目標主機拷貝文件,相似於 scp 功能

shell > ansible Client -m copy -a "src=/home/test.sh dest=/tmp/ owner=root group=root mode=0755"   # 向 Client 組中主機拷貝 test.sh 到 /tmp 下,屬主、組爲 root ,權限爲 0755

stat模塊

獲取遠程文件狀態信息,atime/ctime/mtime/md5/uid/gid 等信息

shell > ansible Client -m stat -a "path=/etc/syctl.conf"

get_url

實如今遠程主機下載指定 URL 到本地,支持 sha256sum 文件校驗

shell > ansible Client -m get_url -a "url=http://www.baidu.com dest=/tmp/index.html mode=0440 force=yes"

yum

軟件包管理

shell > ansible Client -m yum -a "name=curl state=latest"

corn

遠程主機 crontab 配置

shell > ansible Client -m cron -a "name='check dirs' hour='5,2' job='ls -alh > /dev/null'"

效果:
* 5,2 * * * ls -alh > /dev/null

mount

遠程主機分區掛載

shell > ansible Client -m mount -a "name=/mnt/data src=/dev/sd0 fstype=ext4 opts=ro state=present"

service

遠程主機系統服務管理

shell > ansible Client -m service -a "name=nginx state=stoped"
shell > ansible Client -m service -a "name=nginx state=restarted"
shell > ansible Client -m service -a "name=nginx state=reloaded"

user

遠程主機用戶管理

shell > ansible Client -m user -a "name=wang comment='user wang'"

shell > ansible Client -m user -a "name=wang state=absent remove=yes"    # 添加刪除用戶
相關文章
相關標籤/搜索