ansible初識二

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

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

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

三、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<br>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

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

yaml書寫注意

  • 冒泡後面必須是空格

  • 等號後面不能有空格

  • -後面也要有空格

  • 嚴格對齊

 二、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  寫入以下內容  注意有參數
- 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文件

四、補充:linux中計算

echo  3+4|bc   # linux計算

相關文章
相關標籤/搜索