Ansible role,Roles角色是自1


一、Roles概述

(1)Roles简介

(2)Roles目录结构

各目录的作用:

  •  roles: 所有的角色必须放到roles目录下,这个目录可以自定义,默认的位置就在/etc/ansible/roles,并且和剧本是同级目录
  • project: 具体的角色项目命令,比如nginx、tomcat、php
  •  files #角色名称,用来存放配置文件或者源代码包的
  • handlers #存放静态文件,此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作,可以不用写
  • tasks #具体任务,此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用
  • templates #模板文件,用来存放配置文件,跟files目录不同的是,这里的配置文件可以调用变量
  • vars #存放变量, 此目录应当包含一个main.yml文件,用于定义此角色用到的变量

role执行顺序:pre_tasks > role > tasks > post_tasks

二、使用Roles

通过roles安装配置nginx服务

(1)创建目录

[root@ansible1 ~]# mkdir /roles

[root@ansible1 roles]# mkdir nginx/   角色叫什么就创建什么(我这里叫nginx)

在nginx目录下,就是分开的那些功能,每个功能一个目录,文件在哪创建一个目录,处理器在哪就创建一个目录。目录创建好,还有一个site.yaml的文件,这个文件名字可以随意写。

[root@ansible1 nginx]# mkdir files handlers tasks templates vars

[root@ansible1 roles]# touch site.yaml       最终执行的东西,最后写

[root@ansible1 ~]# tree /roles/   查看目录树

(2)定义任务

任务剧本编写,创建用户、组、安装软件、配置、启动等

[root@ansible1 nginx]# vim tasks/main.yaml   

---     在这个位置可以不写
- name: install nginx package    名字的命名相当于描述,很长
  yum: name={{ item }} state=latest   item是一个变量 安装一个  latest/installed/present,latest直接安装最新版   删除removed/absent
  with_items:        当有需要重复性执行的任务时,可以使用迭代机制。按照从上到下的顺序依次执行,当把值执行完了,任务就完了。先安装epel,再安装nginx
    - epel-release    源的名字  
    - nginx
- name: copy nginx.conf template    名字随便写,
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf   调用模板template,拷贝nginx配置文件的模板,不是拷贝配置文件,是拷贝模板文件
  notify: restart nginx   调用一个处理器,这个名字要和处理器name保持一致
- name: copy index.html     
  copy: src=index.html dest=/usr/share/nginx/html/index.html  拷贝它的主页文件
- name: make sure 
  service: name=nginx state=started   启动服务

【注意】epel源,如果最后下载不了,z'j

 (3)定义处理器

因为刚才在编写配置文件的剧本时添加了触发,所以需要写触发相应的动作

[root@ansible1 nginx]# vim handlers/main.yaml 

---
- name: restart nginx   这个名字要和 notify保持一致
  service: name=nginx state=restarted

 (4)定义变量的目录

[root@ansible1 nginx]# vim vars/main.yaml  变量文件准备

worker_connections: 10240   我只定义了一个变量,就算是100个也是这样,一行一个。

在模板文件用,把它的连接数改掉,就改成这个变量存储的值。我现在只改了一个,将来可能你去修改可能要改,发布网站的目录,日志文件的路径,keepalived,tomcat的值,但是修改之前,在模板文件要把它定义成变量。

 (5)配置模板文件

准备nginx.conf.j2 

我们会把它放在templates里,模板文件可以手动写,但一般不会手动写,它就是在原来nginx配置文件的基础上做了修改。直接拷贝一个nginx的配置文件。

[root@ansible1 templates]# cp /etc/nginx/nginx.conf nginx.conf.j2 
[root@ansible1 templates]# vim nginx.conf.j2

ansible_processor_cores  用这个变量,这个没有定义,是从 facts,setup模块会获取对面机器的基本信息,基本信息里就有这么一个变量,这个变量的值是预定义变量,就已经定义好了,facts组件自动获取的变量。

worker_connections  调用变量,10240

(6)编写主的nginx的角色文件,调用nginx角色

 [root@ansible1 roles]# vim site.yaml  创建剧本,就是执行程序的入口。

---
- hosts: 192.168.22.172
  roles:           (要是有多个roles,就接着往下写)
  - nginx

(7)创建主页文件

[root@ansible1 files]# vim index.html 

 三、执行

(1)监测剧本是否有问题

[root@ansible1 roles]# ansible-playbook -C site.yaml    -C测试运行,但不会产生运行结果

(2) 执行剧本

[root@ansible1 roles]# ansible-playbook site.yaml

 (3)验证

人工检查一遍,看看nginx,它应该是启动状态。访问一下没问题,

vim /etc/nginx/nginx.conf  看模板有没有生效,之前定义了10240

 

相关内容