上篇中咱們已經學了ansible 的幾個模塊, 接下來再來學習幾個, 那麼你是否知道ansible 一共有多少模塊呢? 能夠用一下命令查看python
[root@localhost ~]# ansible-doc -l|wc -l # 統計ansible有多少模塊 2080
請先自行回顧如下yum是什麼?yum和rpm(redhat package manager)的區別是什麼?linux
yum源配置文件中部份內容nginx
[epel] name=Extra Packages for Enterprise Linux 7 - $basearch # 名字 baseurl=http://mirrors.aliyun.com/epel/7/$basearch # rpm源的地址,能夠寫http,https,ftp,Samba,file: failovermethod=priority enabled=1 # 是否開啓,1表明開啓,0表示關閉 gpgcheck=0 # 是否校驗簽名,1表明校驗,0表示不校驗 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
回顧yum相關知識:web
yum list # 查看全部已經安裝和能夠安裝的程序包 yum list|grep pip # 查看 pip 相關程序包 yum grouplist # 查看包組信息,包含已經安裝和未安裝的包組信息 yum groupinstall "包組名" # 安裝包組 rpm -q 包名 # 查看是否已經安裝了某包,如wget
查看ansible提供的yum模塊的幫助信息:shell
[root@localhost ~]# ansible-doc -s yum # 查看幫助信息,部分參數以下 disablerepo # 禁用源 enablerepo # 啓用源 name # 包名 state # Whether to install (`present' or `installed', `latest'), or remove (`absent' or `removed') a package.
示例: 編程
ansible web -m yum -a 'name=wget' # 安裝wget ansible web -m yum -a 'name=python2-pip' # 安裝python2-pip ansible web -m yum -a 'name=wget state=absent' # 卸載軟件包 ansible web -m yum -a 'name="@Development Tools"' # 安裝包組,注意帶「@」符號
回顧pip相關知識:flask
pip install 包名 # 安裝python包,如flask pip freeze > requirements.txt # 將python的環境打包到文件中 pip install -r requirements.txt # 安裝文件中的包 pip list # 查看全部的已安裝成功的包
查看ansible提供的pip模塊的幫助信息:centos
[root@localhost ~]# ansible-doc -s pip # 查看幫助信息,部分參數以下: chdir name # 包名 requirements # 指定文件,安裝文件中全部的包 virtualenv
示例:併發
ansible web -m pip -a 'name=flask' # 安裝flask模塊
回顧linux關於查看進程和端口號、開啓服務等相關知識:編程語言
ps -ef|grep nginx # 查看nginx進程 ss -tnlp # 查看端口信息 systemctl start nginx # centos7 設置開機自啓動nginx service nginx start # centos6 設置開機自啓動nginx systemctl enabled nginx # centos7 開機自啓動nginx chkconfig nginx on # centos6開機自啓動nginx
查看ansible提供的service模塊幫助文檔:
root@localhost ~]# ansible-doc -s service # 查看service模塊幫助文檔,部分參數以下: name # 服務名 state # 狀態,有started,stopped,restarted,reloaded<br>enabled # 設置開機自啓動
ansible web -m service -a 'name=nginx state=started' # 啓動nginx ansible web -m service -a 'name=nginx state=stopped' # 關閉nginx
回顧linux定時任務相關知識:
* * * * * job 分 時 日 月 周 任務 0 */2 * * * job # 每隔兩個小時 0 12,13 * * * job # 12點和13點 0 12-17 * * * job # 12點到17點 0 12-17/2 * * 1,3,6,0 # 周1,周3,周6,周7 的 12點到17點每隔兩個小時,注意:0和7都表明週日 crontab -e # 編輯計劃任務,進入編輯模式 crontab -l # 查看計劃任務 crontab -r # 刪除計劃任務
查看ansible的cron模塊幫助文檔:
[root@localhost ~]# ansible-doc -s cron # 查看cron模塊,部分參數以下: day # 天 disabled # 禁用 hour # 小時 job # 任務 minute # 分鐘 month # 月 name # 任務名字 weekday # 周
示例:
ansible db -m cron -a 'minute=26 job="touch /tmp/xzmly.txt" name=touchfile' # 新建一個計劃任務 ansible db -m cron -a "name=touchfile state=absent" # 刪除一個計劃任務 ansible db -m cron -a 'minute=26 job="touch /tmp/xzmly.txt" name=touchfile disabled=yes' # 禁用計劃任務, 以# 開始表示禁用
回顧linux用戶和用戶組的相關知識:
用戶: 管理員 root 0 普通用戶 系統用戶 不能登陸 1-999 centos7 1-499 centos6 登陸用戶 能夠登陸 1000-65535 centos7 500-65535 centos6 用戶組: 管理員組 root 0 系統用戶組 1-999 centos7 1-499 centos6 登陸用戶組 1000-65535 centos7 500-65535 centos6 -d 指定用戶的家目錄 -g 指定用戶的組 -G 執行用戶的附加組 -s 指定登陸後使用的shell -r 建立一個系統組 useradd -r wusir # 建立系統用戶,從999開始倒序 useradd -s /sbin/nologin alexsb # 建立的是普通用戶,從1000開始升序 useradd -d /opt/alexsb2 alexsb2 # 建立用戶時指定用戶的家目錄 useradd -u 3000 alexsb6 # 建立用戶並指定用戶的uid userdel alex # 刪除用戶 userdel -r alexsb2 # 刪除用戶並刪除用戶的家目錄 groupadd yuchao # 建立用戶組 groupdel yuchao # 刪除用戶組
查看ansible的user模塊幫助文檔:
[root@localhost ~]# ansible-doc -s user # 查看user模塊的幫助文檔,部分參數以下: group # 組 groups # 附加組 home # 家目錄 name # 用戶名 password # 密碼 remove # This only affects `state=absent', it attempts to remove directories associated with. 即僅當state=absent時有影響,刪除用戶的同時刪除用戶家目錄 shell # 用戶登陸後使用的shell system # 建立一個系統用戶 uid # 用來指定用戶的id state # 狀態
示例:
ansible db -m user -a 'name=wulaoshi uid=4000 home=/opt/wulaoshi groups=root shell=/sbin/nologin' # 建立一個用戶, 並指定用戶的id , 用戶的家目錄, 用戶的附加組, 用戶的shell ansible db -m user -a 'name=wulaoshi state=absent' # 刪除用戶可是不刪除用戶的家目錄 ansible db -m user -a 'name=wulaoshi3 state=absent remove=yes' # 刪除用戶並刪除用戶的家目錄
查看ansible的group模塊幫助文檔:
[root@localhost ~]# ansible-doc -s group # 查看group的幫助文檔,部分參數以下: gid # 組的id name # 組名 system # 系統組 state # 狀態
示例:
ansible db -m group -a 'name=wulaoshi system=yes' #建立系統組 ansible db -m group -a 'name=wulaoshi state=absent' # 刪除組
首先用咱們現有的ansible知識解決以下需求:
管控機經過ansible爲web組的被管控機做以下操做: 建立一個用戶組alex10 建立一個用戶wusir10 把/etc/fstab文件複製到遠程主機(即被管控機)上/tmp/f 安裝nginx,並啓動,設置開機自啓動
解決辦法:
ansible web -m group -a 'name=alex10' ansible web -m user -a 'name=wusir10' ansible web -m copy -a 'src=/etc/fstab dest=/tmp/f' ansible web -m yum -a 'name=nginx' ansible web -m service -a 'name=nginx enabled=yes'
思考:觀察上面的解決方法,你有沒有發現什麼問題?如何解決?
沒錯,就是有不少重複的部分,並且想要再執行一遍就要再運行一遍命令!那麼咱們是否是能夠寫一個腳原本一次性執行,且想要何時執行就何時執行,問題又來了,如何寫?用什麼語言寫?答案就是用yaml語言來寫!
咱們見過的用來寫配置文件的語言有xml,還有uwsgi的配置文件後綴是.ini,而接下來要學習使用的一種編程語言是yaml,它能夠用來寫配置文件。語法格式以下:
字典: key: value
列表: [] -
後綴名:.yaml 或者 .yml
注意:它的語法格式很是嚴格,冒號後邊必須有空格,等號後邊必定不能有空格,等等,本身去嘗試一下!
冒泡後面必須是空格
等號後面不能有空格
-後面也要有空格
嚴格對齊
[root@localhost ~]# ansible-playbook -h # 查看ansible-playbook的命令格式,ansible-playbook [options] playbook.yml [playbook2 ...] ,部分參數以下: -C, --check # 檢查,白跑,幹跑 -f FORKS, --forks=FORKS # 用來作併發 --list-hosts # 列出主機列表 --syntax-check # 語法檢查
示例:使用yaml編寫配置文件的方式解決上面問題
[root@localhost ~]# mkdir yaml # 建立yaml目錄,並進入該目錄 [root@localhost yaml]# vi p1.yml # 建立配置文件p1.yml,寫入以下內容,嚴格安裝下面格式 - hosts: web tasks: - name: creategroup group: name=sb - name: createuser user: name=alex [root@localhost yaml]# ansible-playbook p1.yml
執行順序:從上往下
特性:冪等性,即無論執行多少遍,結果都是同樣的
[root@localhost yaml]# vi p2.yml #建立配置文件p2.yml 寫入以下內容 注意有參數 - host: db tasks: - name: create{{ user }} user: name={{ user }}
分析:上面的配置文件中含有參數,那麼咱們該如何傳參?有如下五種方法:
第一種:命令的方式,即便用參數 "-e"
ansible-playbook -e 'user=alexsb10' p2.yml
第二種:yml文件中vars的方式
- hosts: db vars: - user: alexsb14 tasks: - name: create{{ user }} user: name={{ user }}
第三種:ansible的hosts文件之一
[db] 192.168.107.132 user=alexsb11 192.168.107.133 user=alexsb12
第四種:ansible的hosts文件之二
[db.vars] #表示組的參數 user=alexsb13
第五種:yml文件中註冊的方式
- hosts: db tasks: - name: sum shell: echo 7+8|bc # 這個是linux中計算 register: user - name: createuser user: name={{ user.stdout }}
總結:傳參方式之間有優先級:-e > playbook vars > hosts文件
echo 3+4|bc # linux計算