ansible
ansible 是生產環境中使用非常頻繁的命令之一,主要在以下場景使用:
非固化需求;
臨時一次性操作;
二次開發接口調用;
非固化需求是指臨時性的維護,如查看web服務器組磁盤使用情況、復制一個文件到其他機器等。
類似這些沒有規律的、臨時需要做的任務,我們成為非固化需求,臨時一次性操作,語法如下:
Ansible <host-pattern> [options]
- -v(—verbose):輸出詳細的執行過程信息,可以得到執行過程所有信息;
- -i PATH(—inventory=PATH):指定inventory信息,默認為/etc/ansible/hosts;
- -f NUM(—forks=NUM):並發線程數,默認為5個線程;
- —private-key=PRIVATE_KEY_FILE:指定密鑰文件;
- -m NAME,—module-name=NAME:指定執行使用的模塊;
- -M DIRECTORY(—module-path=DIRECTORY) :指定模塊存放路徑,默認為/usr/share/ansible;
- -a ARGUMENTS(—args=ARGUMENTS):指定模塊參數;
- -u USERNAME(—user=USERNAME):指定遠程主機以USERNAME運行命令;
- -l subset(—limit=SUBSET):限制運行主機;
①檢查所有主機是否存活,執行命令如下:
[root@centos01 ~]# ansible all -f 5 -m ping
<!--調用ping模塊,all表示/etc/ansible/hosts文件中的所有主機,不用創建all分組(默認存在)-->
192.168.100.20 | SUCCESS => { <!--表示執行成功-->
"changed": false, <!--沒有對主機做出更改-->
"ping": "pong" <!--表示執行ping命令的返回結果-->
}
192.168.100.30 | SUCCESS => {
"changed": false,
"ping": "pong"
}
②列出web組所有的主機列表,執行命令如下:
[root@centos01 ~]# ansible web --list <!-- --list:表示列出主機列表信息-->
hosts (2):
192.168.100.20
192.168.100.30
③批量顯示web組中的磁盤使用空間,執行命令如下:
[root@centos01 ~]# ansible web -m command -a "df -hT"
192.168.100.30 | SUCCESS | rc=0 >>
文件系統 類型 容量 已用 可用 已用% 掛載點
/dev/mapper/cl-root xfs 17G 4.4G 13G 26% /
devtmpfs devtmpfs 897M 0 897M 0% /dev
tmpfs tmpfs 912M 84K 912M 1% /dev/shm
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 173M 842M 18% /boot
tmpfs tmpfs 183M 16K 183M 1% /run/user/42
tmpfs tmpfs 183M 0 183M 0% /run/user/0
192.168.100.20 | SUCCESS | rc=0 >>
文件系統 類型 容量 已用 可用 已用% 掛載點
/dev/mapper/cl-root xfs 17G 4.3G 13G 26% /
devtmpfs devtmpfs 897M 0 897M 0% /dev
tmpfs tmpfs 912M 84K 912M 1% /dev/shm
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 173M 842M 18% /boot
tmpfs tmpfs 183M 16K 183M 1% /run/user/42
tmpfs tmpfs 183M 0 183M 0% /run/user/0
/dev/sr0 iso9660 4.1G 4.1G 0 100% /mnt
web關鍵字需要提前在/etc/ansible/hosts文件中定義組。
Ansible的返回結果非常友好,一般會用三種顏色來表示執行結果:
- 紅色:表示執行過程出現異常;
- 橘黃顏色:表示命令執行后目標有狀態變化;
- 綠色:表示執行成功且沒有目標機器做修改;
Ansible模塊
6)service模塊 service模塊為用來管理遠程主機上的服務的模塊。常見的參數如下: name:被管理的服務名稱; state=started|stopped|restarted:動作包含啟動,關閉或重啟; enable=yes|no:表示是否設置該服務開機自啟動; runlevel:如果設定了enabled開機自啟動,則要定義在哪些運行目標下自動啟動; 示例如下: [root@centos01 ~]# ansible web -m service -a "name=httpd enabled=yes state=restarted"
<!--設置httpd服務重新啟動和開機自動啟動-->
2)shell模塊 shell模塊在遠程主機執行命令,相當於調用遠程主機的Shell進程,
然后在該Shell下打開一個子Shell運行命令。
和command模塊的區別是它支持Shell特性:如管道、重定向等。 示例如下: [root@centos01 ~]# ansible web -m shell -a "echo hello world " <!--輸出到屏幕-->
192.168.100.20 | SUCCESS | rc=0 >> hello world 192.168.100.30 | SUCCESS | rc=0 >> hello world [root@centos01 ~]# ansible web -m shell -a "echo hello world > /1.txt" <!--輸出到1.txt文件中-->
192.168.100.20 | SUCCESS | rc=0 >>
192.168.100.30 | SUCCESS | rc=0 >>
3)copy模塊 copy模塊用於復制指定主機文件到遠程主機的指定位置。常見的參數如下: dest:指出復制文件的目標目錄位置,使用絕對路徑。如果源是目錄,則目標也要是目錄,如果目標文件已存在,會覆蓋原有內容; src:指出源文件的路徑,可以使用相對路徑和絕對路徑,支持直接指定目錄。如果源是目錄,則目標也要是目錄; mode:指出復制時,目標文件的權限,可選; owner:指出復制時,目標文件的屬主,可選; group:指出復制時目標文件的屬組,可選; content:指出復制到目標主機上的內容,不能和src一起使用,相當於復制content指明的數據到目標文件中; 示例如下: [root@centos01 ~]# ansible web -m copy -a "src=/etc/hosts
dest=/root/a1.hosts mode=777 owner=root group=root"
<!--/將本機的hosts文件復制到web組中的所有主機上存放在家目錄下的a1.hosts目錄, 權限是777,屬主是root,屬組是root-->
4)hostname模塊 hostname模塊用於管理遠程主機上的主機名。常用的參數如下: name: 指明主機名; 示例如下: [root@centos01 ~]# ansible 192.168.100.20 -m hostname -a "name=test"
<!--將192.168.100.20的主機名改為test, 但是192.168.100.20需要敲一下bash才生效-->
5)yum模塊 yum模塊基於yum機制,對遠程主機管理程序包。常用的參數如下: name:程序包名稱,可以帶上版本號。若不指明版本,則默認為最新版本; state=present|latest|absent:指明對程序包執行的操作:
present表明安裝程序包,latest表示安裝最新版本的程序包,absent表示卸載程序包; disablerepo:在用yum安裝時,臨時禁用某個倉庫的ID; enablerepo:在用yum安裝時,臨時啟用某個倉庫的ID; conf_file:yum運行時的配置文件,而不是使用默認的配置文件; disable_gpg_check=yes|no:是否啟用完整性校驗功能; 示例如下: [root@centos01 ~]# ansible web -m shell -a "/usr/bin/rm -rf /etc/yum.repos.d/CentOS-*" <!--批量化刪除web組主機的yum源--> [root@centos01 ~]# ansible web -m shell -a "/usr/bin/mount /dev/cdrom /mnt" <!--批量化掛載光盤-->
[WARNING]: Consider using mount module rather than running mount
192.168.100.20 | SUCCESS | rc=0 >>
mount: /dev/sr0 寫保護,將以只讀方式掛載 192.168.100.30 | SUCCESS | rc=0 >>
mount: /dev/sr0 寫保護,將以只讀方式掛載 [root@centos01 ~]# ansible web -m yum -a "name=httpd
state=present" <!--批量化安裝httpd程序-->
[root@centos01 ~]# ansible web -m shell -a "rpm -qa | grep httpd"
<!--批量化查看安裝的httpd程序包--> [WARNING]: Consider using yum, dnf or zypper module rather than running rpm 192.168.100.20 | SUCCESS | rc=0 >> httpd-2.4.6-67.el7.centos.x86_64 httpd-tools-2.4.6-67.el7.centos.x86_64 192.168.100.30 | SUCCESS | rc=0 >> httpd-2.4.6-67.el7.centos.x86_64 httpd-tools-2.4.6-67.el7.centos.x86_64 [root@centos01 ~]# ansible web -m shell -a "systemctl start httpd" <!--批量啟動服務--> [root@centos01 ~]# ansible web -m shell -a "netstat -anptu | grep httpd"
<!--批量化監聽httpd服務是否啟動成功-->
192.168.100.20 | SUCCESS | rc=0 >> tcp6 0 0 :::80 :::* LISTEN 2072/httpd 192.168.100.30 | SUCCESS | rc=0 >> tcp6 0 0 :::80 :::* LISTEN 3098/httpd 管理端只是發送yum指令到被管理端,被管理端要存在可用的yum倉庫才可以成功安裝。
1)command模塊 command模塊在遠程主機執行命令,不支持管道、重定向等shell的特性。常用的參數如下: chdir:在遠程主機上運行命令前要提前進入的目錄; creates:在命令運行時創建一個文件,如果文件已存在,則不會執行創建任務; removes:在命令運行時移除一個文件,如果文件不存在,則不會執行移除任務; executeable:指明運行命令的shell程序; 在所有主機上運行“ls ./”命令,運行前切換到/home目錄下。操作如下: [root@centos01 ~]# ansible web -m command -a "chdir=/ ls ./"
7)user模塊 user模塊主要用於管理遠程主機上的用戶賬號。常見的參數如下: name:必選參數,賬號名稱; state=present|absent:創建賬號或者刪除賬號,present表示創建,absent表示刪除; system=yes|no:是否為系統賬戶; uid:用戶UID; group:用戶的基本組 groups:用戶的附加組; shell:默認使用的shell; home:用戶的家目錄; mve_home=yes|no: 如果設置的家目錄已經存在,是否將已存在的家目錄進行移動; pssword:用戶的密碼,建議使用加密后的字符串; comment: 用戶的注釋信息; remore=yes|no: 當state=absent時,是否要刪除用戶的家目錄; 創建用戶示例如下: [root@centos01 ~]# ansible web -m user -a "name=user01 system=yes uid=502 group=root groups=root shell=/etc/nologin home=/home/user01 password=pwd@123"
<!--在web組的所有主機上新建一個系統用戶,UID為502, 屬組是root,名字是user01,密碼是pwd@123--
2)Ansible-doc
Ansible-doc用來查詢ansible模塊文檔的說明,類似於man命令,針對每個模塊都有詳細的用法說明及應用案例介紹,語法如下:
ansible-doc [options] [module……]
列出支持的模塊:
[root@centos01 ~]#ansible-doc -l
查詢ping模塊的說明信息:
[root@centos01 ~]# ansible-doc ping
3)Ansible-playbook
Ansible-playbook是日常應用中使用頻率最高的命令,類似於Linux中的sh或source命令
,用來執行系列任務。其工作機制:通過讀取預先編寫好的playbook文件實現集中處理任務。
Ansible-playbook命令后跟yml格式的playbook文件,playbook文件存放了要執行的任務代碼,命令使用方式如下:
Ansible-playbook playbook.yml
<!--playbook.yml文件要提前編寫好,建議使用絕對路徑-->
4)Ansible-console
Ansible-console是Ansible為用戶提供的一款交互式工具,
類似於Windows的cmd或者是Linux中shell。
用戶可以在ansible-console虛擬出來的終端上像shell一樣使用Ansible內置的各種命令,
這為習慣於使用shell交互式方式的用戶提供了良好的使用體驗。在終端輸入ansible-console命令后,顯示如下:
[root@centos01 ~]# ansible-console
Welcome to the ansible console.
Type help or ? to list commands.
<!--輸入help或?獲取幫助-->
root@all (2)[f:5]$ cd web <!--使用cd命令切換主機或分組-->
root@web (2)[f:5]$ list <!--列出當前的設備-->
192.168.100.20
192.168.100.30
<!--支持Tab鍵補全,快捷鍵Ctrl+D或Ctrl+C即可退出當前的虛擬終端-->