CentOS 7.6安装使用Ansible(二):Ansible常用的27个模块
三、Ansible常用模塊介紹:
1、ping:測試被管控主機連通性
# ansible all --list-hosts
# ansible dbsrvs --list-hosts
查看參數:# ansible-doc -s ping
示例:測試所有被管控主機的連通性
# ansible all -m ping
備注:ping模塊后無需加key=value格式的參數列表
2、hostname:設置主機名
查看參數:# ansible-doc -s hostname
示例:將被管控主機192.168.1.144的主機名修改為144
# ansible 192.168.1.144 -m hostname -a 'name=144'
3、group:增加或刪除用戶組
查看參數:# ansible-doc -s group
示例1:在所有被管控主機創建gid為2000的用戶組testgroup
# ansible all -m group -a 'gid=2000 name=testgroup state=present system=no'
示例2:刪除testgroup用戶組
# ansible all -m group -a 'gid=2000 name=testgroup state=absent'
4、user:管理用戶賬戶
查看參數:# ansible-doc -s user
示例1:在所有被管控主機創建uid為3000、基本組為mygroup、附加組為testgroup、shell為/bin/bash、注釋為test的非系統用戶testuser
# ansible all -m user -a 'uid=3000 group=mygroup groups=testgroup shell=/bin/bash comment=test system=no state=present name=testuser append=yes'
備注:
?? 基本組mygroup和附加組testgroup必須事先存在
?? 當不使用group設置基本組時,默認基本組與用戶名相同
?? 當不使用groups設置附加組時,默認附加組與用戶名相同
?? 可以設置多個附加組,用逗號隔開
?? append:默認為no,覆蓋原來多個附加組,設置為yes,表示追加附加組到現有的附加組
示例2:刪除用戶testuser及其家目錄
#?ansible all -m user -a 'uid=3000 state=absent name=testuser remove=yes'
5、shell:在被管控主機執行命令
查看參數:# ansible-doc -s shell
示例:在所有被管控主機設置用戶testuser的密碼為123456
# ansible all -m shell -a 'echo 123456 | passwd --stdin testuser'
備注:shell模塊后直接加需要執行的命令,而非key=value格式的參數列表
6、command:在被管控主機執行命令(無法執行管道、重定向等命令)
查看參數:# ansible-doc -s command
示例:查看所有被管控主機的網卡信息
# ansible all -m command -a 'ip a l'
備注:command模塊后直接加需要執行的命令,而非key=value格式的參數列表
7、fetch:從被管控主機拉取文件至Ansible主機
查看參數:# ansible-doc -s fetch
示例:將被管控主機中的/software/test.txt文件復制至本地Ansible主機的/tmp目錄中
# ansible all -m fetch -a 'src=/software/test.txt dest=/tmp/'
備注:
?? 被管控主機中文件/software/test.txt必須事先存在
?? 參數src中指定的必須是文件,不能是目錄
???如果被管控主機在hosts文件中定義了主機別名,則Ansible主機本地保存的文件路徑為:/tmp/被管控主機別名/software/test.txt;如果直接定義了IP地址,則路徑為:/tmp/被管控主機IP/software/test.txt
8、copy:將Ansible主機文件復制至被管控主機
查看參數:# ansible-doc -s copy
示例1:將本地文件/etc/fstab復制至所有被管控主機的/software目錄下,且重命名為fstab.ansible,文件屬主為testuser,屬組為testgroup
# ansible all -m copy -a 'src=/etc/fstab dest=/software/fstab.ansible owner=testuser group=testgroup backup=yes'
備注:
?? 如果參數src和參數dest均為文件,則參數dest的父目錄/software必須事先存在
?? 遠程主機用戶testuser和用戶組testgroup必須事先存在
?? 參數backup:創建一個包含時間戳信息的備份文件
示例2:將本地/tmp目錄中的所有文件復制至所有被管控主機的/software目錄下,且文件權限修改為600
# ansible all -m copy -a 'src=/tmp/ dest=/software mode=0600'
備注:
?? 目錄/software必須事先存在
?? 權限的寫法
??2? 0600
? ??2? "600"
? ??2? 1.8版本開始,支持類似u+rwx或u=rw,g=r,o=r
? ??2? 2.3版本開始,支持mode=preserve,表示將授予該文件與源文件相同的權限
示例3:將本地/tmp目錄遞歸復制至所有被管控主機的/test目錄下,且新創建的目錄權限為755,目錄和文件的屬主均為testuser,屬組均為testgroup
# ansible all -m copy -a 'src=/tmp dest=/test directory_mode=0755 owner=testuser group=testgroup'
備注:
?? 如果遠程主機中不存在/test目錄,并且參數dest以“/”結尾或參數src是目錄,則遠程主機會自動創建/test目錄
?? 遠程主機用戶testuser和用戶組testgroup必須事先存在
?? directory_mode:遞歸的設定目錄的權限,默認為系統默認權限
示例4:在所有被管控主機的/tmp目錄中新建屬主為testuser、屬組為testgroup、權限為600,且名稱為test.txt的文件,內容為hello world
# ansible all -m copy -a 'content="hello world\n" dest=/tmp/test.txt owner=testuser group=testgroup mode=0600'
9、file:設置文件屬性
查看參數:# ansible-doc -s file
示例1:在所有被管控主機的/tmp目錄中創建名稱為a.txt的文件
# ansible all -m file -a 'path=/tmp/a.txt state=touch'
示例2:在所有被管控主機的/tmp目錄中創建a.txt的符號鏈接文件a.link
# ansible all -m file -a 'src=/tmp/a.txt path=/tmp/a.link state=link'
備注:參數src只應用于state=link或state=hard
示例3:在所有被管控主機的/tmp目錄中創建屬主為testuser、屬組為testgroup、權限為700,且名稱為test的目錄
# ansible all -m file -a 'path=/tmp/test owner=testuser group=testgroup mode=0700 state=directory'
示例4:在所有被管控主機的/tmp目錄中刪除test目錄
# ansible all -m file -a 'path=/tmp/test state=absent'
10、cron:管理任務計劃
查看參數:# ansible-doc -s cron
示例1:在所有被管控主機執行任務計劃,要求每3分鐘同步內網NTP服務器192.168.1.142
# ansible all -m cron -a 'minute=*/3 job="/usr/sbin/ntpdate 192.168.1.142 &> /dev/null" name=ntpdate user=root state=present backup=yes'
備注:
?? 被管控主機需要先安裝ntpdate軟件包
?? 如果時間單位(minute、hour、day等)設定的參數都未指定時,任務計劃的時間默認設定為“* * * * *”,表示每分鐘都會執行一次任務計劃
?? 參數backup:如果此參數的值設置為yes,那么當修改或者刪除對應的任務計劃時,會先對任務計劃進行備份,然后再對任務計劃進行修改或者刪除,cron模塊會在被管控主機的/tmp目錄中創建備份文件,以crontab開頭且隨機加入一些字符,具體的備份文件名稱會在返回信息的backup_file字段中看到
示例2:在所有被管控主機執行任務計劃,要求以testuser用戶身份、每月的4號和每周一至周三的上午10點輸出一次Hello World
# ansible all -m cron -a 'minute=0 hour=10 day=4 month=* weekday=1-3 job="echo Hello World" name=echo user=testuser state=present'
備注:CentOS 7.6的echo路徑為:/usr/bin/echo;CentOS 6.10的echo路徑為:/bin/echo
示例3:所有被管控主機刪除名稱為ntpdate的任務計劃
# ansible all -m cron -a 'name=ntpdate state=absent'
示例4:所有被管控主機創建名稱為“test special time”的任務計劃,任務將在重啟時執行,任務內容為輸出test字符
# ansible all -m cron -a 'name="test special time" special_time=reboot job="echo test" state=present'
備注:參數special_time的可選值包括reboot(重啟時)、yearly(每年)、annually(每年,與yearly相同)、monthly(每月)、weekly(每周)、daily(每天)和hourly(每小時)
11、yum:使用yum包管理器管理軟件包
查看參數:# ansible-doc -s yum
示例1:所有被管控主機以yum方式安裝最新版本的httpd和php
# ansible all -m yum -a 'name=httpd,php state=latest'
備注:參數state的可選值包括安裝(present=installed、latest)和卸載(absent=removed)
示例2:被管控主機192.168.1.144中安裝版本為1.12.2的nginx
# ansible 192.168.1.144 -m yum -a 'name=nginx-1.12.2 state=present'
備注:CentOS 6.10 epel源中nginx的版本為1.10.2,CentOS 7.6 epel源中nginx的版本為1.12.2
示例3:所有被管控主機安裝/software目錄下的rpm軟件包
# ansible all -m yum -a 'name=/software/jdk-8u212-linux-x64.rpm state=present'
備注:rpm軟件包在被管控主機,而非Ansible主機
示例4:所有被管控主機以yum方式刪除php
# ansible all -m yum -a 'name=php state=absent'
示例5:所有被管控主機安裝Development Tools軟件包組:
# ansible all -m yum -a 'name="@Development Tools" state=present'
備注:使用命令# yum grouplist查看軟件包組信息
12、service:管理服務
查看參數:# ansible-doc -s service
示例1:所有被管控主機啟動httpd服務,并設置開機自啟
# ansible all -m service -a 'name=httpd state=started enabled=yes'
備注:參數state的可選值包括started、stopped、restarted和reloaded
示例2:所有被管控主機停止httpd服務,并取消開機自啟
# ansible all -m service -a 'name=httpd state=stopped enabled=no'
13、script:先將Ansible主機中的腳本傳輸至被管控主機,再執行
查看參數:# ansible-doc -s script
示例:所有被管控主機執行Ansible主機中的/scripts/test.sh腳本,目標是在所有被管控主機的/tmp目錄中創建名稱為script.txt的文件
# cat /scripts/test.sh
#!/bin/bash
touch script.txt
# ansible all -m script -a 'chdir=/tmp /scripts/test.sh'
備注:
?? 腳本在Ansible主機中,而非被管控主機,無需手動復制腳本至被管控主機后再執行
?? script模塊后直接加需要執行的腳本文件,可以無需加key=value格式的參數列表
14、setup:收集被管控主機信息
查看參數:# ansible-doc -s setup
示例1:收集所有被管控主機的所有信息
# ansible all -m setup | less
示例2:收集所有被管控主機的操作系統發行版信息
# ansible all -m setup -a 'filter=ansible_distribution'
備注:在playbook里經常會用到的一個參數gather_facts就與setup模塊相關
15、template:將模板文件復制至被管控主機
查看參數:# ansible-doc -s template
示例:將redis模板文件redis.conf.j2復制至所有被管控主機
# ansible all -m template -a 'src=redis.conf.j2 dest=/etc/redis.conf owner=redis group=root mode=0640 backup=yes'
16、unarchive:將歸檔文件解壓后復制至被管控主機指定路徑
查看參數:# ansible-doc -s unarchive
示例:將Ansible主機中/software目錄下的apache-tomcat-8.5.40.tar.gz解壓至所有被管控主機的/usr/local目錄下,無需復制apache-tomcat-8.5.40.tar.gz至所有被管控主機
# ansible all -m unarchive -a 'src=/software/apache-tomcat-8.5.40.tar.gz dest=/usr/local/'
?17、debug:執行命令過程中打印信息
查看參數:# ansible-doc -s debug
示例:輸出“hello world”信息
# ansible all -m debug -a 'msg="hello world"'
18、reboot:重啟被管控主機
查看參數:# ansible-doc -s reboot
示例:重啟所有被管控主機
# ansible all -m reboot
備注:reboot模塊后無需加key=value格式的參數列表
19、systemd:管理服務
查看參數:# ansible-doc -s systemd
示例1:被管控主機192.168.1.144重啟httpd服務,并設置開機自啟
# ansible 192.168.1.144 -m systemd -a 'name=httpd.service state=restarted enabled=yes'
備注:
?? systemd模塊僅可用于CentOS 7.x系統
?? 參數state的可選值包括started、stopped、restarted和reloaded
示例2:被管控主機192.168.1.144停止httpd服務,并取消開機自啟
# ansible 192.168.1.144 -m systemd -a 'name=httpd.service state=stopped enabled=no'
20、sysctl:管理sysctl.conf
查看參數:# ansible-doc -s sysctl
示例:將所有被管控主機中/etc/sysctl.conf文件的net.ipv4.ip_forward值設置為1
# ansible all -m sysctl -a 'sysctl_file=/etc/sysctl.conf name=net.ipv4.ip_forward value=1 reload=yes state=present'
21、selinux:改變SELinux的策略和狀態
查看參數:# ansible-doc -s selinux
示例:所有被管控主機禁用SELinux
# ansible all -m selinux -a 'state=disabled'
備注:被管控主機需要先安裝libselinux-python軟件包
22、stat:檢索文件或者文件系統的狀態
查看參數:# ansible-doc -s stat
示例:獲取所有被管控主機中/etc/fstab文件的狀態信息,包括atime、ctime、mtime、uid、gid、inode、mode、md5等
# ansible all -m stat -a 'path=/etc/fstab get_checksum=yes checksum_algorithm=md5'
備注:參數checksum_algorithm的可選值包括md5、sha1、sha224、sha256、sha384和sha512
23、replace:使用向后引用的正則表達式替換文件中特定字符串的所有實例
查看參數:# ansible-doc -s replace
示例:將被管控主機192.168.1.144中/tmp/test.txt文件內的HELLOWORLD全部替換成helloworld
# cat /tmp/test.txt
HELLOWORLD
helloworld
HELLOworld
helloWORLD
# ansible 192.168.1.144 -m replace -a 'path=/tmp/test.txt regexp=HELLOWORLD replace=helloworld backup=yes'
24、lineinfile:管理文本文件中的行
查看參數:# ansible-doc -s lineinfile
示例:將所有被管控主機中/etc/selinux/config文件內的SELinux的值設置為disabled
# ansible all -m lineinfile -a 'path=/etc/selinux/config regexp="^SELINUX=" line="SELINUX=disabled" state=present backup=yes'
25、blockinfile:插入/更新/刪除由標記線包圍的文本塊
查看參數:# ansible-doc -s blockinfile
示例1:在所有被管控主機中/tmp/service.txt文件的開頭插入一行“hello world”
# cat /tmp/service.txt
111111
222222
333333
# ansible all -m blockinfile -a 'path=/tmp/service.txt block="hello world" marker="#{mark} test echo" insertbefore=BOF state=present backup=yes'
備注:BOF --> Begin Of File
示例2:在所有被管控主機中/tmp/test.txt文件的末尾插入一行“welcome home”
# cat /tmp/test.txt
111111
222222
333333
# ansible all -m blockinfile -a 'path=/tmp/test.txt block="welcome home" marker="#{mark} test" insertafter=EOF state=present backup=yes'
備注:EOF --> End Of File,默認操作就是將文本塊插入到文檔的末尾,可以不加參數EOF
示例3:在所有被管控主機中/tmp/script.sh文件的“#!/bin/sh”開頭的行后插入HELLO WORLD
# cat /tmp/script.sh
#!/bin/sh
?
#Licensed to the Apache Software Foundation (ASF) under one or more
# ansible all -m blockinfile -a 'path=/tmp/script.sh block="HELLO WORLD" marker="#{mark} test reg" insertafter="^#!/bin/sh" state=present backup=yes'
26、yum_repository:增加或刪除yum倉庫
查看參數:# ansible-doc -s yum_repository
示例:在所有被管控主機中創建如下yum倉庫
# cat /etc/yum.repos.d/MariaDB.repo? ? ? ? ? ? ? ? ? ? ? ? ? //倉庫名稱由file參數定義
[mariadb]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //由name參數定義
name=MariaDB Repo? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //由description參數定義
baseurl=http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=1
# ansible all -m yum_repository -a 'file=MariaDB name=mariadb description="MariaDB Repo" baseurl=http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/ gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=yes enabled=yes owner=root group=root mode=0644 state=present'
27、mysql_user:增加或刪除MySQL數據庫中的用戶
查看參數:# ansible-doc -s mysql_user
示例:在被管控主機的MySQL數據庫中通過root@localhost用戶,密碼123456,增加testuser@%用戶,密碼654321,并對所有庫的所有表擁有任何權限
# ansible all -m mysql_user -a 'login_host=localhost login_user=root login_password=123456 name=testuser host="%" password=654321 priv=*.*:all state=present'
轉載于:https://blog.51cto.com/qiuyue/2384259
總結
以上是生活随笔為你收集整理的CentOS 7.6安装使用Ansible(二):Ansible常用的27个模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang 开源代理
- 下一篇: View的绘制-draw流程详解