Ansible1.2版本後引入的新特性,用於層次性、結構化地組織playbook。roles可以根據層次型結構自動裝載變量文件、tasks以及handlers等。要使用roles只須要在playbook中使用include指令便可。簡單來說,roles就是經過分別將變量、文件、任務、模板及處理器放置於單獨的目錄中,並能夠便捷地include它們的一種機制。角色通常用於基於主機構建服務的場景中,但也能夠是用於構建守護進程等場景中node
官方推薦在/etc/ansible/roles目錄下使用roles,但不是必須的,roles目錄能夠自行建立
tasks-包含角色要執行的任務的主要列表,至少應該有main.yml文件,有其餘的yml文件經過include進行包含
handlers-包含處理程序(notify觸發的任務),該角色甚至該角色以外的任何地方均可以使用這些處理程序。至少應該有main.yml文件
defaults-角色的默認變量,至少應該有main.yml文件
vars-角色的其餘變量,至少應該有main.yml文件
files-包含能夠經過此角色部署的文件。
templates-包含能夠經過此角色部署的模板。
meta-爲此角色定義一些元數據,至少應該有main.yml文件運維
以部署grafana+influxdb+telegraf爲例
目錄結構以下:
在項目目錄中,劇本與roles目錄平級,roles目錄下包含各角色目錄,各角色目錄中包含使用到的files,handlers,tasks,templates,vars;對於不使用的meta和defaults目錄,最好排除。ide
以部署grafana+influxdb+telegraf爲例rest
在node2上部署三件套,在node3上部署influxdb,配置文件中的有些參數使用變量,配置文件使用模板,更改配置文件後重啓服務code
--- - hosts: node2 remote_user: root roles: - grafana - influxdb - telegraf - hosts: node3 remote_user: root roles: - influxdb
roles/grafana/tasks/main.yml文件視頻
--- - name: "copy grafana to destination server" copy: src: grafana-6.3.0-1.x86_64.rpm dest: /tmp/ - name: "Install the grafana rpm package locally" yum: name: /tmp/grafana-6.3.0-1.x86_64.rpm state: present - name: "template the grafana.ini" template: src: grafana.ini.j2 dest: /etc/grafana/grafana.ini notify: restart grafana - name: "enable grafana" systemd: name: grafana-server state: restarted daemon_reload: yes enabled: yes
roles/grafana/templates/grafana.ini.j2模板配置文件server
# The http port to use http_port = {{ http_port }}
roles/grafana/vars/main.yml 文件flux
http_port: 8000
roles/grafana/handlers/main.yml文件進程
- name: restart grafana systemd: name: grafana-server state: restarted daemon_reload: yes
/etc/ansible/hosts [node2] 192.168.143.131 [node3] 192.168.143.132
ansible-playbook deploy.yml
參考:馬哥ansible視頻rem