自动化运维 ansible角色管理

2023-05-16

文章目录

  • 一、Templates模块
      • 1、获取模板
      • 2、定义变量
      • 3、传入变量
      • 4、编写剧本
  • 二、tags 模块
      • 1、编写tags标签剧本
      • 2、编写always标签剧本
  • 三、role模块
    • (一)、roles内各目录含义解释:
    • (二)、在一个playbook中使用roles的步骤
      • 1、创建以roles命令的目录。
      • 2、创建全局变量目录。
      • 3、在roles目录中分别创建以各角色名称命令的目录,如httpd.
      • 4、在每个角色命令的目录中分别创建files. handlers. tasks. templates. meta、 defaults和vars目录, 用不到的目录可以创建为空
      • 5、在每个角色的handlers. tasks、 meta、 defaults, vars目录下创建main.yml文件, 千万不能自定义。
      • 6、在playbook文件中,调用各角色。
    • (三)、实验:安装搭建LAMP架构
      • 1、编写httpd模块
      • 2、编写mysq|模块
      • 3、编写php模块
      • 4、编写roles示例
      • 5、执行剧本

一、Templates模块

在控制端进行以下操作:

1、获取模板

yum install -y httpd     #获取httpd.conf模板
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2

2、定义变量

#定义httpd.conf.j2文件中的变量
[root@localhost conf]# cd /opt/
[root@localhost opt]# ls
httpd.conf.j2  rh  test.sh
[root@localhost opt]# vim httpd.conf.j2 
Listen {{http_port}}         #修改(监听端口)
ServerName {{server_name}}   #取消注释后修改(域名)
MaxClients {{access_num}}    #添加改行(最大连接数)

3、传入变量

[root@localhost opt]# vim /etc/ansible/hosts
[webservers]
192.168.200.30 http_port=192.168.200.30:80 access_num=30 server_name="www.gcc.com:80"
[mysql]
192.168.200.40

4、编写剧本

[root@localhost demo]# vim i.yaml 

- hosts: webservers
   remote_user: root
   vars:
    - names: httpd
   tasks:
    - name: install httpd
      yum: name={{names}} state=latest
    - name: config file
      template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
      notify:
       - restart httpd
    - name: enable httpd
      service: name={{names}} enabled=true state=started
   handlers:
    - name: restart httpd
      service: name={{names}} state=restarted

#执行剧本
[root@localhost demo]# ansible-playbook i.yaml

#去远程主机[webservers]上查看配置文件是否更改成功
grep -i listen /etc/httpd/conf/httpd.conf
grep -i maxClient /etc/httpd/conf/httpd.conf
grep -i servername /etc/httpd/conf/httpd.conf

在这里插入图片描述

二、tags 模块

1、编写tags标签剧本

如果剧本中有tags标签,那么在执行剧本的时候备注上tags标签的话,只会执行到tags标签处就会停止,不会再往后执行。

[root@localhost demo]# vim j.yaml
 - hosts: webservers
   remote_user: root
   tasks:
    - name: copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
       - abc
    - name: touch file
      file: path=/opt/hosts01 state=touch


[root@localhost demo]# ansible-playbook j.yaml --syntax-check    #检查yaml语法是否有错

playbook: j.yaml
[root@localhost demo]# ansible-playbook j.yaml --tags="abc"    #使用tags命令,让yaml文件执行到tags标签处停止,后面的内容不再执行   

发现只执行到copy模块处
在这里插入图片描述

2、编写always标签剧本

当打上always标签后,无论前面是否与其他tags标签,整个剧本均会被执行。

[root@localhost demo]# vim j.yaml 
 - hosts: webservers
   remote_user: root
   tasks:
    - name: copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
       - abc
    - name: touch file
      file: path=/opt/hosts01 state=touch
      tags:
        - always


[root@localhost demo]# ansible-playbook j.yaml --tags="abc"

发现执行到了touch模块处
在这里插入图片描述

三、role模块

roles能够根据层次型结构自动装载变量文件、task以及handlers等。

roles/
	common/
	files/
	templates/
	tasks/
	handlers/
	vars/
	defaults/
	meta/
web/
	files/
	templates/
	tasks/
	handlers/
	vars/
	defaults/
	meta/

(一)、roles内各目录含义解释:

files:用来存放由copy模块或script模块调用的文件。
templates:用来存放jnja2(j2)模板,template模块会自动在此目录中寻找jinjia2模板文件。
tasks:此目录应当包含一个 main.yml 文件, 用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件。
handlers:此目录应当包含一个 main.yml 文件, 用于定义此角色中触发条件时执行的动作。
vars:此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。
defaults:此目录应当包含一个 main.yml 文件, 用于为当前角色设定默认变量。
meta:此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系。

(二)、在一个playbook中使用roles的步骤

1、创建以roles命令的目录。

mkdir /etc/ansible/roles/ -p    #yum装完默认就有

2、创建全局变量目录。

mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all     #文件名自己定义,引用的时候注意

3、在roles目录中分别创建以各角色名称命令的目录,如httpd.

mkdir /etc/ansible/roles/common -p

4、在每个角色命令的目录中分别创建files. handlers. tasks. templates. meta、 defaults和vars目录, 用不到的目录可以创建为空

mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p

5、在每个角色的handlers. tasks、 meta、 defaults, vars目录下创建main.yml文件, 千万不能自定义。

touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml

6、在playbook文件中,调用各角色。

vi /etc/ansible/site.yml
 - hosts: webserver
   remote_user: root
   roles:
    - httpd
    - mysql

(三)、实验:安装搭建LAMP架构

mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p

touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml

1、编写httpd模块

写一个简单的 tasks/main.yml

vim /etc/ansible/roles/httpd/tasks/main.yml
 - name: ensure apache is at the latest version
   yum: pkg={{pkg}} state=latest

定义变量:可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中

vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd

2、编写mysq|模块

vim /etc/ansible/roles/mysql/tasks/main.yml
 - name: ensure mysql is at the latest version
   yum: pkg={{pkg}} state=latest


vim /etc/ansible/roles/mysql/vars/main.yml
pkg: mariadb*

3、编写php模块

vim /etc/ansible/roles/php/tasks/main.yml
 - name: ensure php is at the latest version
   yum: pkg={{pkg}} state=latest

vim /etc/ansible/roles/php/vars/main.yml
pkg: php

4、编写roles示例

vim /etc/ansible/site.yml
 - hosts: webservers
   remote_user: root
   roles:
    - httpd
    - mysql
    - php

5、执行剧本

[root@localhost mysql]# ansible-playbook /etc/ansible/site.yml 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动化运维 ansible角色管理 的相关文章

  • Cygwin - 如何安装 ansible?

    如何使用 Cygwin 获取 安装 ansible 我尝试了以下步骤 但在第 5 条期间 运行时 python setup py 安装 步骤取自 取自https servercheck in blog running ansible wit
  • Ansible:即使成为 sudo 用户,也无法配置 sudo 命令

    testuser 是 sudo 用户 sudo cat etc sudoers d 90 cloud init testuser testuser ALL ALL NOPASSWD ALL 我可以手动登录 testuser 并在没有密码的情
  • 如何从用户定义的 ansible.cfg 设置 ansible_config 变量

    我有一个目录结构 在其中保存我的剧本 如下所示 home monk Ansible work ansible cfg playbook dir 1 playbook 1 yml playbook dir 2 playbook 2 yml p
  • Ansible 循环直到条件匹配。

    我想进行一系列 API 调用 每次调用后检查结果中的特定参数 如果它大于特定值 则将其保存在寄存器中并继续进一步执行剧本 基本上 我正在对 RHEV 进行 API 调用来检查存储域 然后我想检查存储域是否有足够的空间 如果有 则将该存储域i
  • 使用 Ansible 配置 EC2 实例时遇到问题

    我对如何使用 Ansible 启动 EC2 实例感到非常困惑 我正在尝试使用 ec2 py 库存脚本 我不确定应该使用哪一个 因为 Ansible 安装了三个 ansible lib ansible module utils ec2 py
  • ansible 用户模块总是显示已更改

    我正在努力正确使用 ansible 的用户模块 问题是每次我运行我的剧本时 我创建的用户always显示为已更改 即使我已经创建了它们 我在这里发现其他人也有同样的问题 https github com ansible ansible is
  • 如何使用 Ansible when 条件在文件中搜索字符串

    我有一个变量中用 n 分隔的搜索字符串列表listofips 我想在文件中搜索该字符串hello csv在我的下面playbook dir 我可能遇到一些语法问题 我不确定 但下面是我尝试过的 set fact listofips 10 0
  • 使用 ansible 'Docker login' 和 _json_key Docker 登录到 GCE

    我正在尝试编写一个 ansible 角色 首先执行以下操作docker login从容器注册表中提取映像之前 将其复制到 GCE 实例 由于提到的问题 我需要这样做here https stackoverflow com questions
  • Ansible bitbucket 克隆存储库配置 ssh 错误

    我之前发布过这个问题 但那里的答案不再有效 总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 权限被拒绝 公钥 然而 如果
  • local_action:shell 连接文件时出错

    我的剧本中有这样的错误 为什么以及如何解决它 获取远程主机的更新列表 将列表连接到一个文件中 name Save update deb packs in file on ansible host copy content update de
  • 如何在 Jinja 中过滤字典?

    我有一个包字典 包名称是key和一些细节的字典是value php7 1 readline latest 7 1 9 1 ubuntu14 04 1 deb sury org 1 origins ppa launchpad net vers
  • 角色和任务可以存在于同一个剧本中吗?

    file main yml hosts fotk remote user fakesudo tasks name create a developer user user name user password password shell
  • 模板化字符串时出现模板错误:意外的字符 u - Ansible

    执行剧本以在远程主机中运行命令并使用 shell 传递输出时 出现以下错误 致命 master1 失败 gt MSG 模板化时出现模板错误 字符串 4 处出现意外的字符 u a 字符串 54aa7fda16833bff8358b6bd115
  • Ansible bitbucket 克隆配置 ssh 错误

    总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 主机密钥验证失败 然而 如果我流浪 ssh 然后运行 克隆 命令 私有存
  • Ansible:仅在存在时禁用服务

    有没有什么好的方法可以禁用和停止服务 但前提是它安装在服务器上 像这样的事情 service name item enabled no state stopped only if present yes with items avahi d
  • 如何在 Ansible 中制作幂等 shell

    我正在使用 Ansible 在尝试使 shell 执行幂等时遇到一些问题 我做的第一件事是安装python apt 包因为我需要它来使用 apt 模块来安装其他软件包 但每次我运行我的playbookshell 任务始终运行 我想使其幂等
  • 我们如何在使用循环时调用 ansible playbook 中的变量

    我有两个文件 其中这些文件包含server names and server IP s 我想更改 替换一些特定的server names and IP addressees根据要求在两个文件中 这与这篇文章 因为它被要求开设一个新职位 ht
  • Ansible - 当至少一项在循环中失败时跳过任务

    我正在使用 sqlplus 运行一些 SQL 脚本 在运行之前 我从该目录获取所有 sql 文件列表并将其存储在sql out如下所示 问题是 如果其中一个 sql 脚本失败 其余 sql 脚本仍然会执行 如果任何一个脚本失败 我想完全跳过
  • Ansible:对任务失败执行清理

    我目前正在编写一个 Ansible play 它遵循此通用格式并通过 cron 作业运行 pre tasks Configuration package installation tasks Work with installed pack
  • Ansible 创建可以访问所有表的 postgresql 用户?

    这应该很简单 我想要创建一个 Ansible 语句来创建一个 Postgres 用户 该用户具有特定数据库的连接权限以及对该特定数据库中所有表的选择 插入 更新 删除权限 我尝试了以下方法 name Create postgres user

随机推荐

  • Git使用教程

    1 版本控制 1 1 简介 版本控制 Revision control 是一种在开发的过程中用于 管理我们对文件 目录或工程等内容的修改历史 方便查看更改历史记录 备份以便恢复以前的版本的软件工程技术 实现跨区域多人协同开发 追踪和记载 个
  • [leetcode]解码方法(Decode Ways)

    解码方法 xff08 Decode Ways xff09 一条包含字母 A Z 的消息通过以下方式进行了编码 xff1a 39 A 39 gt 1 39 B 39 gt 2 39 Z 39 gt 26 给定一个只包含数字的非空字符串 xff
  • C#调用FluentFTP将文件批量上传到ftp服务器

    上篇文章介绍了在Windows Server 2008上搭建FTP服务 xff0c 本文测试使用C 调用FluentFTP将文件批量上传到ftp服务器 FluentFTP是由C 开发的开源FTP和FTPS库 xff0c 其开源地址见参考文献
  • RouterOS 通过NTH/PCC设置多线负载均衡及带宽叠加

    关于NTH的相关原理 xff0c 请大家移步RouterOS Nth与Passthrough 务必要多看几遍 xff0c 彻底把原理看明白了 xff0c 然后再上机实验就能收到事半功倍的效果 如果大家原理不明白 xff0c 仅靠看别人的文档
  • Windows及Ubuntu下安装PyCharm

    之前编写Python程序 xff0c 在Windows下面主要使用的记事本或者Python自带的IDLE工具 xff0c Ubuntu下主要是在VSCode中编写 xff0c 编写或调试程序都比较麻烦 xff0c 百度了一下 xff0c 目
  • android app 设置以太网静态Ip

    写文目的 公司是做工控和楼宇智能方面产品 xff0c 使用的设备有rk和全志平台 xff0c 运行的是android操作系统 xff0c 部分场景需要设置有线网络的静态Ip 所以针对这一需求做了如下工作 xff0c 并以此文作为总结 遇到的
  • python神经网络案例——CNN卷积神经网络实现mnist手写体识别

    转自 xff1a https blog csdn net luanpeng825485697 article details 79088938 全栈工程师开发手册 xff08 作者 xff1a 栾鹏 xff09 python教程全解 CNN
  • Java删除字符串中的指定字符

    Java删除字符串中的指定字符有以下两种方法 xff1a 1 替换函数 xff0c 替换成空白 String test 61 chaojimali test 61 test replace chaoji 2 截取函数 xff0c 删除字符
  • Spring MVC 异常,怎样显示比较友好?

    本文基于Spring MVC 注解 xff0c 让Spring跑起来 实施过程中完全没有任何异常 xff0c 测试过程中也没出错 xff0c 偏偏在客户试用过程中报错了 报错了 xff0c 怎样给客户友好界面 xff1f 两个方法 xff1
  • Android进程的内存管理分析

    尊重原创作者 xff0c 转载请注明出处 xff1a http blog csdn net gemmem article details 8920039 最近在网上看了不少Android内存管理方面的博文 xff0c 但是文章大多都是就单个
  • 简单了解5G

    什么是5G 一 5G的特点 xff1a 二 5G的8个关键技术指标 xff08 与4G作对比 xff09 三 5G的几个关键技术 一 动态自组织网络 xff08 SON xff09 xff08 二 xff09 软件定义网络 xff08 SD
  • MSTP、LACP、VRRP、DHCP、NAT综合实验技术文档

    MSTP LACP VRRP DHCP NAT综合实验技术文档 要求 xff1a 要求按照拓扑图配置MSTP VRRP DHCP NAT等相关命令使得图中所有终端能够网络互通 1 MSTP 43 链路聚合 正常情况下各VLAN流量路径要求如
  • 解决共享文件时出现 “mount error(13): Permission denied” 错误

    当在Windows 系统和 Linux 系统之间共享文件时出现如下的错误 xff1a root 64 localhost mount cifs 192 168 226 1 kugou data Password for root 64 19
  • shell 脚本汇总 (持续更新中)

    文章目录 1 计算从1到100所有整数的和2 提示用户输入一个小于100的整数 xff0c 并计算从1到该数之间所有整数的和3 求从1到100所有整数的偶数和 奇数和4 写个逛淘宝选购商品脚本 xff0c 每家商店有五种商品选购 xff08
  • RouterOS 重置密码

    如果RouterOS的密码忘记了 xff0c 大家不必惊慌 xff0c 本文就以Routeros 6 48 6为例给大家讲解一下X86平台下RouterOS的密码重置 xff0c 其实X86平台下各版本的重置步骤大致相同 都是找到user
  • Nginx+Tomcat 实现负载均衡、动静分离群集配置

    文章目录 一 Nginx 负载均衡实现原理二 Nginx 动静分离实现原理三 Nginx 43 Tomcat 动静分离 负载均衡配置步骤1 部署 Nginx 负载均衡服务器2 部署两台 Tomcat 应用服务器3 动静分离配置 一 Ngin
  • MySQL主从复制与读写分离报错与解决方案

    文章目录 报错一 xff1a java 的3306端口找不到报错二 xff1a 端口次数出现太多报错三 xff1a 在客户机中远程连接 amoeba服务器 代理访问mysql 时 xff0c 连接不上amoeba 当我在部署MySQL主从复
  • 超实用的ELK日志分析系统

    文章目录 前言 xff1a 一 ELK日志分析系统简介 xff08 一 xff09 日志服务器 xff08 二 xff09 ELK日志分析系统补充 xff1a xff08 三 xff09 日志处理步骤 xff08 四 xff09 Elast
  • 实用!!Openstack一键部署步骤

    文章目录 一 环境需求二 环境配置1 配置静态地址 主机名2 关闭 xff08 设置开机不启动 xff09 防火墙 核心防护 NetworkManager3 安装时间同步服务 同步阿里云时钟服务器 xff08 ntp1 ntp2 设置周期性
  • 自动化运维 ansible角色管理

    文章目录 一 Templates模块1 获取模板2 定义变量3 传入变量4 编写剧本 二 tags 模块1 编写tags标签剧本2 编写always标签剧本 三 role模块 xff08 一 xff09 roles内各目录含义解释 xff1