Ansible6--------ansible中的角色使用

ninimino發表於2020-09-23

1.ansible 角色簡介

* Ansible roles 是為了層次化,結構化的組織Playbook
* roles就是通過分別將變數、檔案、任務、模組及處理器放置於單獨的目錄中,並可以便捷地include它們
* roles一般用於基於主機構建服務的場景中,在企業複雜業務場景中應用的頻率很高
* 以特定的層級目錄結構進行組織的tasks、variables、handlers、templates、files等;相當於函式的呼叫把各個功能切割成片段來執行。

2.roles目錄結構

files存放copy或script等模組呼叫的函式
tasks定義各種task,要有main.yml,其他檔案include包含呼叫
handlers定義各種handlers,要有main.yml,其他檔案include包含呼叫
vars定義variables,要有main.yml,其他檔案include包含呼叫
templates儲存由template模組呼叫的模板文字
meta定義當前角色的特殊設定及其依賴關係,要有main.yml的檔案 defaults
tests用於測試角色

3.role存放的路徑在配置檔案ansible.cfg中定義

roles_path = path/roles (預設目錄:/etc/ansible/roles)
vim ansible.cfg
roles_path = ~/

4.建立目錄結構

ansible-galaxy init apache
ansible-galaxy list

在這裡插入圖片描述
在這裡插入圖片描述

5.playbook中使用roles

1playbook中使用roles

---
- hosts: server2
  roles:
    - role: role1
    - role: role2
      var1: value1		##此處變數會覆蓋roles中的定義變數

2控制任務執行順序

---
- hosts: server2
  roles:
    - role: role1	##角色任務
  pre_tasks:		##角色執行前執行的play
    - tasks1
  tasks:		##普通任務
    - tasks2
  post_tasks:		##在角色和普通任務執行完畢後執行的play
    - tasks3
  handlers:

示例
角色:將完整的playbook拆分開

default   www.westos.com page
www.westos.com      /var/www/www.westos.com/html  index:www.westos.com
linux.westos.com    / var/www/linux.westos.com/html   index:linux.westos.com

vim ansible.cfg
roles_path = ~/

1 生成一個角色
ansible-galaxy init apache
2 在生成的角色目錄下

[westos@ansible ~]$ cat apache/vars/main.yml###用來寫變數

---
vhost:
  - root: /var/www/html
  - root: /var/www/virtual/westos.com/www/html
    name: www.westos.com
  - root: /var/www/virtual/westos.com/linux/html
    name: linux.westos.com
 

[westos@ansible ~]$ cat apache/tasks/main.yml ##寫任務

---
- name: template
  block:
    - name: install apache
      dnf:
        name: httpd
        state: latest
      notify: firewalld
    - name: configure apche file
      template:
        src: vhost.j2
        dest: /etc/httpd/conf.d/vhost.conf
      notify: restart apache
    - name: mkdir Document
      file: 
        path: "{{item}}"
        state: directory
      loop::
        - /var/www/www.westos.com/html
        - /var/www/linux.westos.com/html
    - name: create index.html
      copy: 
        dest: "{{ item.root}}/index.html"
        content: "{{ item.index }}"
      loop: 
        - root: /var/www/html
          index: default
        - root: /var/www/www.westos.com/html
          index: www.westos.com
        - root: /var/www/linux.westos.com/html
          index: linux.westos.com
  rescue:
    - debug:
        msg:  dnf repo is not created

[westos@ansible ~]$ cat apache/templates/vhost.j2 ##模板

{% for webserver in vhost %}
{% if webserver.name is not defined %}
<VirtualHost _defult_:80>
{% endif %}
{% if webserver.name is defined %}
<VirtualHost *:80>
{% endif %}
{% if webserver.name is defined %}
  ServerName {{ webserver.name }}
{% endif %}
  DocumentRoot {{webserver.root}}
{% if webserver.name is not defined %}
   CustomLog logs/default.log combined
{% endif %}
{% if webserver.name is defined %}
   CustomLog logs/{{ webserver.name }}.log combined
{% endif %}
</VirtualHost>
{% endfor %}

[westos@ansible ~]$ cat apache/handlers/main.yml ###觸發器

---
- name: restart apache
  service:
    name: httpd
    state: restarted
    enabled: yes
- name: firewalld
  firewalld:
    service: http
    permanent: yes
    state: enabled
    immediate: yes

[westos@ansible ~]$ cat vhostest.yml ##測試playbook

---
- name: test roles
  hosts: 172.25.11.1
  roles:
    - role: apache

ansible-playbook vhostest.yml

6.ansible—galaxy命令工具

* Ansible Galaxy 是一個免費共享和下載 Ansible 角色的網站,可以幫助我們更好的定義和學習roles。
* ansible-galaxy命令預設與https://galaxy.ansible.com網站API通訊,可以查詢、下載各種社群開發的 Ansible 角色
* ansible-galaxy在 Ansible 1.4.2 就已經被包含了
* 在galaxy.ansible.com網站查詢roles

安裝選擇的角色
1網路上
主機需要聯網
ansible-galaxy install geerlingguy.nginx

2
vim install_apache_role.yml

---
- src: file:///mnt/apache.tar.gz
   name: apache
[westos@ansible ~]$ sudo mv apache  /westos/
[westos@ansible ~]$ ls
ansible.cfg                      vhost.yml
apache.install.yml  install_apache_role.yml  
         inventory      
         

tar zcf apache.tar.gz apache/
[westos@ansible ~]$ ansible-galaxy install -r install_apache_role.yml ##指定路徑

- downloading role from file:///mnt/apache.tar.gz
- extracting apache to /home/westos/apache
- apache was installed successfully
[westos@ansible ~]$ ls
ansible.cfg                         apache               
apache.install.yml  install_apache_role.yml  
         inventory                



相關文章