Ansible上通过roles简化playbook演示介绍

2023-10-27 07:45

本文主要是介绍Ansible上通过roles简化playbook演示介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一.roles介绍

1.作用

2.role的目录结构

3.role和tasks的执行优先级顺序

二.自定义一个httpd的角色

1.完整目录结构展示

2.主要的各个目录配置

(1)vars目录和templates目录

(2)tasks目录和handlers目录

(3)运行playbook测试

三.ansible galaxy安装roles

1.在线网站

2.配置roles_path

3.ansible-galaxy安装role

4.其他管理

四.系统角色

1.安装系统角色包

2.更改配置文件role路径便于对系统角色进行操作

3.介绍rhel提供的部分系统角色

4.timesync和selinux示例

(1)timesync

(2)selinux


一.roles介绍

1.作用

主要适用于层次性、结构化来组织playbook任务。根据层次型结构自动装载变量文件、tasks、和handlers等。主要应用于基于主机构建服务和构建进程场景、代码服用程度较高的场景。

2.role的目录结构

在playbook中通过“roles: role文件”来引用role,role的目录结构不要求全部完整,根据role要实现的功能来添加目录和文件

名称含义
tasks至少要包含一个main.yaml,用来定义这个角色的任务列表,可以使用include引入其他tasks
files存放copy或script模块调用的文件
templatestemplate模块寻找jinja2模版的目录
handlers要包含一个main.yaml,来定义这个角色用到的handlers
vars要包含一个main.yaml,用来定义这个角色要用到的变量
mate要包含一个main.yaml,用来定义这个角色的特殊设置

3.role和tasks的执行优先级顺序

pre_tasks > roles > tasks > post_tasks

二.自定义一个httpd的角色

1.完整目录结构展示

[root@main roles]# tree .
.
├── ansible.cfg    #存放ansible配置文件
├── httpd     #role目录
│   ├── handlers    #存放handlers
│   │   └── main.yaml   
│   ├── tasks   #存放主要执行的任务
│   │   ├── config.yaml   #关于配置httpd
│   │   ├── group.yaml   #关于配置httpd属组
│   │   ├── install.yaml   #关于安装httpd
│   │   ├── main.yaml   #关于所有任务的引入
│   │   ├── start.yaml   #关于启动httpd
│   │   └── user.yaml   #关于配置httpd属主
│   ├── templates       #存放要部署下发的文件
│   │   └── httpd.conf.j2
│   └── vars   #存放变量
│       └── main.yaml
├── httpd_roles.yaml   #最终指定执行role的playbook文件
└── myhosts   #主机清单文件

2.主要的各个目录配置

(1)vars目录和templates目录

[root@main httpd]# cat vars/main.yaml   #自定义在受管节点的httpd服务要用到的参数
port: 8090
user: sulibao
group: sulibao
​
[root@main httpd]# cp httpd.conf /root/roles/httpd/templates/httpd.conf.j2  
#从本地拷贝httpd的配置文件到templates目录,且为j2格式
#需要修改参数的话就按照j2变量格式去修改
[root@main httpd]# cat templates/httpd.conf.j2 | grep Listen;cat templates/httpd.conf.j2 | grep User;cat templates/httpd.conf.j2 | grep Group
# Listen: Allows you to bind Apache to specific IP addresses and/or
# Change this to Listen on specific IP addresses as shown below to 
#Listen 12.34.56.78:80
Listen "{{ port }}"         #       
# User/Group: The name (or #number) of the user/group to run httpd as.
User "{{ user }}"    #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
# User/Group: The name (or #number) of the user/group to run httpd as.
Group "{{ group }}"    #

(2)tasks目录和handlers目录

[root@main httpd]# cat tasks/user.yaml #创建用户
- name: create useruser:name: "sulibao"uid: 1050system: yesshell: /sbin/nologin
[root@main httpd]# cat tasks/group.yaml   #创建组
- name: create groupgroup:name: "sulibao"gid: 1050system: yes
[root@main httpd]# cat tasks/install.yaml   #安装httpd
- name: install httpdyum:name: httpdstate: present
[root@main httpd]# cat tasks/start.yaml    #启动httpd
- name: start httpdservice:name: httpdstate: startedenabled: yes
[root@main httpd]# cat tasks/config.yaml    #将templates内的配置文件推送给受管节点用
- name: config httpdtemplate:src: /root/roles/httpd/templates/httpd.conf.j2dest: /etc/httpd/conf/httpd.confnotify: restart httpd
[root@main httpd]# cat tasks/main.yaml  #引用所有的任务
- import_tasks: user.yaml
- import_tasks: group.yaml
- import_tasks: install.yaml
- import_tasks: start.yaml
- import_tasks: config.yaml
​
[root@main httpd]# cat handlers/main.yaml 
- name: restart httpdservice:name: httpdstate: restarted

(3)运行playbook测试

[root@main roles]# cat httpd_roles.yaml 
---
- hosts: serveraroles:- role: httpd   #指定httpd角色目录
​
[root@main roles]# ansible-playbook httpd_roles.yaml
​
[root@main roles]# ansible servera -m shell -a 'ss -lntup | grep 8090'   #端口变量运行正常
servera | CHANGED | rc=0 >>
tcp    LISTEN     0      128    [::]:8090               [::]:*                   users:(("httpd",pid=2749,fd=4),("httpd",pid=2748,fd=4),("httpd",pid=2747,fd=4),("httpd",pid=2746,fd=4),("httpd",pid=2745,fd=4),("httpd",pid=2744,fd=4))
​
[root@main roles]# ansible servera -m shell -a 'ps u 2748'    #进程确实是我们指定用户
servera | CHANGED | rc=0 >>
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
sulibao    2748  0.0  0.0 250100  3572 ?        S    14:09   0:00 /usr/sbin/httpd -DFOREGROUND
​
[root@main roles]# ansible servera -m shell -a 'echo hello > /var/www/html/index.html'
servera | CHANGED | rc=0 >>
​
[root@main roles]# ansible servera -m shell -a 'curl localhost:8090'      #能够正常访问
servera | CHANGED | rc=0 >>
hello  

三.ansible galaxy安装roles

ansible-galaxy基于在线网站的公共内容资源库,可以在内进行搜索所需roles,便于从在线网站获取role和git存储库的role。

1.在线网站

Galaxy NG (ansible.com)

时而可用时而不可用,找到role后复制命令进行下载

 

2.配置roles_path

[root@main roles]# cat ansible.cfg | grep role
roles_path=/root/roles/myroles

3.ansible-galaxy安装role

(1)默认通过网站在线安装

[root@main playkongzhi]# ansible-galaxy install role名称

(2)通过文件安装,需要是yaml格式的文件

[root@main playkongzhi]# ansible-galaxy install -r 指定文件 -p 指定安装路径

4.其他管理

(1)初始化角色结构

[root@main playkongzhi]# ansible-galaxy init role名称

(2)列出角色名称

[root@main playkongzhi]# ansible-galaxy list

(3)删除已安装角色

[root@main playkongzhi]# ansible-galaxy remove role名称

(4)搜索角色

可以通过“--author(作者)”、“--platform(平台)”、“--galaxy-tags(标签)“等选项来缩小范围

[root@main playkongzhi]# ansible-galaxy search role名称 选项

四.系统角色

1.安装系统角色包

注意:

角色默认是下载到/usr/share/ansible/roles

其帮助文档位于/usr/share/doc/rhel-system-roles-1.21.2(含示例)

[root@main roles]# yum list | grep roles
rhel-system-roles.noarch                 1.21.2-1.el7_9                extras 
[root@main roles]# yum install -y rhel-system-roles.noarch

2.更改配置文件role路径便于对系统角色进行操作

roles目录路径后再使用":"跟上下载的系统角色目录路径,再就可以查看到我们可用的角色了,若不需要就再把路径改回来即可

[root@main roles]# cat ansible.cfg | grep role
roles_path=/root/roles/myroles:/usr/share/ansible/roles
​
[root@main roles]# ansible-galaxy list
# /root/roles/myroles
# /usr/share/ansible/roles
- linux-system-roles.ad_integration, (unknown version)
- linux-system-roles.certificate, (unknown version)
- linux-system-roles.cockpit, (unknown version)
- linux-system-roles.crypto_policies, (unknown version)
- linux-system-roles.firewall, (unknown version)
- linux-system-roles.ha_cluster, (unknown version)
- linux-system-roles.journald, (unknown version)
- linux-system-roles.kdump, (unknown version)
- linux-system-roles.kernel_settings, (unknown version)
- linux-system-roles.logging, (unknown version)
- linux-system-roles.metrics, (unknown version)
- linux-system-roles.nbde_client, (unknown version)
- linux-system-roles.nbde_server, (unknown version)
- linux-system-roles.network, (unknown version)
- linux-system-roles.podman, (unknown version)
- linux-system-roles.postfix, (unknown version)
- linux-system-roles.rhc, (unknown version)
- linux-system-roles.selinux, (unknown version)
- linux-system-roles.ssh, (unknown version)
- linux-system-roles.sshd, (unknown version)
- linux-system-roles.storage, (unknown version)
- linux-system-roles.timesync, (unknown version)
- linux-system-roles.tlog, (unknown version)
- linux-system-roles.vpn, (unknown version)
- rhel-system-roles.ad_integration, (unknown version)
- rhel-system-roles.certificate, (unknown version)
- rhel-system-roles.cockpit, (unknown version)
- rhel-system-roles.crypto_policies, (unknown version)
- rhel-system-roles.firewall, (unknown version)
- rhel-system-roles.ha_cluster, (unknown version)
- rhel-system-roles.journald, (unknown version)
- rhel-system-roles.kdump, (unknown version)
- rhel-system-roles.kernel_settings, (unknown version)
- rhel-system-roles.logging, (unknown version)
- rhel-system-roles.metrics, (unknown version)
- rhel-system-roles.nbde_client, (unknown version)
- rhel-system-roles.nbde_server, (unknown version)
- rhel-system-roles.network, (unknown version)
- rhel-system-roles.podman, (unknown version)
- rhel-system-roles.postfix, (unknown version)
- rhel-system-roles.rhc, (unknown version)
- rhel-system-roles.selinux, (unknown version)
- rhel-system-roles.ssh, (unknown version)
- rhel-system-roles.sshd, (unknown version)
- rhel-system-roles.storage, (unknown version)
- rhel-system-roles.timesync, (unknown version)
- rhel-system-roles.tlog, (unknown version)
- rhel-system-roles.vpn, (unknown version)

3.介绍rhel提供的部分系统角色

名称描述功能
rhel-system-roles.timesync配置时间同步,使用网络时间协议配置
rhel-system-roles.selinux配置selinux的模式、文件、端口上下文、用户等
rhel-system-roles.network配置网络接口
rhel-system-roles.kdump配置kdump崩溃恢复服务
rhel-system-roles.postfix配置使用postfix配置邮件传输代理
rhel-system-roles.firewall配置防火墙

4.timesync和selinux示例

(1)timesync

实际上,example文件已经给出了完整的模版,按照其中的参数修改为自己需求即可

[root@main roles]# cat /usr/share/doc/rhel-system-roles-1.21.2/timesync/example-multiple-ntp-servers-playbook.yml 
---
- name: Example with multiple servershosts: "{{ targets }}"   #更改为自己管理的主机vars:timesync_ntp_servers:- hostname: 0.pool.ntp.org    #hostname表示要同步的ntp服务器iburst: true- hostname: 1.pool.ntp.orgiburst: true- hostname: 2.pool.ntp.orgiburst: true- hostname: 3.pool.ntp.orgiburst: trueroles:- rhel-system-roles.timesync#将模板文件拷贝过来并改名
[root@main roles]# cp /usr/share/doc/rhel-system-roles-1.21.2/timesync/example-multiple-ntp-servers-playbook.yml timesync.yaml
[root@main roles]# cat timesync.yaml 
---
- name: Example with multiple servershosts: servera   #修改hostsvars:timesync_ntp_servers:- hostname: 0.pool.ntp.org   #就使用模版提供的ntp也行iburst: true     #填写布尔值,启用或禁用快速初始化同步,默认为no,一般设置yes- hostname: 1.pool.ntp.orgiburst: true- hostname: 2.pool.ntp.orgiburst: true- hostname: 3.pool.ntp.orgiburst: trueroles:- rhel-system-roles.timesync
​[root@main roles]# ansible servera -m shell -a 'head /etc/chrony.conf'  
#查看是否应用成功
servera | CHANGED | rc=0 >>
#
# Ansible managed
#
# system_role:timesync
​
​
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
​[root@main roles]# ansible servera -m shell -a 'chronyc sources'
servera | CHANGED | rc=0 >>
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^+ electrode.felixc.at           2   6    37    96    +49ms[+8671us] +/-  140ms
^- ntp5.flashdance.cx            2   6    75    34    +48ms[  +48ms] +/-  149ms
^* makaki.miuku.net              3   6    77    35    -29ms[  -69ms] +/-  128ms
#测试第一次这个可用,成功
^- a.chl.la                      2   6    75    35    +48ms[  +48ms] +/-  139ms

(2)selinux

修改过后需要重启

[root@main roles]# cp /usr/share/doc/rhel-system-roles-1.21.2/selinux/example-selinux-playbook.yml selinux.yaml
[root@main roles]# vim selinux.yaml 
[root@main roles]# cat selinux.yaml 
---
- name: Manage SELinux policy examplehosts: allvars:# Use "targeted" SELinux policy typeselinux_policy: targeted# Set "enforcing" modeselinux_state: enforcing    #模版默认设置的是enforcing# Switch some SELinux booleansselinux_booleans:# Set the 'samba_enable_home_dirs' boolean to 'on' in the current# session only- {name: 'samba_enable_home_dirs', state: 'on'}# Set the 'ssh_sysadm_login' boolean to 'on' permanently- {name: 'ssh_sysadm_login', state: 'on', persistent: 'yes'}# Map '/tmp/test_dir' and its subdirectories to the 'user_home_dir_t'# SELinux file typeselinux_fcontexts:- {target: '/tmp/test_dir(/.*)?', setype: 'user_home_dir_t', ftype: 'd'}# Restore SELinux file contexts in '/tmp/test_dir'selinux_restore_dirs:- /tmp/test_dir# Map tcp port 22100 to the 'ssh_port_t' SELinux port typeselinux_ports:- {ports: '22100', proto: 'tcp', setype: 'ssh_port_t', state: 'present'}# Map the 'sar-user' Linux user to the 'staff_u' SELinux userselinux_logins:- {login: 'sar-user', seuser: 'staff_u', serange: 's0-s0:c0.c1023',state: 'present'}# Manage modulesselinux_modules:# Install the 'localpolicy.cil' with priority 300- {path: "localpolicy.cil", priority: "300", state: "enabled"}# Disable the 'unconfineduser' module with priority 100- {name: "unconfineduser", priority: "100", state: "disabled"}# Remove the 'temporarypolicy' module with priority 400- {name: "temporarypolicy", priority: "400", state: "absent"}
​# Prepare the prerequisites required for this playbooktasks:- name: Creates directoryfile:path: /tmp/test_dirstate: directorymode: "0755"- name: Add a Linux System Roles SELinux Useruser:comment: Linux System Roles SELinux Username: sar-user- name: Execute the role and catch errorsblock:- name: Include selinux roleinclude_role:name: rhel-system-roles.selinuxrescue:# Fail if failed for a different reason than selinux_reboot_required.- name: Handle errorsfail:msg: "role failed"when: not selinux_reboot_required
​- name: Restart managed hostreboot:
​- name: Wait for managed host to come backwait_for_connection:delay: 10timeout: 300
​- name: Reapply the roleinclude_role:name: rhel-system-roles.selinux

这篇关于Ansible上通过roles简化playbook演示介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/286008

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

Mysql BLOB类型介绍

BLOB类型的字段用于存储二进制数据 在MySQL中,BLOB类型,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储的大小不同。 TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

nginx介绍及常用功能

什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务。 Apache:重量级的,不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。这些都决定了Apache不可能成为高性能WEB服务器  nginx: