Ansible-配置筆記
阿新 • • 發佈:2018-05-23
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-配置筆記