ansible roles

创建所需要的roles原型目录结构(以lnmp为例)


mkdir -p roles/nginx/{files,handlers,tasks,templates,vars}
mkdir -p roles/php/{files,handlers,tasks,templates,vars}
mkdir -p roles/mysql/{files,handlers,tasks,templates,vars}

myroles/
├── lnmp.yaml   #入口触发配置文件
└── roles       #lnmp.yaml中找到roles,从这里进入
       ├── nginx
       │       ├── files       #copy模块和script模块的参数src默认会从这个文件夹查找
       │       ├── handlers    #用来存放notify的
       │       ├── tasks       #用来存放ansible模块任务的
       │       ├── templates   #用来存放j2的
       │       └── vars        #用来存放变量的
       ├── mysql
       │       ├── files
       │       ├── handlers
       │       ├── tasks
       │       ├── templates
       │       └── vars
       └── php
               ├── files
               ├── handlers
               ├── tasks
               ├── templates
               └── vars

3.	/myroles/
4.	├── nginx.yaml  #入口触发配置文件
5.	└── roles       #playbook的原型配置目录
6.	    └── nginx   #nginx相关模组配置目录
7.	        ├── files       #copy模块和script模块的参数src默认会从这个文件夹查找
8.	        ├── handlers    #用来存放notify的
9.	        ├── tasks       #用来存放ansible模块任务的
10.	        ├── templates   #用来存放j2的,yaml文件定义变量,templates下某个文件,引入yaml的变量
11.	        └── vars        #用来存放变量的
12.	

入口触发配置文件(lnmp.yaml)


[root@ansible myroles]# cat /myroles/lnmp.yaml 
---
- hosts: all            #执行的主机范围
  gather_facts: True    #开启系统内置变量
  roles:                #启用roles原型配置
  - nginx               #执行nginx原型模组
  - mysql
  - php

【入口yaml文件说明】:

A)执行 ansible-playbook 命令后,通过入口yaml配置,
   通过hosts可以确认需要ansible操作的目标远程机器。
B)通过roles来分别执行nginx MySQL php模块操作

roles中nginx角色下tasks任务编排模组的使用:

【说明】:

A)执行nginx roles角色下下tasks,即会找到tasks main.yaml
B)文件,根据该yaml文件,来操作nginx roles任务

myroles/roles/nginx/tasks/mail.yaml

---
- name: 检查远程机器uname -r    #任务1的名字
  shell: uname -r
  register: a_result    #每个任务都需要新设置debug信息        
- debug: var=a_result
- name: 检查远程机器IP     #任务2的名字         
  shell: hostname -I         
  register: ls_result   #每个任务都需要新设置debug信息
- debug: var=ls_result

ansible-playbook myroles/lnmp.yaml运行结果

[root@kVM20202308-0 /]#  ansible-playbook myroles/lnmp.yaml

PLAY [all] **************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************
ok: [web33]
[WARNING]: Platform linux on host web63 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter
could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
ok: [web63]

TASK [nginx : 检查远程机器uname -r] *******************************************************************************************************************************
changed: [web63]
changed: [web33]

TASK [nginx : debug] ****************************************************************************************************************************************
ok: [web63] => {
    "a_result": {
        "changed": true,
        "cmd": "uname -r",
        "delta": "0:00:00.023720",
        "end": "2021-01-30 16:32:32.001010",
        "failed": false,
        "rc": 0,
        "start": "2021-01-30 16:32:31.977290",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "3.10.91-22.el7.x86_64",
        "stdout_lines": [
            "3.10.91-22.el7.x86_64"
        ]
    }
}
ok: [web33] => {
    "a_result": {
        "changed": true,
        "cmd": "uname -r",
        "delta": "0:00:00.025603",
        "end": "2021-01-30 16:32:32.029191",
        "failed": false,
        "rc": 0,
        "start": "2021-01-30 16:32:32.003588",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "3.19.91-19.1.al7.x86_64",
        "stdout_lines": [
            "3.19.91-19.1.al7.x86_64"
        ]
    }
}

TASK [nginx : 检查远程机器IP] *************************************************************************************************************************************
changed: [web63]
changed: [web33]

TASK [nginx : debug] ****************************************************************************************************************************************
ok: [web63] => {
    "ls_result": {
        "changed": true,
        "cmd": "hostname -I",
        "delta": "0:00:00.023432",
        "end": "2021-01-30 16:32:32.742582",
        "failed": false,
        "rc": 0,
        "start": "2021-01-30 16:32:32.719150",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "15.17.16.93 172.1.0.1 ",
        "stdout_lines": [
            "15.17.16.93 172.1.0.1 "
        ]
    }
}
ok: [web33] => {
    "ls_result": {
        "changed": true,
        "cmd": "hostname -I",
        "delta": "0:00:00.025585",
        "end": "2021-01-30 16:32:32.806105",
        "failed": false,
        "rc": 0,
        "start": "2021-01-30 16:32:32.780520",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "100.1.4.53 ",
        "stdout_lines": [
            "100.1.4.53 "
        ]
    }
}

PLAY RECAP **************************************************************************************************************************************************
web33                      : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web63                      : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

roles中vars自定义变量模组的使用:

首先:需要先创建自定义变量vars模组的配置文件:

cat myroles/roles/nginx/vars/main.yaml
---
my_name: yunjisuan
phone: 1800000000

第二:tasks中main.yaml设置相应的 “变量 ”引用:

cat  myroles/roles/nginx/tasks/main.yaml

---
- name: nginx主任务模块引用vars中的变量    
  shell: echo my phone is {{ phone }}  #这里引用vars中的变量
  register: a_result     #输出debug结果              
- debug: var=a_result

【vars变量引用说明】:

A)vars的变量引入需要提前设置好,vars下mian.yaml中的变量设置
B)task下main.yaml设置好调用vars变量的相关参数
C)怎么操作的,使得可以顺利调用vars变量呢?
   lnmp.yaml提前设置好了 gather_facts: True 

ansible-playbook myroles/lnmp.yaml
在这里插入图片描述

roles模型里使用copy,script模块:

roles模型里使用copy,script模块,默认从roles/nginx/files这里面找,copy的文件、目录,以及脚本

首先:files下需要存在copy,script的脚本:

[root@localhost /]# cat myroles/roles/nginx/files/test.sh
#! /bin/bash
mkdir -p /tmp/2O21-01-30

第二:tasks下main.yaml配置相关copy scripts操作:

---
- name: 检查远程机器uname -r    
  shell: echo my phone is {{ phone }}
  register: a_result                 
- debug: var=a_result
- name: copy scripts
  copy: src=test.sh dest=/mnt/
- name: run scripts
  script: test.sh

roles中template模块的使用:

下发可变(带有变量的)配置文件
【template模块】

A)template下面存放 “带有变量”的 “配置文件”
B)这些带有变量的配置文件的值,来源于vars目录下的main.yaml
C)执行tasks下的template模块,先找到vars中mian.yaml,对应自定义变量的值,传给template下面的“文件”,最后scp到remote机器

/myroles/roles/nginx/templates/test.j2

[root@local-0 /]# cat /myroles/roles/nginx/templates/test.j2
#引用自定义变量
myname is {{ my_name }},my phone is {{ phone }}

cat /myroles/roles/nginx/tasks/main.yaml

---
- name: 检查远程机器uname -r    #任务1的名字
  shell: echo my phone is {{ phone }}
  register: a_result                 #执行ping模块
- debug: var=a_result
- name: copy scripts
  copy: src=test.sh dest=/mnt/
- name: run scripts
  script: test.sh
- name: 使用template模块
  template: src=test.j2 dest=/tmp/test2 #test.j2复制成远程的test2文件

roles中notify模块的使用:

【notify用法】:

A)监控到tasks的任务成功后(changed)然后可以触发notify模块的动作
B)roles使用notify模块,默认从roles/nginx/handles里面找
C)notify一般定义的action是:服务的启动、停止等

/myroles/roles/nginx/handlers/main.yaml

[root@local-0 /]# cat /myroles/roles/nginx/handlers/main.yaml
---                     #这里name要和tasks下main.yaml对应
- name: nginx_start     #定义handlers的动作类型
  shell: systemctl restart nginx
- name: nginx_stop    #定义handlers的动作类型
  shell: systemctl stop nginx

/myroles/roles/nginx/tasks/main.yaml

[root@local-0 /]# cat /myroles/roles/nginx/tasks/main.yaml
---
- name: 检查远程机器uname -r    #任务1的名字
  shell: echo my phone is {{ phone }}
  register: a_result                 #执行ping模块
- debug: var=a_result
- name: copy scripts
  copy: src=test.sh dest=/mnt/
- name: run scripts
  script: test.sh
- name: 使用template模块
  template: src=test.j2 dest=/tmp/test2
  notify: nginx_stop

【notify运行原理说明】:

1)主任务中tasks/main.yaml中notify监控
  上面操作changed后,notify角色就生效
2)主tasks/main.yaml运行到notify:根据后面
   对应的 "notify: nginx_stop"中“nginx_stop”
   然后去handlers/main.yaml中找到对应的“nginx_stop”
   -------------------------------------
---                   
- name: nginx_start     
  shell: systemctl restart nginx
- name: nginx_stop    #找到它,执行对应shell中stop nginx服务
  shell: systemctl stop nginx

在这里插入图片描述
【扩展】下面来源
https://blog.csdn.net/little_baixb/article/details/105101927?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control
在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页