Ansible1.2版本后引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中
目前成都创新互联公司已为成百上千家的企业提供了网站建设、域名、虚拟主机、网站托管维护、企业网站设计、赣县网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。官方推荐在/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目录,最好排除。
以部署grafana+influxdb+telegraf为例
在node2上部署三件套,在node3上部署influxdb,配置文件中的有些参数使用变量,配置文件使用模板,更改配置文件后重启服务
---
- 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模板配置文件
# The http port to use
http_port = {{ http_port }}
roles/grafana/vars/main.yml 文件
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
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。