Ansible自动化运维基础-------ad-hoc
前言:ansible是一款自動化運(yùn)維工具,基于Python開發(fā),所以被管理主機(jī)需要安裝有Python
另外:下例模塊僅供參考如有錯誤還請聯(lián)系本人
目錄
一.準(zhǔn)備ansible
1.Control控制節(jié)點
2.配置SSH密鑰實現(xiàn)免密碼登錄
3.安裝ansible
????????? 4.Ansible基本功能介紹
二.ansible的書寫
1.修改主配置文件準(zhǔn)備環(huán)境
2.常見模塊
1.批量系統(tǒng)配置 ????????2.批量程序部署 ????????3.批量運(yùn)行命令等功能
4.批量修改服務(wù)器密碼???????? 5.批量安裝軟件包 ????????6.批量修改配置
ansible原理:
控制端主機(jī)自帶很多模塊(模塊就是腳本);
ansible通過ssh遠(yuǎn)程被管理主機(jī),將控制端的模塊(腳本)或命令傳輸?shù)奖还芾碇鳈C(jī); 在被管理端主機(jī)執(zhí)行模塊(腳本)或命令,執(zhí)行不同的模塊或命令可以實現(xiàn)不同的功能;
注:絕大多數(shù)模塊(腳本)都需要參數(shù)才能執(zhí)行成功!!!類似于shell腳本的位置變量!
一.準(zhǔn)備ansible
控制節(jié)點要求:
域名解析(為了方便后期操作,可以不做)
配置SSH密鑰(ansible是基于ssh實現(xiàn)遠(yuǎn)程控制)
安裝Ansible軟件(自帶2800多個腳本)
1.Control控制節(jié)點
如:以下寫法;ping?? node1 測試聯(lián)通性
vim /etc/host192.168.4.253 control 192.168.4.11 node1 192.168.4.12 node2 192.168.4.13 node3 192.168.4.14 node4 192.168.4.15 node52.配置SSH密鑰實現(xiàn)免密碼登錄
Ansible是基于SSH遠(yuǎn)程的原理實現(xiàn)遠(yuǎn)程控制,如果控制端主機(jī)無法免密登錄被管理端主機(jī),后續(xù)的所有試驗都會失敗!!?????測試 : ssh? node1?
ssh-keygen #生成ssh密鑰 for i in node1 node2 node3 node4 node5 do ssh-copy-id $i done3.安裝ansible
1).連網(wǎng)即可(如后續(xù)該網(wǎng)站不能下請見諒,這里只是提供思路)
yum -y install wget
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
yum repolist
yum install ansible
2).Git方式
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
3).pip安裝
pip 是安裝Python包的管理器,類似 yum
yum install python-pip python-devel
yum install gcc glibc-devel zibl-devel? rpm-bulid openssl-devel
pip install? --upgrade pip
pip install ansible --upgrade
確認(rèn)安裝
????????ansible --version
注:下包盡量去關(guān)網(wǎng)下!!!!!!
4.Ansible基本功能介紹
1)Ansible相關(guān)工具
/usr/bin/ansible 主程序,臨時命令執(zhí)行工具
/usr/bin/ansible-doc 查看配置文檔,模塊功能查看工具
/usr/bin/ansible-galaxy 下載/上傳優(yōu)秀代碼或Roles模塊的官網(wǎng)平臺
/usr/bin/ansible-playbook 定制自動化任務(wù),編排劇本工具
/usr/bin/ansible-pull 遠(yuǎn)程執(zhí)行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于Console界面與用戶交互的執(zhí)行工具
2)ansible配置文件查找順序
首先檢測ANSIBLE_CONFIG變量定義的配置文件(默認(rèn)沒有這個變量)
其次檢查當(dāng)前目錄下的./ansible.cfg文件
再次檢查當(dāng)前用戶家目錄下~/ansible.cfg文件
最后檢查/etc/ansible/ansible.cfg文件
3)ansible的使用必須在ansible目錄里
mkdir? ~/ansible
cd? ~/ansible
二.ansible的書寫
很多ansible模塊都具有冪等性的特征。(只在ansible) 冪等性:任意次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影響相同。 萬能模塊 shell(沒有冪等性)
1.修改主配置文件準(zhǔn)備環(huán)境
mkdir?? ansible ;cd ansible
vim? ~/ansible/ansible.cfg #手動書寫配置文件或cp? /etc/ansible/ansible.cfg? /ansible/ansible.cfg??
[defaults] inventory = ~/ansible/inventory //清單=文件名 #主機(jī)清單配置文件(inventory可以是任意文件名) remote_user = root //連接受管機(jī)的遠(yuǎn)程用戶 roles_path = roles //指定默認(rèn)的角色目錄 [privilege_escalation] //設(shè)置用戶 sudo 提權(quán) become=True //需要提權(quán) become_method=sudo //提權(quán)方式為 sudo become_user=root //提權(quán)為 root become_ask_pass=False //無需驗證密碼 #forks = 5 #ssh并發(fā)數(shù)量(默認(rèn)是5) #host_key_checking = False (不提示)#是否校驗密鑰(第一次ssh時是否提示yes/no)?2) 修改主機(jī)清單文件(清單文件名必須與主配置文件inventory定義的一致)
[test]????????????????????#定義主機(jī)組(組名稱任意)(也可以一臺一臺寫) node1????????????????????#定義組中的具體主機(jī),組中包括一臺主機(jī)node1 [proxy] #定義主機(jī)組(組名稱任意) node2 #proxy組中包括一臺主機(jī)node2 [webserver] node[3:4] #這里的node[3:4]等同于node3和node4 [database] node5 [cluster:children]????????#嵌套組(children為關(guān)鍵字),不需要也可以不創(chuàng)建嵌套組 webserver #嵌套組可以在組中包含其他組 database測試??? ansible? all? --list-hosts?
2.常見模塊
通過ansible-doc獲取幫助
ansible-doc -l ????#列出所有模塊 ansible-doc -l | grep yum????????????#在所有模塊中過濾關(guān)鍵詞 ansible-doc yum ????????#查看模塊幫助 resetping模塊
它不會發(fā)送任何ICMP協(xié)議的ping數(shù)據(jù)包,控制端主機(jī)僅僅是ssh遠(yuǎn)程被管理端主機(jī),檢查其是否有python環(huán)境,能順利遠(yuǎn)程并且有Python環(huán)境就會返回正確的提示信息,否則報錯
ansible all –m pingcommand模塊
模塊就是腳本(多數(shù)為Python腳本),多數(shù)腳本都支持參數(shù),默認(rèn)模塊為command
ansible node1 -m command -a "uptime" #查看CPU負(fù)載 ansible node1 -m command -a "uname -r" #查看內(nèi)核版本 ansible node1 -a "ip a s" #查看網(wǎng)卡信息 ansible all -a "date" #查看時間shell模塊
command和shell模塊的區(qū)別,command不支持bash的特性(bash特性如:管道和重定向等功能),但是shell模塊可以支持。
ansible test -m command -a "ps | wc -l" #報錯 ansible test -m command -a "ls &" #報錯 ansible test -m shell -a "ps aux | wc -l" #進(jìn)程數(shù)量 ansible test -m shell -a "who" #登陸信 ansible test -m shell -a "touch /tmp/txt.txt"#使用shell模塊創(chuàng)建文件會有Warning警告提示,正常!!!
script模塊
script模塊會把-a后面的腳本拷貝到被管理端主機(jī),然后執(zhí)行這個腳本。
vim ~/ansible/test.sh #!/bin/bash dnf -y install httpd systemctl start httpd ansible test -m script -a "./test.sh"file模塊
file模塊可以創(chuàng)建文件、目錄、鏈接;修改權(quán)限與屬性等
ansible test -m file -a "path=/tmp/file.txt state=touch" #遠(yuǎn)程test組中所有主機(jī),新建文件,path后面指定要創(chuàng)建的文件或目錄的名稱 ansible test -m file -a "path=/tmp/mydir state=directory" #遠(yuǎn)程test組中所有主機(jī),創(chuàng)建目錄,path后面指定要創(chuàng)建的文件或目錄的名稱ansible test -m file -a "path=/tmp/file.txt owner=sshd group=adm mode=0777" #修改文件或目錄權(quán)限,path后面指定要修改的文件名或目錄名稱,owner后面指定用戶, ansible test -m file -a "path=/tmp/mydir state=absent" abset(卸載,刪) perset(裝包,增) ansible test -m file -a "path=/tmp/file.txt state=absent" #state=absent代表刪除(刪除目錄) ansible test -m file -a "src=/etc/hosts path=/tmp/host.txt state=link" #給/etc/hosts文件創(chuàng)建一個鏈接文件/tmp/host.txt(src指定源文件,path是軟鏈接文件名)link(軟鏈接) hard(硬鏈接1)copy模塊
可以將文件拷貝到遠(yuǎn)程主機(jī)
echo AAA > ~/a3.txt ansible test -m copy -a "src=~/a3.txt dest=/root/" #把管理端本機(jī)的a3.txt文件,拷貝到test組中所有主機(jī)的/root/目錄 #src代表源文件,dest代表目標(biāo)文件fetch模塊
fetch模塊與copy類似,但是作用相反,可以將其他主機(jī)的文件拷貝到本地
ansible test -m fetch -a "src=/etc/hostname dest=~/" #將遠(yuǎn)程test組中所有主機(jī)的hostname文件下載到本地家目錄lineinfile|replace模塊
在修改單個文件的單行內(nèi)容時可以使用lineinfile模塊
ansible test -m lineinfile -a "path=/etc/issue line='hello world'" #在/etc/issue文件中添加一行內(nèi)容hello world,默認(rèn)添加到最后,line后面跟的是需要添加的文件內(nèi)容 ansible test -m lineinfile -a "path=/etc/issue line='hello world'" #基于冪等原則,重復(fù)執(zhí)行,不會創(chuàng)建多行內(nèi)容lineinfile會替換一整行,replace可以替換關(guān)鍵詞
ansible test -m replace -a "path=/etc/issue.net regexp=Kernel replace=Ocean" #將node1主機(jī)中/etc/issue.net文件全文所有的Kernel替換為Oceanuser模塊
user模塊可以實現(xiàn)Linux系統(tǒng)賬戶管理
ansible test -m user -a "name=tuser1" ansible test -m user -a "name=tuser2 uid=1010 group=adm groups=daemon,root home=/home/tuser2" #創(chuàng)建賬戶并設(shè)置對應(yīng)的賬戶屬性,uid指定用戶ID號,group指定用戶屬于哪個基本組 #groups指定用戶屬于哪些附加組,home指定用戶的家目錄 ansible test -m user -a "name=tuser1 password={{'abc'| password_hash('sha512')}}" #修改賬戶密碼,用戶名是tuser1,密碼是abc,密碼經(jīng)過sha512加密ansible test -m user -a "name=tuser1 state=absent" #刪除賬戶tuser1,state=absent代表刪除賬戶的意思,name指定要刪除的用戶名是什么ansible test -m user -a "name=tuser2 state=absent remove=true" #刪除tuser2賬戶同時刪除家目錄、郵箱,相當(dāng)于執(zhí)行userdel -r tuser2yum_repository模塊
使用yum_repository可以創(chuàng)建或修改yum源配置文件
ansible test -m yum_repository -a "name=myyum description=hello baseurl=ftp://192.168.4.254/centos gpgcheck=no" #新建一個yum源配置文件/etc/yum.repos.d/myyum.repoansible test -m yum_repository -a "name=myyum description=test baseurl=ftp://192.168.4.254/centos gpgcheck=yes gpgkey=…(密鑰文件)" #修改yum源文件內(nèi)容 ansible test -m yum_repository -a "name=myyum state=absent" #刪除yum源文件myyumyum模塊
使用yum模塊可以安裝、卸載、升級軟件包
ansible test -m yum -a "name=unzip state=present"(可寫可不寫) #安裝unzip軟件包,state默認(rèn)為present,也可以不寫 ansible test -m yum -a "name=unzip state=latest" #升級unzip軟件包,軟件名稱可以是*,代表升級所有軟件包ansible test -m yum -a "name=unzip state=absent" #調(diào)用yum模塊,卸載unzip軟件包,state=absent代表卸載軟件service模塊
service為服務(wù)管理模塊(啟動、關(guān)閉、重啟服務(wù)等)
ansible test -m yum -a "name=httpd" #調(diào)用yum模塊,安裝httpd軟件包 ansible test -m service -a "name=httpd state=started" #調(diào)用service模塊,啟動httpd服務(wù) ansible test -m service -a "name=httpd state=stopped" #調(diào)用service模塊,關(guān)閉httpd服務(wù) ansible test -m service -a "name=httpd state=restarted" #調(diào)用service模塊,重啟httpd服務(wù) ansible test -m service -a "name=httpd enabled=yes" #調(diào)用service模塊,設(shè)置httpd服務(wù)開機(jī)自啟lvg模塊
創(chuàng)建、刪除卷組(VG),修改卷組大小
ansible test -m yum -a "name=lvm2" #安裝lvm2軟件包,安裝了lvm2軟件后,才有pvcreate、vgcreate、lvcreate等命令 ansible test -m lvg -a "vg=myvg pvs=/dev/vdb1" #創(chuàng)建名稱為myvg的卷組,該卷組由/dev/vdb1組成lvol模塊
創(chuàng)建、刪除邏輯卷(LV),修改邏輯卷大小
ansible test -m lvol -a "lv=mylv vg=myvg size=2G" #使用myvg這個卷組創(chuàng)建一個名稱為mylv的邏輯卷,大小為2G ansible test -m lvol -a "lv=mylv vg=myvg size=4G" #修改LV邏輯卷大小 ansible test -m lvol -a "lv=mylv vg=myvg state=absent force=yes" #刪除邏輯卷,force=yes是強(qiáng)制刪除ls ansible test -m lvg -a "vg=myvg state=absent" #刪除卷組myvg總結(jié)
以上是生活随笔為你收集整理的Ansible自动化运维基础-------ad-hoc的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx基本配置
- 下一篇: Ansible自动化运维基础------