ansible

1、What's the Asible?

Ansible是新出現(xiàn)的自動(dòng)化運(yùn)維工具,基于Python開發(fā),集合了眾多運(yùn)維工具(puppet、cfengine、chef、func、fabric)的優(yōu)點(diǎn),實(shí)現(xiàn)了批量系統(tǒng)配置、批量程序部署、批量運(yùn)行命令等功能。

1.1、Ansible's structure

  • Inventory
  • Modules
  • Ad Hoc Commands
  • Playbooks
    • Tasks
    • Variables
    • Templates
    • Handlers
    • Roles
ansible.png

Host Inventory : 主機(jī)庫(kù),用于存放管控的主機(jī)列表。
Core Modules : 核心模塊
Custom Modules : 自定義模塊
Ad Hoc Commands :
Playbooks : 劇本,按照設(shè)定的順序執(zhí)行完成任務(wù)。
??Tasks : 任務(wù)
??Variables : 變量
??Templates : 模板
??Handlers : 處理器
??Roles : 角色,用于調(diào)度不同的playbooks.

2、How to use Ansible?

安裝環(huán)境 :?CentOS7

所需軟件包 :?Ansible(epel源)

2.1、Ansible's configuration files

  • 主配置文件

    • /etc/ansible/ansible.cfg
  • Host Inventory

    [webserver]
    192.168.0.14
    192.168.0.15
    [dbserver]
    192.168.0.14
    

2.2、ansible命令

ansible <host-pattern> [-m module_name] [-a args] [options]

  • <host-pattern> : 事先定義在hosts文件中的主機(jī)列表
    -m module_name : 指定模塊的名稱
    -a args : 指定模塊的參數(shù)
    [options] : 命令的其它參數(shù)

使用實(shí)例

    ansible webserver -m shell -a "ss -tnl"    #查看webserver主機(jī)列表中的主機(jī)的TCP端口是否處于監(jiān)聽狀態(tài)
    ansible webserver -m yum -a "name=httpd state=present"    #安裝httpd服務(wù)

2.3、ansible-doc命令

ansible-doc [-l] [-s] [module...]

  • -l : 列出可用的模塊
  • -s Module : 查看指定模塊的用法

2.4、ansible常用模塊

2.4.1 command模塊

  • 功能
    • 在遠(yuǎn)程主機(jī)上運(yùn)行一個(gè)命令,直接給出要執(zhí)行的命令,但不能運(yùn)行管理
      類命令。
  • 使用示例
    • ansible all -a "ls /home" (默認(rèn)模塊,可以省略模塊名稱)

      [root@localhost ~]# ansible all -a "ls /home"
      192.168.0.15 | SUCCESS | rc=0 >>
      Packages
      test
      test1
      test2
      test3
      testfile
      
      192.168.0.14 | SUCCESS | rc=0 >>
      Packages
      test
      test1
      test2
      test3
      testfile
      

2.4.2 shell模塊

  • 功能

    • 啟動(dòng)一個(gè)shell進(jìn)程來執(zhí)行命令,支持管道傳送。
  • 使用示例

    • ansible 192.168.0.14 -m shell -a "ss -tnl | grep 80"
[root@localhost ~]# ansible 192.168.0.14 -m shell -a "ss -tnl | grep 80"
192.168.0.14 | SUCCESS | rc=0 >>
LISTEN     0      128          *:80                       *:*                  
LISTEN     0      128         :::80                      :::*   

2.4.3、copy模塊

  • 功能
    • 復(fù)制文件,把管理端的文件復(fù)制到遠(yuǎn)程主機(jī)上
  • 使用格式
    • src : 管理端文件路徑
    • dest : 目標(biāo)主機(jī)文件存放路徑
    • mode : 文件的權(quán)限
    • owner : 文件的屬主
  • 使用示例
    • ansible 192.168.0.14 -m copy -a "src=/etc/ansible/ansible.file/httpd.conf dest=/etc/httpd/conf/httpd.conf"

2.4.4、cron模塊

  • 功能

    • 定義cron任務(wù)
  • 使用格式

    • -a "name= state= minute= hour= day= month= weekday= job= state={present|absent"
  • 使用示例

    • ansible all -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 &> /dev/null' name='sync time' state=present"

2.4.5、file模塊

  • 功能
    • 文件的創(chuàng)建和刪除
  • 使用格式
    • -a "path= mode= owner= group= state={directory|link|hard|touch|file|absent} src= "
  • 使用示例
    • ansible 192.168.0.14 -m file -a "path=/home/test1 state=directory"
    • ansible webserver -m file -a "src=/etc/fstab path=/home/fstab state=link"

2.4.6、yum模塊

  • 功能
    • 程序包的管理
  • 使用格式
    • -a "name= conf_file= state={present|latest|absent} enablerepo= disablerepo= "
  • 使用示例
    • ansible webserver -m yum -a "name=httpd state=absent"

2.4.7、service模塊

  • 功能
    • 管理服務(wù)
  • 使用格式
    • -a "name= state={started|stoped|restarted} enabled= runlevel= "
  • 使用示例
    • ansible webserver -m service -a "name=httpd state=started"

2.4.8、user模塊

  • 功能
    • 管理用戶
  • 使用格式
    • ansible all -m user -a "name= state={present | absent} force= system= uid= shell= home= "
  • 使用示例
    • ansible webserver -m user -a "name=jrc system=true shell=/sbin/nologin uid=333"

2.4.9、group模塊

  • 功能
    • 管理組
  • 使用格式
    • -a "name= state={present|absent} gid= system="
  • 使用示例
    • ansible webserver -m group -a "name=jrcgroup state=present system=true"

2.4.10、ping模塊

  • 功能
    • 測(cè)試與被管理主機(jī)的連通性
  • 使用示例
    • ansible all -m ping

      [root@localhost ~]# ansible all -m ping
      192.168.0.14 | SUCCESS => {
      "changed": false, 
      "ping": "pong"
      }
      192.168.0.15 | SUCCESS => {
      "changed": false, 
      "ping": "pong"
      }
      

2.4.11、script模塊

  • 功能
    • 指定本地的腳本文件,到遠(yuǎn)程主機(jī)上執(zhí)行一次
  • 使用示例
    • ansible webserver -m script -a "/root/useradd.sh"

2.4.12、setup模塊

  • 功能
    • 收集指定遠(yuǎn)程主機(jī)上的facts信息,將其收集的信息保存在各變量當(dāng)中。
  • 使用示例
    • ansible webserver -m setup

3、Playbooks劇本

??Playbooks是ansible更為強(qiáng)大的配置管理組件,實(shí)現(xiàn)基于文本文件編排執(zhí)行的多個(gè)任務(wù),而且可以多次執(zhí)行。Playbooks使用YAML,類似于半結(jié)構(gòu)化語(yǔ)言,聲明式配置,可讀性很高,易于與腳本語(yǔ)言交互。

3.1核心組件

  • Tasks : 任務(wù)
  • Variables : 變量
    • facts : 可直接調(diào)用
    • 自定義變量 : 通過命令行傳遞
      • -e VARS, --extra-vars=VARS
    • 主機(jī)變量 : 定義在Inventory中的主機(jī)之后的變量,直接傳遞給當(dāng)個(gè)主機(jī)變量
      • IP/HOSTNAME varaiable=value var2=value2
    • 主機(jī)組變量 : 定義在主機(jī)組上的變量
      • [groupname:vars]
        variable=value
  • Templates : 模板
    • 包含了模板的文本文件
  • Handlers : 處理器
    • 在特定條件下觸發(fā)
      • 任務(wù)可通過"tags"打標(biāo)簽,而后可在ansible-playbook命令上使用-t指定進(jìn)行調(diào)用
    • 接收到其它任務(wù)的通知時(shí)觸發(fā)
      • 某任務(wù)的狀態(tài)在運(yùn)行為change時(shí),可通過"notify
  • Roles : 角色

Playbooks的基本示例

- hosts: webserver
  remote_user: root
  tasks:
  - name: install nginx
    yum: name=nginx state=present
  - name: start nginx
    service: name=nginx state=started
  - name: change nginx
    template: src=/etc/ansible/ansible.file/nginx.conf.j dest=/etc/nginx/nginx.conf
    tags: change_conf
    notify: restart nginx
 handlers:
 - name: restart nginx
   service: name=nginx state=restarted

3.2、Playbook的條件測(cè)試

?在某個(gè)tasks后面添加when子句,即可實(shí)現(xiàn)條件測(cè)試功能,when語(yǔ)句支持jinja2語(yǔ)法。

示例

- hosts: webserver
  remote_user: root
  tasks:
  - name: install_httpd
    yum: name=httpd state=present
    when: ansible_os_family == "CentOS7"
  - name: start_nginx
    service: name=nginx state=started

3.2、Playbook的迭代

?在task中調(diào)用內(nèi)置的item變量,在某task后面使用with_items語(yǔ)句來定義元素列表。

示例

- hosts: webserver
  remote_user: root
  tasks:
  - name: install some packages
    yum: name={{ item }} state=present
    with_items:
    - nginx
    - memcached
    - php-fpm


- hosts: webserver
  remote_user: root
  tasks:
  - name: add some groups
    user: name={{ item.name }} group={{ item.group }} state=present
    with_items:
     - { name: 'user11',group: 'group11' }
     - { name: 'user12',group: 'group12' }
     - { name: 'user13',group: 'group13' }

3.3、Roles 角色

??roles實(shí)現(xiàn)了"代碼復(fù)用",讓playbook中的各元素組織起來,roles是以特定的層級(jí)結(jié)構(gòu)組織起來的playbook元素。

注意 : 在/etc/ansible目錄下,有roles的目錄,在此目錄下為每個(gè)不同的服務(wù)提供不同的目錄,每一個(gè)服務(wù)相當(dāng)于一個(gè)角色,這樣就能實(shí)現(xiàn)管理的標(biāo)準(zhǔn)化和便捷化。

  • webserver/

    • file/ : 用于存放文件,此角色用到的文件都應(yīng)該放在此目錄下。
    • templates/ : jinja2模板文件存放位置。
    • task/ : 存放任務(wù)列表文件,至少有一個(gè)main.yml的文件。
    • handlers/ : 存放處理器列表文件,至少有一個(gè)叫做main.yml的文件。
    • vars/ : 變量字典文件,至少有一個(gè)叫做main.yml的文件。
    • meta/ : 元數(shù)據(jù),用于定義角色的特殊設(shè)定及依賴關(guān)系。
  • dbserver/
    ....

  • nginxserver/
    ....

示例 :

[root@localhost nginx]# vi tasks/main.yml

- name: install_nginx
  yum: name=nginx state=present
- name: start_nginx
  service: name=nginx state=started
- name: change_conf
  template: src=nginx.conf dest=/etc/nginx/nginx.conf
  notify: restart_nginx

[root@localhost nginx]# vi handlers/main.yml

- name: restart_nginx
  service: name=nginx state=restarted

[root@localhost nginx]# vi vars/main.yml
user: daemon
group: daemon

將nginx.conf文件復(fù)制到templates目錄下,作為模板,并將其中的 user nginx
改為 user {{ user }}  {{ group }} ,作為一個(gè)變量使用。


在roles同級(jí)目錄下創(chuàng)建 nginx.yml,調(diào)用角色nginx

 - hosts: webserver
   remote_user: root
   roles:
   - nginx
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Ansible簡(jiǎn)介 Ansible是2013年推出的一款I(lǐng)T自動(dòng)化和DevOps軟件,目前由Redhat已簽署An...
    魏鎮(zhèn)坪閱讀 2,439評(píng)論 1 6
  • 一.ansible (1) ansible: ansible是一款新出現(xiàn)的自動(dòng)化運(yùn)維系統(tǒng),基于python開發(fā)并集...
    楠人幫閱讀 2,132評(píng)論 0 8
  • ansible介紹ansible常用模塊使用playbooktemplates,模板條件測(cè)試和循環(huán)迭代roles,...
    哈嘍別樣閱讀 1,490評(píng)論 0 3
  • NSPredicate就是一種正則表達(dá)式 http://blog.csdn.net/ztp800201/artic...
    百思不得解閱讀 241評(píng)論 0 0
  • 都說承諾是這世界上最美的東西,但承諾,也是這世界上最不可靠的東西。很多時(shí)候,我們偌大的失望感,絕望感,憤怒或者悲傷...
    拾荒Demo閱讀 444評(píng)論 0 0

友情鏈接更多精彩內(nèi)容