【Ansible】Ansible 角色

news2024/9/21 15:51:58

Ansible 角色



文章目录

  • Ansible 角色
  • 一、Ansible Roles 介绍
  • 二、Roles 结构
  • 三、role 的制作过程
  • 四、如何在PlayBook中使用 Role
      • 1. 经典(原始)方式
      • 2. 新方式
  • 五、如何使用 Galaxy



在这里插入图片描述


一、Ansible Roles 介绍

一个数据中心有可能存在好多类型的服务器。比如,web 类型、DB类型、开发人员使用的开发类型、QA使用的测试类型等等。

实际生产中,基本每个类型的服务器的初始化行为都不一致,那么要在一个 playbook 中将这些动作完成,这个playbook将变得臃肿、庞大、且难以后续维护和更新。

如果能针对每个类型的服务器单独编写playbook,最后通过某种方式整合者 playbook,在管理方式上就会变得简单。

ansible 中提供了类似的概念,也就是role。它允许管理员将他们复杂的 playbook 分解成一个个小的逻辑单元,以便于维护和管理。

二、Roles 结构

1.role 是什么

web_servers/
--- defaults
    --- main.yml
--- files
--- handlers
    --- main.yml
--- meta
    --- main.yml
--- tasks
    --- main.yml
--- templates
--- vars
    --- main.yml

从表面上看,它就是一个目录。目录的名字也就是 role 的名字,实例中,role 的叫做 web_servers。
进到这个 role 名字的目录里,会发现好多子目录。
使用时,每个目录必须包含 一个 main.yml 文件,这个文件应该包含如下目录名称对应的内容:

  • tasks 包含角色要执行的任务的主要列表。
  • handlers 包含处理程序,次角色甚至该角色之外的任何地方都可以使用这些处理程序。
  • defaults 角色的默认变量。
  • vars 角色的其他变量。
  • files 包含可以通过此角色部署的文件。
  • template 包含可以通过次角色部署的模板。
  • meta 为此角色定义一些元数据。

角色必须至少包含这些目录之一,但是最好排除任何未使用的目录。

三、role 的制作过程

分解这个PlayBook,命名role 的名字为 nginx

nginx/
│
├── files
├── handlers
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml
[root@master1 ~]# tree nginx
nginx
├── files
│   └── www.guan.com.conf
├── handles
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
│   └── nginx.conf.j2
└── vars
    └── main.yml

5 directories, 5 files
[root@master1 ~]# 

[root@master1 ~]# mkdir nginx
[root@master1 ~]# cd nginx
[root@master1 nginx]# mkdir {files,handles,tasks,templates,vars}
[root@master1 nginx]# ls
files  handles  tasks  templates  vars
[root@master1 nginx]# for l in `ls`;do touch ${l}/main.yml;done
[root@master1 nginx]# tree
bash: tree: 未找到命令...
[root@master1 nginx]# yum install tree
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                                            | 3.6 kB  00:00:00     
code                                                                            | 3.0 kB  00:00:00     
epel                                                                            | 4.7 kB  00:00:00     
extras                                                                          | 2.9 kB  00:00:00     
percona-release-noarch                                                          | 1.5 kB  00:00:01     
percona-release-x86_64                                                          | 2.9 kB  00:00:00     
prel-release-noarch                                                             | 1.5 kB  00:00:00     
updates                                                                         | 2.9 kB  00:00:00     
zabbix                                                                          | 2.9 kB  00:00:00     
zabbix-frontend                                                                 | 2.9 kB  00:00:00     
zabbix-non-supported                                                            | 2.9 kB  00:00:00     
code/primary_db                                                                 | 2.8 MB  00:00:07     
正在解决依赖关系
--> 正在检查事务
---> 软件包 tree.x86_64.0.1.6.0-10.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

=======================================================================================================
 Package              架构                   版本                           源                    大小
=======================================================================================================
正在安装:
 tree                 x86_64                 1.6.0-10.el7                   base                  46 k

事务概要
=======================================================================================================
安装  1 软件包

总下载量:46 k
安装大小:87 k
Is this ok [y/d/N]: y
Downloading packages:
tree-1.6.0-10.el7.x86_64.rpm                                                    |  46 kB  00:00:05     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : tree-1.6.0-10.el7.x86_64                                                           1/1 
  验证中      : tree-1.6.0-10.el7.x86_64                                                           1/1 

已安装:
  tree.x86_64 0:1.6.0-10.el7                                                                           

完毕!
[root@master1 nginx]# tree
.
├── files
│   └── main.yml
├── handles
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
│   └── main.yml
└── vars
    └── main.yml

5 directories, 5 files
[root@master1 nginx]# 

files 文件夹存放文件

存放 default.conf 配置文件
[root@master1 ~]# cat www.guan.com.conf 
server {
    listen 80;
    server_name www.guan.com.conf;
    root /usr/share/nginx/html;
    access_log /var/log/nginx/www.guan.com-access_log main;
    error_log /var/log/nginx/www.guan.com-error_log;

    add_header Access-Control-Allow-Origin *;
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
            expires     1d;
    }

    location ~ .\.(js|css)$? {
            expires     1d;
    }
}
[root@master1 ~]# 

[root@master1 ~]# cp www.guan.com.conf  ./nginx/files/
[root@master1 ~]# ls ./nginx/files/
main.yml  www.guan.com.conf
[root@master1 ~]# rm -rf ./nginx/files/main.yml
[root@master1 ~]# ls ./nginx/files/
www.guan.com.conf
[root@master1 ~]# 

handlers 文件夹中的main.yml 文件

- name: reload nginx server
  service: name=nginx state=reloaded
  when: nginxsyntax.rc == 0

tasks 文件夹中的 main.yml 文件

    - name: 传输仓库文件
      copy:
        src: nginx.repo
        dest: /etc/yum.repos.d/nginx.repo
    - name: 安装 nginx
      yum: name=nginx state=present

    - name: 利用模板文件,设置主配置文件
      template:
        src: "{{ main_conf }}"
        dest: /etc/nginx/nginx.conf
      tags: update

      # 触发任务
      notify: reload nginx server

    - name: 子配置文件
      copy:
        src: "{{ sub_conf }}"
        dest: /etc/nginx/conf.d/
      tags: update
      notify: reload nginx server

    - name: check nginx syntax
      shell: /usr/sbin/nginx -t
      register: nginxsyntax
      tags: update

    - name: 启动 nginx 服务
      when: nginxsyntax.rc == 0
      systemd: name=nginx state=started

templates 文件夹存放模板

user              nginx;
{# start process equal cpu cores #}
worker_processes {{ ansible_processor_vcpus }};

error_log  /var/log/nginx/error.log;
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"';

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  0;

    gzip on;
    gzip_min_length  1k;
    gzip_buffers     8 64k;
    gzip_http_version 1.0;
    gzip_comp_level 5;
    gzip_types   text/plain application/x-javascript text/css application/json application/xml application/x-shockwave-flash application/javascript image/svg+xml image/x-icon;
    gzip_vary on;
    {# add_header {{ ansible_hostname }}; #}
    add_header x-hostname {{ ansible_hostname  }};

    include /etc/nginx/conf.d/*.conf;
}

vars 文件夹中的 main.yml 文件

main_conf: nginx.conf.j2
sub_conf: default.conf

四、如何在PlayBook中使用 Role

1. 经典(原始)方式

编译一个 playbool,内容如下:

在 playbook 中给定 roes:属性

文件:deploy-nginx.yml

- name: use  role
  hosts: web_servers
  roles:
    - web_servers

保证 deploy-nginx.yml 文件的当前目录下有 webservers 角色

执行:

ansible-playbook -i hosts deploy_nginx.yml 

将上面的内容保存为一个 yml 文件: test_play_vars.yml

目录结构

[root@master1 ~]# mkdir web_servers
[root@master1 ~]# mv ./nginx web_servers
[root@master1 ~]# mv ./test_play_vars.yml  web_servers
[root@master1 ~]# cd  web_servers
[root@master1 web_servers]# ls
nginx  test_play_vars.yml
[root@master1 web_servers]# tree .
.
├── nginx
│   ├── files
│   │   └── www.guan.com.conf
│   ├── handles
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   │   └── nginx.conf.j2
│   └── vars
│       └── main.yml
└── test_play_vars.yml

6 directories, 6 files
[root@master1 web_servers]# 

执行:

#ansible-playbook -i hosts test_play_vars.yml

2. 新方式

在 playbook 中给定 import_role 属性
这种方式适用于 Ansible 2.4及以上

#vim nginx_new.yml 
- name: use rose
  hosts: web_servers
  tasks:
    - debug:
      msg: "before we run our role"
    - import_role:
        name: nginx
    - debug:
        msg: "after we ran our role"

执行方式同第一种

ansible-playbook -i hosts nginx_new.yml

新的目录结构

[root@master1 ~]# mkdir web_servers
[root@master1 ~]# mv ./nginx web_servers
[root@master1 ~]# mv ./test_play_vars.yml  web_servers
[root@master1 ~]# cp /root/hosts /root/web_servers/
[root@master1 ~]# cd  web_servers
[root@master1 web_servers]# ls
nginx  test_play_vars.yml  hosts
[root@master1 web_servers]# tree .
.
├── hosts
├── nginx
│   ├── files
│   │   └── www.guan.com.conf
│   ├── handles
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   │   └── nginx.conf.j2
│   └── vars
│       └── main.yml
└── test_play_vars.yml

五、如何使用 Galaxy

ansible 的Galaxy 工具,类似程序员使用的GitHub,运维人员可以将自己编写的Role 通过 Galaxy 这个平台进行分享。同样,我们也可以通过 Galaxy 这个平台去获取一些我们想要的role。
官网地址:https://galaxy.ansible.com/在这里插入图片描述

而 ansible-Galaxy 则是一个使用 galaxy 命令工具,它使我们不用访问 galaxy 的网站就可以获取到需要的内容。

获取帮助

[root@master1 web_servers]# ansible-galaxy --help
usage: ansible-galaxy [-h] [--version] [-v] TYPE ...

Perform various Role and Collection related operations.

positional arguments:
  TYPE
    collection   Manage an Ansible Galaxy collection.
    role         Manage an Ansible Galaxy role.

optional arguments:
  --version      show program's version number, config file location,
                 configured module search path, module location, executable
                 location and exit
  -h, --help     show this help message and exit
  -v, --verbose  verbose mode (-vvv for more, -vvvv to enable connection
                 debugging)
[root@master1 web_servers]# 

常用指令

//在galaxy 上搜索共享的 role
#ansible-galaxy search
// 安装 galaxy 上共享的 role
#ansible-galaxy install
//列举已经通过 ansible-galaxy 工具安装的 role
#ansible-galaxy list
// 创建一个 role 的空目录架构,这样我们在开发一个role的时候就不需要手动创建目录了
#ansible-galaxy  init --offline
[root@master1 web_servers]# ansible-galaxy  init guan.testrole
- Role guan.testrole was created successfully
[root@master1 web_servers]# tree   guan.testrole
guan.testrole
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

8 directories, 8 files
[root@master1 web_servers]# 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【博客588】ipvs nat模式下独立于iptables与conntrack的连接跟踪表和NAT机制

ipvs nat模式下独立于iptables与conntrack的连接跟踪表和NAT机制 ipvs的连接跟踪表和NAT机制 ipvs只有DNAT和de-DNAT功能 ,它独立与iptables和conntrack,实现了自己的一套连接跟踪表和NAT机制。ipvs仅仅在做DNAT后对conntrack连接进行更新,防止回包因为没有记录而被丢弃。 i…

邂逅Vue.js开发

1、认识Vue Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式 JavaScript框架。 全称是Vue.js或者Vuejs;它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型;帮助你高效地开发用户…

学习笔记 一天学完JavaScript基础语法(全)

JavaScript 文章目录JavaScript第一章——初始JavaScript1.1 浏览器执行 JS 简介1.2 JS的组成1.2.1 ECMAScript1.2.2 DOM ——文档对象模型1.2.3 BOM ——浏览器对象模型1.3 JS的写法1.3.1 行内式写法1.3.2 内嵌式写法1.3.3 外部js文件1.4 注释1.5 变量1.5.1 变量声明1.5.2 变量…

【源码解析】Nacos配置中心的源码解析

POM文件添加依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>在依赖中查看自动装配文件spring.factories org.springframework.cloud.bootstr…

String类详解

在Java编程中&#xff0c;除Object类外&#xff0c;最常用的类就是String类了。本文将从String类源码出发&#xff0c;对String类进行一个全面的分析&#xff0c;以帮忙我们更好的理解和使用String类。 String类概述 Java 使用 String 类代表字符串。Java 中的所有字符串字面…

已解决MemoryError

已解决Python读取20GB超大文件报错&#xff1a;MemoryError 文章目录报错问题报错翻译报错原因解决方法1解决方法2&#xff08;推荐使用&#xff09;帮忙解决报错问题 日常数据分析工作中&#xff0c;难免碰到数据量特别大的情况&#xff0c;动不动就2、3千万行&#xff0c;…

Linux——网络配置篇

1、前情提要&#xff1a; 今晚在配置Linux &#xff08;CentOS7完整版&#xff09;的时候 明明已经配好了网络环境&#xff0c;重启虚拟机后&#xff0c;又出现了Ping不通 主机、Ping不通网关&#xff0c;外网的情况 &#xff08;NAT&#xff09;。 让我很费解的一个情况是&am…

数据结构与算法基础(王卓)(8):线性表的应用

PPT&#xff1a;第二章P173&#xff1b; 并集集合&#xff1a;线性表的合并&#xff08;无需有序&#xff0c;不能重复&#xff09; 线性表&#xff1a; Status Union(Sqlist& A, Sqlist& B)//并集 {int len_A A.length;int len_B B.length;for (int i 1; i < …

SpringCloud学习(1)

SpringCloud学习 软件架构演进之路 对于单体架构&#xff0c;我们根据设计期和开发实现期的不同模式和划分结构&#xff0c;可以分为&#xff1a; 简单单体模式&#xff1a; 代码层面没有拆分&#xff0c;所有的业务逻辑都在一个项目&#xff08;Project&#xff09;里打包…

​力扣解法汇总2293. 极大极小游戏

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a; 力扣 描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums &#xff0c;其长度是 2 的幂。 对 n…

伪随机码序列

伪随机码又称伪随机序列&#xff0c;是用确定性方法产生的在一段周期内具有类似白噪声的随机特性的二&#xff08;或多&#xff09;进制数据序列。 伪随机序列在码分复用、码分多址和扩频通信中都有重要应用。常用的伪随机序列有m序列、M序列和Gold序列。 作为地址码和扩频码…

pycharm中commit/push撤销+分支合并

一、现在想撤销到打印3怎么操作&#xff1f; 1复制修订号 2鼠标右键 3去项目下执行git bash here&#xff0c;再输入git push -f 4此时&#xff0c;github中的push就已经回退成功&#xff1b;再进行一次新代码的commit和push&#xff0c;master分支的颜色就变成黄色了&#x…

Windows中安装 MySQL8.0.30 数据库

下载安装文件 访问MySQL官网下载安装文件https://downloads.mysql.com/archives/community/。 如下图所示&#xff0c;点击页面中的“DOWNLOAD”按钮。 然后&#xff0c;会出现如下所示页面&#xff0c;点击页面底部的“No thanks, just start my download”&#xff0c;就可…

Vue3商店后台管理系统设计文稿篇(四)

记录使用vscode构建Vue3商店后台管理系统&#xff0c;这是第四篇&#xff0c;主要记录使用git与vscode将代码同步提交到GitHub上面 文章目录一、Git与Github建立连接二、配置开发工具三、实用Git命令仓库相关命令分支相关命令正文内容&#xff1a; 一、Git与Github建立连接 使…

从0到1【建站:AWS+Ubuntu+Python+Django+uwsgi+nginx+ssl】

目录一、创建服务器1、进入AWS官网2、启动实例3、创建新密钥对4、选择密钥对5、网络设置6、配置存储7、启动实例8、查看实例9、配置安全组二、连接服务器1、在AWS官网进行连接2、使用Xshell7进行连接3、设置允许root登录三、域名解析1、进行腾讯云官网2、管理域名解析3、绑定公…

xilinx ZYNQ 7000 XADC 片上模拟转数字模块

上图所示&#xff0c;XADC 属于 PL部分的资源 XADC是一种硬逻辑实现&#xff0c;位于PL功率域。PS- xadc接口是PS的一部分&#xff0c;可以被PS APU访问&#xff0c;而不需要对PL进行编程。PL必须上电才能配置PS-XADC接口、使用PL- jtag或DRP接口以及操作XADC。 上面的机构图能…

通关算法题之 ⌈回溯算法⌋

回溯算法 子集组合排列 78. 子集 给你一个整数数组 nums&#xff0c;数组中的元素互不相同 &#xff0c;返回该数组所有可能的子集&#xff08;幂集&#xff09;。解集不能包含重复的子集&#xff0c;你可以按任意顺序 返回解集。 输入&#xff1a;nums [1,2,3] 输出&…

LeetCode 5. 最长回文子串

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 5. 最长回文子串&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 LeetCode 5…

1590_AURIX_TC275_PMU_Flash的操作

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这里提到的这个复位读取操作&#xff0c;复位的对象其实是当前的操作&#xff0c;也就是命令序列。主要是命令序列的最后一个命令还没有被接收到&#xff0c;都可以被这个命令中断。在复位…

目标检测:特征金字塔网络(Feature Pyramid Network)

目标检测&#xff1a;特征金字塔网络&#xff08;Feature Pyramid Network&#xff09;概述核心思想概述 由于在目标检测任务中&#xff0c;对与大目标的检测&#xff0c;需要feature map每个点的感受野大一点&#xff08;高层语义特征&#xff09;&#xff0c;对于小目标&…