ansible是基於python2的,python3不行
0.配置檔案
1)ansible.cfg(一般不需要更改)
/etc/ansible/ansible.cfg
2)主機清單inventory 此處命令為hosts.cfg(沒有字尾名限制)
①方式一(只要~/.ssh/config配置好,只需要主機組[servers]+名字就可以)
[servers]
test1
test2
~/.ssh/config配置格式如下:
host test1
hostname 127.0.0.1
port 22
user root
identityfile ~/.ssh/id_rsa
1. 不驗證ssh指紋
修改/etc/ansible/ansible.cfg
取消註釋
host_key_checking = False
2. ad-hoc 臨時命令
命令 主機組名稱 指定模組 命令模組 模組動作 具體命令 [指定配置檔案]
ansible servers -m command -a 'df -h' [-i hosts.cfg]
-f 5 併發數 (配置檔案:forks)
ansible servers -m ping -i hosts.cfg
②方式二
[servers]
127.0.0.1
168.192.1.1
[all:vars]
ansible_user=root
ansible_ssh_private_key_file=~/.ssh/id_rsa
③方式三
[servers]
127.0.0.1 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="password"
168.192.1.1 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='password'
3.模組
命令 command shell scripts
安裝 yum
配置 copy file
啟動 service systemd
使用者 user group
任務 cron
掛載 mount
防火牆 firewall selinux
command 不能用管道符 換shell
ansible servers -m shell -a 'systemctl status nginx' -i hosts.cfg
檢視模組方法
ansible-doc yum
EXAMPLES 示例
1.yum模組 (安裝 present 解除安裝 absent 升級 latest 排除 exclude 指定倉庫 enablerepo)
1)示例:安裝最新版apache軟體,如果存在則更新
ansible servers -i hosts.cfg -m yum -a 'name=httpd state=latest'
不要求最新,安裝上就行
ansible servers -i hosts.cfg -m yum -a 'name=httpd state=present'
2)示例:安裝最新版apache軟體,透過epel倉庫安裝
ansible servers -i hosts.cfg -m yum -a 'name=httpd state=latest enablerepo=epel'
3)示例:透過公網URL安裝rpm軟體(不能有依賴的)
ansible servers -i hosts.cfg -m yum -a 'name=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.15-1.el7.x86_64.rpm state=latest'
4)示例:更新所有軟體包,但排除和kernel相關的
ansible servers -i hosts.cfg -m yum -a 'name="*" state=latest exclude=kernel*'
更新所有軟體包,但排除和kernel和foo相關的
ansible servers -i hosts.cfg -m yum -a 'name="*" state=latest exclude=kernel*,foo*'
5)示例:更新所有軟體包,但排除和kernel相關的
ansible servers -i hosts.cfg -m yum -a 'name=httpd state=absent'
2. cope模組
ansible-doc cope
1)示例:複製本地檔案到遠端主機
ansible servers -i hosts.cfg -m copy -a 'src=./hosts.cfg dest=/root owner=root group=root mode=644'
2)示例:複製本地檔案到遠端主機,如果原來有檔案,並且與傳送的有變化,會備份原來的檔案
ansible servers -i hosts.cfg -m copy -a 'src=/root/hosts.cfg dest=/root owner=root group=root mode=644 backup=yes'
3)示例:向遠端主機寫個檔案
ansible servers -i hosts.cfg -m copy -a 'content="test aaa" dest=/root/hosts.test owner=root group=root mode=644'
示例:內容不一樣,則備份
ansible servers -i hosts.cfg -m copy -a 'content="test aaabbb" dest=/root/hosts.test owner=root group=root mode=644 backup=yes'
3.get_cul模組
支援http https ftp
1)示例:下載網上檔案
ansible servers -i hosts.cfg -m get_url -a 'url=https://pic.cnblogs.com/avatar/2189493/20201201164611.png dest=/root/'
2)示例:下載網上檔案,並進行md5效驗(MD5值對才下載)
ansible servers -i hosts.cfg -m get_url -a 'url=https://pic.cnblogs.com/avatar/2189493/20201201164611.png dest=/root/ checksum=md5:fb1b256b1647d029fc0348600a5136ca'
4.file模組
path status touch directory owner group mode
1)示例:建立檔案
ansible servers -i hosts.cfg -m file -a 'path=/root/test.test state=touch owner=root group=root mode=644'
2)示例:建立目錄(修改許可權)
ansible servers -i hosts.cfg -m file -a 'path=/root/test state=directory owner=root group=root mode=755'
3)示例:遞迴修改所屬許可權(如果帶mode則mode也設定了,一般不帶,讓檔案訪問許可權不變)
ansible servers -i hosts.cfg -m file -a 'path=/root/test state=directory owner=root group=root recurse=yes'
5.service模組
1)示例:啟動nginx服務
ansible servers -i hosts.cfg -m service -a 'name=nginx state=started'
2)示例:重新載入nginx服務配置
ansible servers -i hosts.cfg -m service -a 'name=nginx state=reloaded'
3)示例:重啟nginx服務
ansible servers -i hosts.cfg -m service -a 'name=nginx state=restarted'
4)示例:停止nginx服務
ansible servers -i hosts.cfg -m service -a 'name=nginx state=stopped'
5)示例:啟動nginx服務,並加入開機自啟
ansible servers -i hosts.cfg -m service -a 'name=nginx state=started enabled=yes'
驗證:去伺服器使用命令 systemctl is-enabled nginx
示例:關閉開機自啟
ansible servers -i hosts.cfg -m service -a 'name=nginx state=started enabled=yes'
6.group模組(先有組,再有使用者)
1)示例:建立news基本組,指定gid為9999
ansible servers -i hosts.cfg -m group -a 'name=news gid=9999'
ansible servers -i hosts.cfg -m group -a 'name=news gid=9999 state=present'
2)示例:建立news2系統組,指定gid為8888
ansible servers -i hosts.cfg -m group -a 'name=news2 system=yes gid=8888 state=present'
3)示例:刪除news組
ansible servers -i hosts.cfg -m group -a 'name=news state=absent'
7.user模組(先有組,再有使用者)
1)示例:建立tset11使用者,指定uid為1040,組為adm(保證組存在,沒有的話先建立組)
ansible servers -i hosts.cfg -m user -a 'name=test11 uid=1040 group=adm'
驗證:id test11
2)示例:建立tset11使用者,登入shell為/sbin/nologin,追加組為bin,sys組
ansible servers -i hosts.cfg -m user -a 'name=test11 shell=/bin/bash groups=bin,sys'
3)示例:建立tset22使用者,設定密碼為123,並且建立家目錄(新增密碼得兩步)
密碼是加密的,不能直接寫(避坑"sha512","salt"只能雙引號)
ansible localhost -m debug -a 'msg={{"123"|password_hash("sha512","salt")}}'
然後新增使用者(password為生成的金鑰)
ansible servers -i hosts.cfg -m user -a 'name=test22 password=$6$salt$jkHSO0tOjmLW0S1NFlw5veSIDRAVsiQQMTrkOKy4xdCCLPNIsHhZkIRlzfzIvKyXeGdOfCBoW1wJZPLyQ9Qx/1 create_home=yes'
3)示例:刪除tset22使用者(remove會連帶家目錄一起刪,一般不帶)
ansible servers -i hosts.cfg -m user -a 'name=test22 state=absent'
ansible servers -i hosts.cfg -m user -a 'name=test22 state=absent remove=yes'
8.cron模組
1)示例:新增定時任務,每分鐘執行一次ls命令
ansible servers -i hosts.cfg -m corn -a 'name=cron1 job="ls >/dev/null"'
2)示例:新增定時任務,每天2點5點執行一次ls命令
ansible servers -i hosts.cfg -m corn -a 'name=cron2 minute=0 hour=2,5 job="ls >/dev/null"'
3)示例:關閉定時任務,使定時任務失效
ansible servers -i hosts.cfg -m corn -a 'name=cron2 minute=0 hour=2,5 job="ls >/dev/null" disabled=yes'
9.mount模組
state=(臨時掛載 mounted 臨時解除安裝absent 永久掛載present 永久解除安裝 unmounted)
示例:
將本機設定為nfs服務端
ansible localhost -m yum -a 'name=nfs-utils state=present'
ansible localhost -m file -a 'path=/ops state=directory'
ansible localhost -m copy -a 'content="/opt 0.0.0.0/24(rw,sync)" dest=/etc/exports'
ansible localhost -m service -a 'name=nfs state=restarted'
1)示例一:掛載nfs儲存至本地的/opt目錄,並實現開機自動掛載
ansible servers -i hosts.cfg -m mount -a 'src=47.121.131.1:/ops path=/opt fstype=nfs opts=defaults state=mounted'
2)示例二:掛載nfs儲存至本地的/opt目錄,並實現開機自動掛載
ansible servers -i hosts.cfg -m mount -a 'src=47.121.131.1:/ops path=/opt fstype=nfs opts=defaults state=unmounted'
3)示例三:掛載nfs儲存至本地的/opt目錄,並實現開機自動掛載
ansible servers -i hosts.cfg -m mount -a 'src=47.121.131.1:/ops path=/opt fstype=nfs opts=defaults state=absent'
10.selinux模組
1)示例一:關閉selinux模組
ansible servers -i hosts.cfg -m selinux -a 'state=disabled'