ansible(2)

1、ansible模塊(yum、pip、service、conr、user、group)

  上篇中咱們已經學了ansible的幾個模塊,接下來再來學習幾個,那麼你是否知道ansible一共有多少模塊呢?能夠用如下命令查看:python

[root@localhost ~]# ansible-doc -l|wc -l         # 統計ansible有多少模塊
2080
一、yum模塊

  請先自行回顧如下yum是什麼?yum和rpm(redhat package manager)的區別是什麼?linux

[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源配置文件中部份內容

   回顧yum相關知識:nginx

yum list                    # 查看全部已經安裝和能夠安裝的程序包
yum list|grep pip            # 查看 pip 相關程序包
yum grouplist                 # 查看包組信息,包含已經安裝和未安裝的包組信息
yum groupinstall "包組名"      # 安裝包組
rpm -q 包名                    # 查看是否已經安裝了某包,如wget

  查看ansible提供的yum模塊的幫助信息:web

[root@localhost ~]# ansible-doc -s yum     # 查看幫助信息,部分參數以下
disablerepo                            # 禁用源
enablerepo                             # 啓用源
name                                   # 包名
state                                  # Whether to install (`present' or `installed', `latest'), or remove (`absent' or `removed') a package. 

  示例:shell

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模塊

  回顧pip相關知識:編程

pip install 包名                       # 安裝python包,如flask
pip freeze > requirements.txt         # 將python的環境打包到文件中
pip install -r requirements.txt       # 安裝文件中的包
pip list                              # 查看全部的已安裝成功的包

  查看ansible提供的pip模塊的幫助信息:flask

[root@localhost ~]# ansible-doc -s pip   # 查看幫助信息,部分參數以下:
chdir
name                                     # 包名
requirements                             # 指定文件,安裝文件中全部的包
virtualenv

  示例:centos

ansible web -m pip -a 'name=flask'           # 安裝flask模塊
三、service模塊

  回顧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
enabled # 設置開機自啓動

  示例:

ansible web -m service -a 'name=nginx state=started'         # 啓動nginx
ansible web -m service -a 'name=nginx state=stopped'       # 關閉nginx
四、cron模塊

  回顧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'  # 禁用計劃任務,以#開始表示禁用
五、user模塊

  回顧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'        # 刪除用戶並刪除用戶的家目錄
六、group模塊

  查看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'         # 刪除組

2、ansible劇本

  首先用咱們現有的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語言來寫!

一、yaml

  咱們見過的用來寫配置文件的語言有xml,還有uwsgi的配置文件後綴是.ini,而接下來要學習使用的一種編程語言是yaml,它能夠用來寫配置文件。語法格式以下:

  字典: key: value

  列表: [] -

  後綴名:.yaml 或者 .yml

  注意:它的語法格式很是嚴格,冒號後邊必須有空格,等號後邊必定不能有空格,等等,本身去嘗試一下!

二、ansible-playbook命令格式
[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,寫入以下內容,注意有參數
- hosts: db
  tasks:
  - name: create{{ user }}
    user: name={{ user }}

  分析:上面的配置文件中含有參數,那麼咱們該如何傳參?有如下五種方法:

  第一種:命令的方式,即便用參數 "-e"

[root@localhost yaml]# 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
    register: user
  - name: createuser
    user: name={{user.stdout}}

  總結:傳參方式之間有優先級:-e > playbook vars > hosts文件

四、補充:linux中計算

相關文章
相關標籤/搜索