1. 程式人生 > >Ansible-配置筆記

Ansible-配置筆記

SM 月份 check 使用幫助 遠程文件 yum源 計劃 軟連接 comment

◆案例1◆ 安裝Ansible

1.使用pip方式自動安裝


a)安裝python-pip 和 python-devel 程序包

yum install -y python-pip python-devel

b)安裝Ansible服務

yum install -y gcc rpm-build openssl-devel glibc-devel zlib-devel

pip install --upgrade pip

pip install ansible --upgrade


2.使用YUM方式自動安裝


a)先安裝Yum源與EPEL源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://
mirrors.aliyun.com/repo/Centos-7.repo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

b)直接安裝,並測試是否安裝成功

yum install -y ansible

ansible --version

◆案例2◆ Ansible常用配置說明

1.配置文件目錄

/etc/ansible/

兩個核心文件:ansible.cfg和hosts文件,默認都存放在/etc/ansible目錄下。

ansible.cfg:主要設置ansible初始化信息,比如:日誌存放路徑、模塊、插件等配置信息。

hosts:機器清單(被控主機文件),進行分組管理

2.命令文件

/usr/bin/ansiable*                             #命令目錄
/etc/ansible/ansible.cfg             #配置文件目錄 [defaults] #通用默認配置 inventory = /etc/ansible/hosts         #默認庫文件位置,腳本,或者存放可通信主機的目錄 library = /usr/share/my_modules/       #Ansible默認搜尋模塊的位置 remote_tmp = $HOME/.ansible/tmp #Ansible通過遠程傳輸模塊到遠程主機,默認傳輸路徑 pattern
= * #如果沒有提供"hosts"節點,這是playbook要通信的默認主機組.默認值是對所有主機通信 forks = 5 #在與主機通信時的默認並行進程數,默認是5 poll_interval = 15 #當具體的poll interval 沒有定義時,多少時間回查一下這些任務的狀態,默認值是5秒 sudo_user = root #sudo使用的默認用戶,默認是root ask_sudo_pass = True #用來控制Ansible playbook 在執行sudo之前是否詢問sudo密碼.默認為no ask_pass = True #控制Ansible playbook 是否會自動默認彈出密碼 transport = smart #通信機制.默認值為smart remote_port = 22 #遠程SSH端口,默認是22 module_lang = C #模塊和系統之間通信的計算機語言,默認是C語言

◆案例3◆ 配置Ansible並實現批量管理

=====================================================================================
實驗環境

[狀態]   [主機列表]      [python版本]

控制機   192.168.1.1     Python2.6/2.7

被控機   192.168.1.2     Python2.4
被控機   192.168.1.3     Python2.4

=====================================================================================

1.編輯Ansible,寫入被控主機IP地址

vim /etc/ansible/hosts

192.168.1.2
192.168.1.3

2.控制主機分發密鑰對,對每臺被控主機

ssh-keygen

ssh-copy-id root@192.168.1.2
ssh-copy-id root@192.168.1.3

3.配置Ansible主配置文件

vim /etc/ansible/ansible.cfg

a)禁用每次執行ansbile命令檢查ssh key host

61 # uncomment this to disable SSH key host checking
62 host_key_checking = False                                    #取消註釋


b)開啟日誌記錄

100 # logging is off by default unless this path is defined
101 # if so defined, consider logrotate
102 log_path = /var/log/ansible.log                             #取消註釋

4.測試連通性

ansible all -m ping

192.168.1.2 | SUCCESS => {                                      #說明成功
"changed": false, 
"ping": "pong"
}
192.168.1.3 | SUCCESS => {                                      #說明成功
"changed": false, 
"ping": "pong"
}

◆案例4◆ Ansible批量管理常用命令

◆基本信息查看◆

ansible [HostGroup or IP] -m setup    #查看遠程主機基本信息

ansible [HostGroup or IP] -m ping     #測試遠程主機運行狀態

◆軟連接創建◆

相關選項

group                               #定義文件/目錄的屬組
mode                                #定義文件/目錄的權限
owner                               #定義文件/目錄的屬主
path                                #定義文件/目錄的路徑
recurse                             #遞歸設置目錄屬性
src                                 #被鏈接源文件路徑/只應用於state=link
dest                                #被鏈接到的路徑/只應用於state=link
force                               #強制創建軟連接/兩個屬性yes/no

directory                           #目錄不存在則創建
file                                #即使目錄不存在也不創建
link                                #創建軟鏈接
hard                                #創建硬鏈接
touch                               #文件不存在則創建
absent                              #刪除或取消鏈接

測試實例

ansible [HostGroup or IP] -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"     #遠程文件鏈接創建

ansible [HostGroup or IP] -m file -a "path=/tmp/resolv.conf state=absent"                        #遠程文件鏈接刪除

◆復制文件到遠程主機◆

相關選項

backup                             #在覆蓋之前,將源文件備份,備份文件包含時間信息。有兩個選項:yes|no
content                            #用於替代“src”,可以直接設定指定文件的值
dest                               #必選項。要將源文件復制到的遠程主機的絕對路徑,如果源文件是一個目錄,那麽該路徑也必須是個目錄
directory_mode                     #遞歸設定目錄的權限,默認為系統默認權限
force                              #強制覆蓋/兩個屬性yes/no
others                             #所有的file模塊裏的選項都可以在這裏使用
src                                #被復制到遠程主機的本地文件

測試實例 將本地文件
/etc/ansible/ansible.cfg復制到遠程/tmp目錄下 ansible [HostGroup or IP] -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"

◆在遠程主機上執行Command命令◆

相關選項

creates                            #一個文件名,當該文件存在,則該命令不執行
removes                            #一個文件名,當該文件不存在,則該選項不執行
free_form                          #要執行的linux指令
chdir                              #在執行指令之前,先切換到該目錄
executable                         #切換shell來執行指令,該執行路徑必須是一個絕對路徑

測試實例

ansible [HostGroup or IP] -m command -a "uptime"      #執行uptime命令

ansible [HostGroup or IP] -m command -a "ls –al /"    #查看根下的文件

◆遠程執行Shell腳本◆

1.先在本地創建一個SHELL腳本

vim test.sh

#!/bin/sh
date +%F_%H:%M:%S

chmod +x test.sh


2將創建的腳本文件分發到遠程

ansible [HostGroup or IP] -m copy -a "src=/root/test.sh dest=/tmp/test.sh owner=root group=root mode=0755"


3.遠程執行

ansible [HostGroup or IP] -m shell -a "/tmp/test.sh"

◆創建和刪除計劃任務◆

相關選項

-m                                  #跟模塊,使用的是 cron 模塊
name=                               #指定計劃任務的名字,方便日後管理
job=                                #指定具體的任務
$time                               #指定具體的執行時間,minute分鐘,hour小時,day 天,month 月份。weekday 0 或者 7 代表周末。
state=                              #選項用來指定 name 並刪除


測試實例

增加計劃任務

ansible [HostGroup or IP] -m cron -a "name=‘test cron‘ job=‘/bin/bash /tmp/test.sh‘ weekday=6"

ansible [HostGroup or IP] -m cron -a "name=‘test n‘ job=‘/bin/bash /tmp/test.sh‘ weekday=6 minute=30 hour=‘*/8‘"

ansible [HostGroup or IP] -m cron -a "name=‘test cron‘ job=‘/bin/bash /tmp/test.sh‘ minute=30 hour=‘*/8‘ day=‘1,10,20‘ weekday=6"

刪除計劃任務

ansible [HostGroup or IP] -m cron -a "name=‘test n‘ state=absent"

ansible [HostGroup or IP] -m cron -a "name=‘test cron‘ state=absent"

◆批量安裝RMP包◆

相關選項

-m                                   #使用 yum 模塊

state= installed removed             #不加state選項默認是installed

測試實例

ansible [HostGroup or IP] -m yum -a "name=tree"

ansible [HostGroup or IP] -m yum -a "name=wget"                  #安裝

ansible [HostGroup or IP] -m yum -a "name=wget state=removed"    #移除


◆批量管理服務◆

相關選項

-m                                   #service模塊
name=                                #系統服務,可以用 chkconfig --list 查看
enabled=                             #是否開機啟動,yes|no。

測試實例

ansible [HostGroup or IP] -m service -a "name=httpd runlevel=3 state=started enabled=no"

ansible [HostGroup or IP] -m service -a "name=httpd runlevel=3 state=stopped enabled=yes"

◆Ansible 文檔使用幫助文檔◆

相關選項

ansible-doc -l                       #查看具體的模塊使用方法

測試實例

ansible-doc service

ansible-doc cron

ansible-doc shell

Ansible-配置筆記