注意:-a 參數後的命令用單引號;雙引號有可能會出問題,特別是在user模塊html
模塊一:測試目標主機是否在線,ping模塊web
主機若是在線,則回覆Pongshell
[root@ansible ~]# ansible web -m ping 192.168.30.36 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.30.32 | SUCCESS => { "changed": false, "ping": "pong" }
模塊二:command模塊和shell模塊緩存
用於在各被管理主機節點運行指定的命令服務器
shell與command的區別:command模塊是執行ansible自帶模塊執行,若是要用> < | & ‘ ‘等管道,須要使用shell模塊工具
[root@ansible tmp]# ansible web -m command -a 'uptime' 192.168.30.32 | SUCCESS | rc=0 >> 21:10:43 up 138 days, 1:34, 1 user, load average: 0.00, 0.01, 0.05 192.168.30.36 | SUCCESS | rc=0 >> 21:08:30 up 95 days, 3:02, 4 users, load average: 0.00, 0.00, 0.00
shell模塊:測試
[root@ansible tmp]# ansible web -m shell -a 'cat /etc/fstab | grep ^UUID' 192.168.30.36 | SUCCESS | rc=0 >> UUID=28b3513d-9e6f-42a8-ade0-7700573fed2a /boot ext4 defaults 1 2 192.168.30.32 | SUCCESS | rc=0 >> UUID=de2e369a-c0e8-4188-89e0-db1f4aded764 /boot xfs defaults 0 0
相關選項以下:fetch
creates:一個文件名,當文件名存在,則該命令不執行
chdir:在執行指令以前,先切換到該目錄
free_from:要執行的Linux指令
removes:一個文件名,當文件名不存在,則該命令不執行
executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑
參考:<https://docs.ansible.com/ansible/latest/modules/shell_module.html>ui
模塊三:遠程複製備份--copy模塊加密
[root@ansible tmp]# ansible web -m copy -a 'src=/etc/hosts dest=/tmp/hosts'
相關選項:
backup:在覆蓋前,將源文件備份,備份文件包含時間信息,有倆選項:yes|no content:用於替代」src」,能夠直接設定指定文件的值 dest:必選項,要將源文件複製到遠程主機的絕對路徑,若是源文件是一個目錄,那麼該路徑必須是個目錄 directory_mode:遞歸設定目錄的權限,默認爲系統默認權限 force:若是目標主機包含該文件,但內容不一樣,若是設置爲yes,則強制覆蓋,若是爲no,則只有當目標主機的目標位置不存在該文件時,才複製。默認爲yes others:全部的file模塊裏的選項均可以在這裏使用 src:被複制到遠程主機的本地文件,能夠是絕對路徑,也能夠是相對路徑。若是路徑是一個目錄,他將遞歸複製。這種狀況路徑使用」/」來結尾,則只複製目錄裏的內容,若是沒有使用「/」,則包含目錄在內的所有內容複製,相似與rsync。 owner:指定屬主 group:指定屬組 mode:指定權限,能夠以數字指定好比0644
參考:<https://docs.ansible.com/ansible/latest/modules/copy_module.html>
模塊四:對遠程文件管理--file模塊
修改文件權限: [root@ansible ~]# ansible web -m file -a 'path=/srv/a.txt mode=600 owner=snow group=snow' 建立一個文件: [root@ansible ~]# ansible web -m file -a 'dest=/srv/a.txt state=touch' 建立一個目錄文件: [root@ansible ~]# ansible web -m file -a 'path=/srv/haha mode=600 state=directory' 建立一個軟連接: [root@ansible ~]# ansible web -m file -a 'dest=/srv/a.lnk src=/srv/a.txt state=link' 刪除文件: [root@ansible ~]# ansible web -m file -a 'path=/srv/a.lnk state=absent'
相關選項:
force:須要在兩種狀況下強制建立軟連接,一種源文件不存在,但以後會創建的狀況;另外一種是目標軟連接存在,須要先取消以前的連接,再建立新連接,有兩個選項:yes|no path:必選項,定義文件/目錄的路徑(alias:dest,name) recurse:遞歸設置文件的屬性,只對目錄有效 src:被連接的源文件路徑,只能用於state=link狀況 dest:目標文件路徑,只能用於state-link狀況 state: directory:若是目錄文件不存在,就建立目錄文件 *file:即便文件不存在也會被建立 link:建立軟連接 hard:建立硬連接 touch:若是文件不存在,則會建立一個新的文件,若是文件或目錄已存在,則更新其最後修改時間 absent:刪除目錄、文件或者取消連接文件
參考:<https://docs.ansible.com/ansible/latest/modules/file_module.html>
fetch模塊
: 從遠程服務器拉取文件至本機,只能fetch文件,不能fetch目錄,若是拉目錄,先tar/zip 再拉到本機便可。
使用參考:<https://docs.ansible.com/ansible/latest/modules/fetch_module.html>
模塊五:程序包管理工具--yum模塊
安裝程序包(可接版本號): [root@ansible ~]# ansible web -m yum -a 'name=httpd state=present' 安裝最新程序包: [root@ansible ~]# ansible web -m yum -a 'name=httpd state=latest' 卸載程序包: [root@ansible ~]# ansible web -m yum -a 'name=httpd state=absent'
相關選項:
conf_file #設定遠程yum安裝時所依賴的配置文件。如配置文件沒有在默認的位置。 disable_gpg_check #是否禁止GPG checking,只用於`present' or `latest'。 disablerepo #臨時禁止使用yum庫。 只用於安裝或更新時。 enablerepo #臨時使用的yum庫。只用於安裝或更新時。 name= #所安裝的包的名稱 state= #present安裝, latest安裝最新的, absent 卸載軟件。 update_cache #強制更新yum的緩存
參考:<https://docs.ansible.com/ansible/latest/modules/yum_module.html>
注意:此模塊只能在Python2上使用,在Python3上須要使用dnf模塊用於包管理
使用參考:<https://docs.ansible.com/ansible/latest/modules/dnf_module.html>
模塊六:服務程序管理--Service模塊
啓動服務: [root@ansible ~]# ansible web -m service -a 'name=httpd state=started' 開機啓動服務: [root@ansible ~]# ansible web -m service -a 'name=httpd enabled=yes'
相關選項:
arguments #命令行提供額外的參數 enabled #設置開機啓動。 name= #服務名稱 runlevel #開機啓動的級別,通常不用指定。 sleep #在重啓服務的過程當中,是否等待。如在服務關閉之後等待2秒再啓動。 state #started啓動服務, stopped中止服務, restarted重啓服務, reloaded重載配置
參考:<https://docs.ansible.com/ansible/latest/modules/service_module.html>
模塊七:管理計劃任務--cron模塊
[root@ansible ~]# ansible web -m cron -a 'name="sync time" minute=*/10 job="/usr/sbin/ntpdate ntp.aliyun.com"'
相關選項:
backup= # 若是設置,建立一個crontab備份 cron_file= #若是指定, 將使用這個文件替換遠程主機上cron.d目錄下用戶的任務計劃,而不是單個用戶計劃任務
day= # 日應該運行的工做( 1-31, *, */2, etc ) hour= # 小時 ( 0-23, *, */2, etc )
minute= #分鐘( 0-59, *, */2, etc )
month= # 月( 1-12, *, */2, etc )
weekday # 周 ( 0-6 for Sunday-Saturday, *, etc )
job= #指明運行的命令是什麼 name= #定時任務描述 reboot # 任務在重啓時運行,不建議使用,建議使用special_time special_time # 指定何時執行,參數:reboot,annually,monthly,weekly,daily,hourly state #指定狀態,prsent表示添加定時任務,也是默認設置,absent表示刪除定時任務 user # 以哪一個用戶的身份執行
參考:<https://docs.ansible.com/ansible/latest/modules/cron_module.html>
模塊八:遠程主機執行本地腳本--script模塊
[root@ansible ~]# ansible web -m script -a '/tmp/a.sh'
相關選項:
creates:一個文件名,當文件名存在,則該命令不執行
chdir:在執行指令以前,先切換到該目錄
free_from:要執行的Linux指令
removes:一個文件名,當文件名不存在,則該命令不執行
executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑
decrypt:使用Vault控制源文件的自動解碼,選項yes|no
參考:<https://docs.ansible.com/ansible/latest/modules/script_module.html>
模塊九:用戶管理--user模塊
建立加密密碼:
[root@ansible ~]# echo 123456 | openssl passwd -1 -stdin $1$wMroVeEW$2ImLQiNupnwDJ5nk86F2X0
建立新用戶:
[root@ansible ~]# ansible web -m user -a 'name=wolf system=yes password=$1$wMroVeEW$2ImLQiNupnwDJ5nk86F2X0 state=present'
更新用戶密碼:
[root@ansible ~]# ansible web -m user -a 'name=wolf update_password=always password=$1$wMroVeEW$2ImLQiNupnwDJ5nk86F2X0'
刪除用戶:
[root@ansible ~]# ansible web -m user -a 'name=wolf remove=yes state=absent'
相關選項:
comment # 用戶的描述信息 createhom # 是否建立家目錄,yes,默認項,即建立家目錄;no,建立用戶時不建立家目錄. force # 在使用`state=absent'是, 行爲與`userdel --force'一致. group # 指定基本組 groups # 指定附加組,若是指定爲('groups=')表示刪除全部組 home # 指定用戶家目錄 login_class #能夠設置用戶的登陸類 FreeBSD, OpenBSD and NetBSD系統. move_home # 若是設置爲`home='時, 試圖將用戶主目錄移動到指定的目錄 name= # 指定用戶名 non_unique # 該選項容許改變非惟一的用戶ID值 password # 指定用戶密碼,password參數須要接受md5加密後的值 remove # yes:刪除家目錄,須要指定此參數;no:默認項,刪除用戶時默認不刪除用戶家目錄. shell # 指定默認shell state #設置賬號狀態,默認值爲present表示建立,可不寫,指定值爲absent表示刪除 system # 當建立一個用戶,設置這個用戶是系統用戶。這個設置不能更改現有用戶。 uid #指定用戶的uid update_password # 更新用戶密碼,always:新密碼和舊密碼不一樣時進行修改,on_create:爲新建用戶指定密碼 expires #指明密碼的過時時間
參考:<https://docs.ansible.com/ansible/latest/modules/user_module.html>
模塊十:收集遠程主機的信息--setup模塊
收集可用的facts用於內建變量。每一個主機的各類信息,cpu顆數、內存大小等。會存在facts中的某個變量中。調用後返回不少對應主機的信息,在後面的操做中能夠根據不一樣的信息來作不一樣的操做。使用filter參數過濾,如redhat系列用yum安裝,而debian系列用apt來安裝軟件
[root@ansible ~]# ansible web -m setup –a ‘filter=ansible_*_mb’
參考:<https://docs.ansible.com/ansible/latest/modules/setup_module.html>