一、Roles

角色思想:

  • 模块化,可重复调用

创建角色的注意事项:
文件夹:目录树


Porject_Name
    roles #角色集合
        mysql/
        nginx/
            tasks/    #任务模块
                main.yml    #角色入口
                
            templates/    #模板文件
            vars/    #变量文件
            handlers/    #触发任务
        httpd/
        memcache/
    nginx_roles.yml     #调用角色,需要和roles文件夹同级

以上就是简单的角色文件分布情况

二、分析nginx角色部署的过程

  1. 创建组
  2. 创建用户
  3. 安装Nginx
  4. 拷贝模板文件
  5. 启动服务

以上五个步骤就是实现Nginx的安装到启动

三、编写角色

首先创建目录:默认的角色存放在/etc/ansible/roles


~]# mkdir /etc/ansible/roles/my_project
~]# cd /etc/ansible/roles/my_project
~]# mdkir -pv roles/{nginx,mysql,httpd}        #创建多个角色,但是我们只用gninx
~]# cd roles/nginx
~]# mkdir tasks templates handlear vars

1. 编写yml文件


~]# cd tasks

创建组任务: group.yml


- name: Create Group
  group: name=nginx gid=80

创建用户任务: user.yml


- name: Create User
  user: name=nginx uid=80 system=yes shell=/sbin/nologin group=nginx

安装nginx任务: install.yml


- name: Install Nginx
  yum: name=nginx

拷贝模板文件任务: template.yml


- name: Copy Config
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf

启动nginx任务: start.yml


- name: Start Nginx
  service: name=nginx state=started enabled=yes

基本的功能都实现了,注意以上文件都在/etc/ansible/roles/my_project/roles/nginx/tasks/

2. 编写角色入口文件

文件名为main.yml,位置:/etc/ansible/roles/my_project/roles/nginx/tasks/(和所有任务在同级目录下)


- import_tasks: group.yml
- import_tasks: user.yml
- import_tasks: install.yml
- import_tasks: template.yml
- import_tasks: start.yml
#这里就定义了角色任务的执行顺序

当前目录下的文件如下:

3. 准备模板文件

文件名为nignx.conf.j2,存放位置/etc/ansible/roles/my_project/roles/nginx/templates/

user  nginx;
worker_processes  {{ ansible_processor_vcpus+2 }};
#jinja2 表示进程数为cpu核心个数 +2
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;

    keepalive_timeout  65;
    server {
        listen 80;
        server_name localhost;
        root /usr/share/nginx/html;
        index index.html index.htm;
    }
}

当前的目录树如下:

忽略restart.yml和乱码

4. 调用角色

在roles同级目录编写: nginx_roles.yml;内容如下


---
- hosts: websrvs
  remote_user: root
  roles:
    nginx

这样一个完整nginx安装角色就完成了

三、测试角色


~]# ansible-playbook -C nginx_roles.yml

<center>你许了我一米的阳光</center>
<center>却给了我一世的沧桑</center>
<center>那个她,你还记得吗</center>


<center>

</center>

Last modification:October 20th, 2019 at 04:53 pm
If you think my article is useful to you, please feel free to appreciate