類(lèi)似于wordpress的網(wǎng)站濟(jì)南百度競(jìng)價(jià)
Ansible
文章目錄
- Ansible
- 一、概念
- 1.簡(jiǎn)介
- 2.特性
- 二、ansible模塊
- 1.命令行格式
- 2.模塊
- 1.command 模塊
- 2.shell 模塊
- 3.cron 模塊
- 4.user 模塊
- 5.group 模塊
- 6.copy 模塊
- 7.file 模塊
- 8.hostname 模塊
- 9.ping 模塊
- 10.yum 模塊
- 11.service/systemd 模塊
- 12.script 模塊
- 13.mount 模塊
- 14.archive 模塊
- 15.unarchive 模塊
- 16.replace 模塊
- 17.setup 模塊
- 三、inventory 主機(jī)清單
- 主機(jī)清單配置文件------>>>>/etc/ansible/hosts
- 1.主機(jī)變量
- 2.組變量
- 3.組嵌套
一、概念
1.簡(jiǎn)介
ansible 自動(dòng)化運(yùn)維工具(機(jī)器管理工具) 可以實(shí)現(xiàn)批量管理多臺(tái)(成百上千)主機(jī),應(yīng)用級(jí)別的跨主機(jī)編排工具。
2.特性
無(wú)agent的存在,不需要在被控制的節(jié)點(diǎn)上安裝客戶(hù)端應(yīng)用通過(guò)ssh協(xié)議與被控制節(jié)點(diǎn)通信基于模塊工作的,可以通過(guò)模塊實(shí)現(xiàn)在被控制節(jié)點(diǎn)上執(zhí)行命令操作很多模塊具有冪等性,可以實(shí)現(xiàn)多次模塊操作的狀態(tài)如果沒(méi)有發(fā)送改變,則不會(huì)重復(fù)執(zhí)行
二、ansible模塊
1.命令行格式
ansible 組名 -m 模塊名 -a '參數(shù)選項(xiàng)'
2.模塊
//配置密鑰對(duì)驗(yàn)證
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsayum install -y sshpass
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.111.30
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.111.40
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.111.50
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.111.60
1.command 模塊
//在遠(yuǎn)程主機(jī)執(zhí)行命令,不支持管道,重定向等shell的特性。
ansible-doc -s command #-s 列出指定模塊的描述信息和操作動(dòng)作//常用的參數(shù):
chdir:在遠(yuǎn)程主機(jī)上運(yùn)行命令前提前進(jìn)入目錄
creates:判斷指定文件是否存在,如果存在,不執(zhí)行后面的操作
removes:判斷指定文件是否存在,如果存在,執(zhí)行后面的操作
2.shell 模塊
//在遠(yuǎn)程主機(jī)執(zhí)行命令,相當(dāng)于調(diào)用遠(yuǎn)程主機(jī)的shell進(jìn)程,然后在該shell下打開(kāi)一個(gè)子shell運(yùn)行命令(支持管道符號(hào)等功能)
3.cron 模塊
//在遠(yuǎn)程主機(jī)定義任務(wù)計(jì)劃。其中有兩種狀態(tài)(state):present表示添加(可以省略),absent表示移除。
//常用的參數(shù):
minute/hour/day/month/weekday:分/時(shí)/日/月/周
job:任務(wù)計(jì)劃要執(zhí)行的命令
name:任務(wù)計(jì)劃的名稱(chēng)
user:指定計(jì)劃任務(wù)屬于哪個(gè)用戶(hù),默認(rèn)是root用戶(hù)
4.user 模塊
//用戶(hù)管理的模塊//常用的參數(shù):
name:用戶(hù)名,必選參數(shù)
state=present|absent:創(chuàng)建賬號(hào)或者刪除賬號(hào),present表示創(chuàng)建,absent表示刪除
system=yes|no:是否為系統(tǒng)賬號(hào)
uid:用戶(hù)uid
group:用戶(hù)基本組
groups: 用戶(hù)所屬附加組
shell:默認(rèn)使用的shell
create_home=yse|no: 是否創(chuàng)建家目錄
password:用戶(hù)的密碼,建議使用加密后的字符串
remove=yes|no:當(dāng)state=absent時(shí),是否刪除用戶(hù)的家目錄
5.group 模塊
//用戶(hù)組管理的模塊
ansible dbservers -m group -a 'name=mysql gid=306 system=yes' #創(chuàng)建mysql組
ansible dbservers -a 'tail /etc/group'
ansible dbservers -m user -a 'name=test01 uid=306 system=yes group=mysql' #將test01用戶(hù)添加到mysql組中
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -a 'id test01'
6.copy 模塊
//用于復(fù)制指定主機(jī)文件到遠(yuǎn)程主機(jī)的//常用的參數(shù):
dest:指出復(fù)制文件的目標(biāo)及位置,使用絕對(duì)路徑,如果源是目錄,指目標(biāo)也要是目錄,如果目標(biāo)文件已經(jīng)存在會(huì)覆蓋原有的內(nèi)容
src:指出源文件的路徑,可以使用相對(duì)路徑或絕對(duì)路徑,支持直接指定目錄,如果源是目錄則目標(biāo)也要是目錄
mode:指出復(fù)制時(shí),目標(biāo)文件的權(quán)限
owner:指出復(fù)制時(shí),目標(biāo)文件的屬主
group:指出復(fù)制時(shí),目標(biāo)文件的屬組
content:指出復(fù)制到目標(biāo)主機(jī)上的內(nèi)容,不能與src一起使用ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -a 'ls -l /opt'
ansible dbservers -a 'cat /opt/fstab.bak'ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt' #將helloworld寫(xiě)入/opt/hello.txt文件中
ansible dbservers -a 'cat /opt/hello.txt'
7.file 模塊
//設(shè)置文件屬性
ansible-doc -s fileansible dbservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/fstab.bak' #修改文件的屬主屬組權(quán)限等
ansible dbservers -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link' #設(shè)置/opt/fstab.link為/opt/fstab.bak的鏈接文件
ansible dbservers -m file -a "path=/opt/abc.txt state=touch" #創(chuàng)建一個(gè)文件
ansible dbservers -m file -a "path=/opt/abc.txt state=absent" #刪除一個(gè)文件
8.hostname 模塊
//用于管理遠(yuǎn)程主機(jī)上的主機(jī)名
ansible dbservers -m hostname -a "name=mysql01"
9.ping 模塊
//檢測(cè)遠(yuǎn)程主機(jī)的連通性
ansible all -m ping
10.yum 模塊
//在遠(yuǎn)程主機(jī)上安裝與卸載軟件包
ansible-doc -s yumansible webservers -m yum -a 'name=httpd' #安裝服務(wù)
ansible webservers -m yum -a 'name=httpd state=absent' #卸載服務(wù)
11.service/systemd 模塊
//用于管理遠(yuǎn)程主機(jī)上的管理服務(wù)的運(yùn)行狀態(tài)
ansible-doc -s service//常用的參數(shù):
name:被管理的服務(wù)名稱(chēng)
state=started|stopped|restarted:動(dòng)作包含啟動(dòng)關(guān)閉或者重啟
enabled=yes|no:表示是否設(shè)置該服務(wù)開(kāi)機(jī)自啟
runlevel:如果設(shè)定了enabled開(kāi)機(jī)自啟去,則要定義在哪些運(yùn)行目標(biāo)下自啟動(dòng)ansible webservers -a 'systemctl status httpd' #查看web服務(wù)器httpd運(yùn)行狀態(tài)
ansible webservers -m service -a 'enabled=true name=httpd state=started' #啟動(dòng)httpd服務(wù)
12.script 模塊
//實(shí)現(xiàn)遠(yuǎn)程批量運(yùn)行本地的 shell 腳本
ansible-doc -s scriptvim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txtchmod +x test.sh
ansible webservers -m script -a 'test.sh'
ansible webservers -a 'cat /opt/script.txt'vim test.sh
#!/bin/bash
echo $1 > /opt/test.txt
echo $2 >> /opt/test .txtansible dbservers -m script -a 'test.sh abc 123!
13.mount 模塊
//掛載文件系統(tǒng)
ansible-doc -s mount//常用的參數(shù):
src:定義掛載設(shè)備的路徑
path:定義掛載到哪個(gè)目錄,必須指定
fstype:指定掛載文件的系統(tǒng)類(lèi)型,必須指定,xfs、iso9660、nfs...
opts:定義掛載的參數(shù),defaults、rw、ro...
state:定義掛載的狀態(tài),mounted(進(jìn)行掛載,修改/etc/fstab信息)、absent(永久性卸載,并修改 /etc/fstab信息)、unmounted(臨時(shí)卸載,不修改/etc/fstab信息)ansible dbservers -m mount -a 'src=/dev/sr0 path=/mnt state=mounted fstype=iso9660'
14.archive 模塊
//打包壓縮
ansible-doc -s archive//常用的參數(shù):
path: 必須參數(shù),遠(yuǎn)程主機(jī)上需要被打包壓縮的源文件/目錄
dest: 打包壓縮后的包文件路徑(包文件的父目錄必須存在);如果包文件已存在,則會(huì)被覆蓋
format: 指定壓縮類(lèi)型,包括: bz2、gz(默認(rèn))、tar、xz、zip
remove=yes|no: 是否刪除源文件ansible dbservers -m archive -a "path=/etc/yum.repos.d/ dest=/opt/repo.zip format=zip"
ansible dbservers -m archive -a "path=/opt/abc.txt,/opt/123.txt dest=/opt/abc123.tar.gz format=gz remove=yes"
15.unarchive 模塊
//解包解壓縮
ansible-doc -s unarchive//常用的參數(shù):
copy:默認(rèn)為 copy=yes ,拷貝的文件從 ansible 主機(jī)復(fù)制到遠(yuǎn)程主機(jī),copy=no 表示在遠(yuǎn)程主機(jī)上尋找源文件解壓
src:tar包源路徑,可以是 ansible 主機(jī)上的路徑,也可以是遠(yuǎn)程主機(jī)上的路徑,如果是遠(yuǎn)程主機(jī)上的路徑,則需設(shè)置 copy=no
dest:解壓后文件的目標(biāo)絕對(duì)路徑
remote_src: 和 copy 功能一樣且互斥,設(shè)置 remote_src=yes 表示文件在遠(yuǎn)程主機(jī)上,設(shè)置為 remote_src=no 表示文件在 ansible 主機(jī)上#將 ansible 主機(jī)的壓縮文件拷貝到到遠(yuǎn)程主機(jī)并解壓,修改文件所屬組和用戶(hù)
ansible dbservers -m unarchive -a "src=/opt/abc.tar.gz dest=/root copy=yes"
或者
ansible dbservers -m unarchive -a "src=/opt/abc.tar.gz dest=/root remote_src=no"#在遠(yuǎn)程主機(jī)解包
ansible dbservers -m unarchive -a "src=/opt/123.tar.gz dest=/root copy=no"
或者
ansible dbservers -m unarchive -a "src=/opt/123.tar.gz dest=/root remote_src=yes"
16.replace 模塊
//類(lèi)似于sed命令,主要也是基于正則進(jìn)行匹配和替換
ansible-doc -s replace//常用的參數(shù):
path:必須參數(shù),指定要修改的文件
regexp:必須參數(shù),指定一個(gè)正則表達(dá)式
replace:替換regexp參數(shù)匹配到的字符串
backup=yes|no: 修改源文件前創(chuàng)建一個(gè)包含時(shí)間戳信息的備份文件
before:如果指定,則僅替換/刪除此匹配之前的內(nèi)容,可以和after參數(shù)結(jié)合使用
after:如果指定,則僅替換/刪除此匹配之后的內(nèi)容,可以和before參數(shù)結(jié)合使用
owner:修改文件用戶(hù)名
group:修改文件組名
mode:修改文件權(quán)限vim /opt/test.txt
11 22 33 44 55 66
aa bb cc dd ee ff
1a 2b 3c 4d 5e 6f#匹配 333 并修改為 ccc
ansible dbservers -m replace -a "path=/opt/test.txt regexp='33' replace='cc'"
#匹配到任意一個(gè)或多個(gè)開(kāi)頭的行增加注釋
ansible dbservers -m replace -a "path=/opt/test.txt regexp='^(.*)' replace='#\1'"
#取消注釋
ansible dbservers -m replace -a "path=/opt/test.txt regexp='^#(.*)' replace='\1'"
#匹配以 a 開(kāi)頭的后面有一個(gè)或者多個(gè)字符的行,并在前面添加 # 注釋
ansible dbservers -m replace -a "path=/opt/test.txt regexp='^(a.*)' replace='#\1'"ansible dbservers -m replace -a "path=/opt/test.txt regexp='3' replace='three' before=cc"
17.setup 模塊
//facts 組件是用來(lái)收集被管理節(jié)點(diǎn)信息的,使用 setup 模塊可以獲取這些信息
ansible-doc -s setupansible webservers -m setup #獲取mysql組主機(jī)的facts信息
ansible dbservers -m setup -a 'filter=*ipv4' #使用filter可以篩選指定的facts信息
三、inventory 主機(jī)清單
主機(jī)清單配置文件------>>>>/etc/ansible/hosts
//inventory 中的變量
Inventory變量名 含義
ansible_host ansible連接節(jié)點(diǎn)時(shí)的IP地址
ansible_port 連接對(duì)方的端口號(hào),ssh連接時(shí)默認(rèn)為22
ansible_user 連接對(duì)方主機(jī)時(shí)使用的用戶(hù)名。不指定時(shí),將使用執(zhí)行ansible或ansible-playbook命令的用戶(hù)
ansible_password 連接時(shí)的用戶(hù)的ssh密碼,僅在未使用密鑰對(duì)驗(yàn)證的情況下有效
ansible_ssh_private_key_file 指定密鑰認(rèn)證ssh連接時(shí)的私鑰文件
ansible_ssh_common_args 提供給ssh、sftp、scp命令的額外參數(shù)
ansible_become 允許進(jìn)行權(quán)限提升
ansible_become_method 指定提升權(quán)限的方式,例如可使用sudo/su/runas等方式
ansible_become_user 提升為哪個(gè)用戶(hù)的權(quán)限,默認(rèn)提升為root
ansible_become_password 提升為指定用戶(hù)權(quán)限時(shí)的密碼
1.主機(jī)變量
[webservers] ---組名
192.168.111.20 ansible_port=22 ansible_user=root ansible_password=123
2.組變量
[webservers:vars] #表示為 webservers 組內(nèi)所有主機(jī)定義變量
ansible_user=root
ansible_password=123[all:vars] #表示為所有組內(nèi)的所有主機(jī)定義變量
ansible_port=22
3.組嵌套
[nginx]
192.168.111.20
192.168.111.30
192.168.111.40[apache]
192.168.111.50
192.168.111.60
192.168.111.70[webs:children] #表示為 webs 主機(jī)組中包含了 nginx 組和 apache 組內(nèi)的所有主機(jī)
nginx
apache
[webservers:vars] #表示為 webservers 組內(nèi)所有主機(jī)定義變量
ansible_user=root
ansible_password=123
[all:vars] #表示為所有組內(nèi)的所有主機(jī)定義變量
ansible_port=22
``