ansible-roles


ansible-roles

1.简介

roles则是在ansible中,playbooks的目录组织结构。
而模块化之后,成为roles的组织结构,易读,代码可重用,层次清晰。

2.目标

通过role远程部署nginx并配置

3.目录结构

[0VbuwT.md.png

files/:存储由copy或script等模块调用的文件;
tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;
handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由main.yml进行“包含”调用;
vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
templates/:存储由template模块调用的模板文本;
meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用;
default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;

准备目录结构

mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p
touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml
echo tiger > roles/nginx/files/index.html
yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2

4.编写任务

vim roles/nginx/tasks/main.yaml

---
- name: install nginx packge
  yum: name={{ item }} state=latest
  with_items:
  - epel-release
  - nginx

- name: copy index.html
  copy: src=index.html dest=/usr/share/nginx/html/index.html

- name: copy nginx.conf template
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
  notify: restart nginx

- name: make sure nginx service running
  service: name=nginx state=started enabled=yes

5.准备配置文件

vim roles/nginx/templates/nginx.conf.j2

worker_processes  {{ ansible_processor_cores }};   //调用内部已知变量
worker_connections {{ worker_connections }};    //自定义变量

6.编写变量

vim roles/nginx/vars/main.yaml
worker_connections: 10240

7.编写处理程序

vim roles/nginx/handlers/main.yaml

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

8.编写剧本

vim roles/site.yaml

- hosts: host4
  roles:
  - nginx

9.实施

ansible-playbook site.yaml --syntax-check  //测试
ansible-playbook site.yaml    //实施剧本

验证hosts

0VbwkD.png

引用变量案例:

# tree 
.
├── site.yml
├── templates
│   └── order.j2
└── vars
    └── main.yml

2 directories, 3 files

总调度yml文件:

# cat site.yml 
---
- hosts: 192.168.19.154
  user: root
  vars:
  - PROJECT: "JAVA"
    SWITCH: "ON"
    DBPORT: "8080"
  tasks:
  - name: create{{ PROJECT }}directory
    file: path=/data/{{ PROJECT }} state=directory
  - name: template transfor java
    template: src=order.j2 dest=/data/{{ PROJECT }}/order.conf

注意:这里 - role: template 和 - template 是一样的!

其他yml文件,如下:

# cat templates/order.j2 
project: {{ PROJECT }}
switch: {{ SWITCH }}
dbport: {{ DBPORT }}


测试:
# ansible-playbook templates.yml --syntax-check
playbook: templates.yml

执行:

PLAY [192.168.19.154] **********************************************************

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

TASK [createJAVAdirectory] *****************************************************
changed: [192.168.19.154]

TASK [template transfor java] **************************************************
changed: [192.168.19.154]

PLAY RECAP *********************************************************************
192.168.19.154             : ok=3    changed=2    unreachable=0    failed=0 

#cat /data/JAVA/order.conf
project: JAVA
switch: ON
dbport: 8080

 上一篇
kafka集群搭建 kafka集群搭建
常用Message Queue对比RabbitMQ RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正因如此,它非常重量级,更适合于企业级的开发。同时实现了
2019-04-26
下一篇 
ansible ansible
自动化运维工具—ansible详解一、ansible 简介1、ansible 是什么?  ansible是目前最受运维欢迎的自动化运维工具,基于Python开发,集合了众多运维工具(SaltStack puppet、chef、func、
2019-04-16
  目录