1. 程式人生 > >Ansible 基礎配置(Ⅱ)

Ansible 基礎配置(Ⅱ)

ansible 基礎配置(ⅱ)

1 ansible安裝包和管理服務

安裝包操作如下:

[root@chy ~]# ansible chy01 -m yum -a "name=httpd"//安裝一個包
chy01 | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "httpd-2.4.6-67.el7.centos.6.x86_64 providing httpd is already installed"
    ]
}
[root@chy ~]# ansible chy01 -m yum -a "name=httpd state=removed" //卸載一個包直接後面增加state=removed
chy01 | SUCCESS => {
    "changed": true, 
    "failed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "已加載插件:fastestmirror\n正在解決依賴關系\n--> 正在檢查事務\n---> 軟件包 httpd.x86_64.0.2.4.6-67.el7.centos.6 將被 刪除\n--> 正在處理依賴關系 httpd = 2.4.6-67.el7.centos.6,它被軟件包 httpd-devel-2.4.6-67.el7.centos.6.x86_64 需要\n--> 正在檢查事務\n---> 軟件包 httpd-devel.x86_64.0.2.4.6-67.el7.centos.6 將被 刪除\n--> 解決依賴關系完成\n\n依賴關系解決\n\n================================================================================\n Package          架構        版本                          源             大小\n================================================================================\n正在刪除:\n httpd            x86_64      2.4.6-67.el7.centos.6         @updates      9.4 M\n為依賴而移除:\n httpd-devel      x86_64      2.4.6-67.el7.centos.6         @updates      749 k\n\n事務概要\n================================================================================\n移除  1 軟件包 (+1 依賴軟件包)\n\n安裝大小:10 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  正在刪除    : httpd-devel-2.4.6-67.el7.centos.6.x86_64                    1/2 \n  正在刪除    : httpd-2.4.6-67.el7.centos.6.x86_64                          2/2 \n  驗證中      : httpd-2.4.6-67.el7.centos.6.x86_64                          1/2 \n  驗證中      : httpd-devel-2.4.6-67.el7.centos.6.x86_64                    2/2 \n\n刪除:\n  httpd.x86_64 0:2.4.6-67.el7.centos.6                                          \n\n作為依賴被刪除:\n  httpd-devel.x86_64 0:2.4.6-67.el7.centos.6                                    \n\n完畢!\n"
    ]
}
[root@chy ~]# ansible chy01 -m service -a "name=httpd state=started enabled=no" 
//啟動一個服務,state=後面是啟動, enabled後跟是否開機啟動
[root@chy01 ~]# ps aux |grep httpd //查看已經開機啟動
root       4588  0.0  0.3 221936  4984 ?        Ss   02:28   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4589  0.0  0.1 221936  2960 ?        S    02:28   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4590  0.0  0.1 221936  2960 ?        S    02:28   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4591  0.0  0.1 221936  2960 ?        S    02:28   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4592  0.0  0.1 221936  2960 ?        S    02:28   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4593  0.0  0.1 221936  2960 ?        S    02:28   0:00 /usr/sbin/httpd -DFOREGROUND
root       4617  0.0  0.0 112648   960 pts/0    R+   02:30   0:00 grep --color=auto httpd

Ansible文檔的使用

[root@chy ~]# ansible-doc -l //查看所有的模塊
[root@chy ~]# ansible-doc service //針對一個模塊做一個查詢

2 使用ansible playbook

- playbook是把模塊寫入到配置文件裏

操作如下

[root@chy ~]# cd /etc/ansible/
[root@chy ansible]# vi test.yml
---
- hosts: chy01
  remote_user: root
  tasks:
    - name: test_playbook
      shell: touch /tmp/lishiming.txt
語法解釋:
---   //第一行需要有三個杠
- hosts: chy01 //指定了對哪些主機進行參作,如果是多臺機器可以用逗號作為分隔,也可以使用主機組,在/etc/ansible/hosts裏定義
  remote_user: root //指定了使用什麽用戶登錄遠程主機操作(remote_user有4個空格
  tasks://指定了一個任務
    - name: test_playbook //是對任務的描述,在執行過程中會打印出來(-name之前有4個空格)
      shell: touch /tmp/lishiming.txt //shell是ansible模塊名字
(空格要註意)
[root@chy01 ~]# ls -l /tmp/lishiming.txt //在另一臺機器上查看成功
-rw-r--r-- 1 root root 0 Nov  9 05:12 /tmp/lishiming.txt

3 playbook裏的變量

playbook的創建用戶操作

[root@chy ansible]# vi create_user.yml 
---
- name: create_user 
  hosts: chy01
  user: root
  gather_facts: false //
  vars:
    - user: "test"
  tasks:
    - name: create user
      user: name="{{ user }}"
說明:說明:name參數對該playbook實現的功能做一個概述,後面執行過程中,會打印 name變量的值 ,可以省略;gather_facts參數指定了在以下任務部分執行前,是否先執行setup模塊獲取主機相關信息,這在後面的task會使用到setup獲取的信息時用到;vars參數,指定了變量,這裏指字一個user變量,其值為test ,需要註意的是,變量值一定要用引號引住;user提定了調用user模塊,name是user模塊裏的一個參數,而增加的用戶名字調用了上面user變量的值。
[root@chy ansible]# ansible-playbook create_user.yml //執行過程
PLAY [create_user] ***************************************************************************************************************

TASK [create user] ***************************************************************************************************************
changed: [chy01]

PLAY RECAP ***********************************************************************************************************************
chy01                      : ok=1    changed=1 (這裏如果客戶機沒有用戶則是1,如果是0則代表沒有執行成功,就要考慮客戶機是否創建了用戶)  unreachable=0    failed=0

4 playbook循環

[root@chy ansible]# vi while.yml
---
- hosts: chy01
  user: root
  tasks:
    - name: change mode for files
      file: path=/tmp/{{ item }} mode=600
      with_items:
        - 1.txt
        - 2.txt
        - 3.txt
說明: with_items為循環的對象
[root@chy01 ~]# ls -l /tmp/ //查看執行的結果
total 44
-rw-r--r-- 1 root  root     0 Nov  7 05:33 111.txt
drwxr-xr-x 2 root  root  4096 Nov  7 05:30 123
drwxr-xr-x 2 root  root  4096 Nov  7 05:03 1233
-rw-r--r-- 1 root  root  2182 Nov  7 05:28 123.txt
-rw------- 1 root  root     0 Nov  9 06:06 1.txt
-rw------- 1 root  root     0 Nov  9 06:06 2.txt
-rw------- 1 root  root     0 Nov  9 06:06 3.txt

5 playbook中的條件判斷

- 判斷,類似於shell中的if語句,當滿足情況才回去執行,不滿足就輸出報錯,playbook也是這個道理。

[root@chy ansible]# vi when.yml
---
- hosts: chy01
  user: root
  gather_facts: True
  tasks:
    - name: use when
      shell: touch /tmp/when.txt
      when: ansible_ens33.ipv4.address == "192.168.212.11" //這個ip是客戶機的ip地址
//以ansible_ens33.ipv4.address為判斷對象(ansible_ens33是最上面一級,ipv4是第二級),且值為 "192.168.212.11" 的機器篩選出來。
說明:[root@chy ansible]# ansible chy01 -m setup //可以查看到所有的facter信息
[root@chy ansible]# ansible-playbook when.yml 
PLAY [testhost] ******************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************
ok: [chy02]
ok: [chy01]

TASK [use when] ******************************************************************************************************************
skipping: [chy02]
 [WARNING]: Consider using file module with state=touch rather than running touch

changed: [chy01]
PLAY RECAP ***********************************************************************************************************************
chy01                      : ok=2    changed=1    unreachable=0    failed=0   
chy02                      : ok=1    changed=0    unreachable=0    failed=0   
如上一般用在的場合是:目錄和文件是否在某臺機器上面。

6 playbook中的handlers

執行task之後,服務器發生變化之後要執行的一些操作,比如我們修改了配置文件後,需要重啟一下服務:

[root@chy ansible]# vi handlers.yml
---
- name: handlers test
  hosts: chy01
  user: root
  tasks:
    - name: copy file
      copy: src=/etc/passwd dest=/tmp/aaa.txt
      notify: test handlers
  handlers:
    - name: test handlers
      shell: echo "111111" >> /tmp/aaa.txt
說明,只有copy模塊真正執行後,才會去調用下面的handlers相關的操作。
也就是說如果說假如/etc/passwd這個文件不存在 copy執行後是錯誤的,然後並不會去執行handlers裏面的shell相關命令。
[root@chy ansible]# ansible-playbook handlers.yml 

PLAY [handlers test] *************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************
ok: [chy01]

TASK [copy file] *****************************************************************************************************************
changed: [chy01]

RUNNING HANDLER [test handlers] **************************************************************************************************
changed: [chy01]
PLAY RECAP ***********************************************************************************************************************
chy01                      : ok=3    changed=2    unreachable=0    failed=0   
[root@chy01 ~]# tail /tmp/aaa.txt  //查看結果
gitlab-psql:x:991:988::/var/opt/gitlab/postgresql:/bin/sh
gitlab-prometheus:x:990:987::/var/opt/gitlab/prometheus:/bin/sh
lf:x:1003:1003::/home/lf:/bin/bash
jump:x:1004:1004::/home/jump:/bin/bash
chy:x:1005:1005::/home/chy:/bin/bash
chy1:x:1006:1006::/home/chy1:/bin/bash
aaa:x:1007:1007::/home/aaa:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
saslauth:x:989:76:Saslauthd user:/run/saslauthd:/sbin/nologin
111111
這種比較適合配置文件發生更改後(如果配置成功),就會啟動重啟服務的操作。

希望看過的童鞋多多指教,謝謝!技術分享技術分享

Ansible 基礎配置(Ⅱ)