Linux Ansible创建任务并执行

news/2024/4/20 14:35:24/文章来源:https://blog.csdn.net/m0_49864110/article/details/130374072

目录

通过add-hoc执行anbise任务

通过Playbook剧本方式执行任务

Playbook包含的常用对象

Yaml语法

对Yaml格式自动对齐

Playbook语法检测与执行

Playbook任务实施

Playbook特权升级

Playbook常用模块

软件包管理模块

用户管理模块

存储模块管理

文件操作相关模块

其他任务模块

传统配置与Playbook模块配置比较

Ansible的执行过程

Ansible故障排除


Ansible实现管理的两种方式

通过add-hoc临时执行ansible任务(只可以执行一次)

通过playbook执行ansible任务(通过脚本执行,可以重复执行)

通过add-hoc执行anbise任务

add-hoc就是通过ansible命令来执行ansible任务,可以快速执行单个ansible任务,不需要将其保存下来再去执行,只是简单的在线操作,无需编写playbook剧本即可运行

一般测试、验证的时候会使用临时命令去执行

add-hoc格式

ansible 被管理节点 -m 模块名 -a ‘要执行的命令’ -i 资产清单

被管理节点必须存在于清单中

-m  用于指定某个ansible模块,并结合模块的参数来实现特定功能

-a   用于带引号的字符串形式来执行命令(可以单引号,可以双引号;如果命令也需要使用引号的化需要与之相反)

-i    指定使用的某个资产清单

add-hoc执行的例子

通过shell模块实现在所有的主机节点查看根的文件系统使用率

ansible all -m shell -a  "df -Th /"

通过user模块实现在所有主机上创建用户名admin1,uid为1500,家目录为/opt/admin1,shell环境为/sbin/nologin的用户

ansible all -m user -a “name=admin1 uid=1500 home=/opt/admin1 shell=/sbin/nologin”

通过copy模块在所有主机上创建文件/etc/admin1,内容为copy module create file,权限为0444

ansible all -m copy -a "content='copy module create file' dest=/etc/admin1 mode='0444'"

模块查询

如果不知道如何编写某个模块的临时命令,可以通过ansible-doc 模块名 来查看这个模块的信息

查看ansible是否有copy模块

ansible-doc -l | grep copy

查看copy模块的说明(有例子,可以根据例子编写临时命令)

ansible-doc copy


通过Playbook剧本方式执行任务

Add-hoc每次只可以执行一个任务,并且不可以重复任务

使用剧本方式可以声明配置,编排多机部署,可以重复利用,是最常用的方式

Playbook编写格式

Playbook使用YAML格式编写

每个playbook由一个列表中的一个或多个play组成(play有不同的对象组成)

Playbook包含的常用对象

hosts                 使用host来指示在哪些主机或主机组上运行tasks

remoute_user:   在远程主机上使用的用户(默认为ansible.cfg文件中remoute_user字段对应的用户)

tasks              任务列表,指定远端主机所要执行的任务(包含name和要执行的模块,name表示的类似注释的意思,时为了便于用户识别,是可选的)

variables         变量(后续介绍)

templates         包含了模板语法的文本文件(后续介绍)

roles                包含了要调用的角色(后续介绍)

handlers           由特定条件触发的任务(后续介绍)

Yaml语法

  1. 文件后缀名为.yml或yaml
  2. 文件的第一行需要以 “---” 开始,表明Ymal文件的开始
  3. 可以在同一行加#号,后面追加注释内容;类似于python
  4. 同一列表之中的元素需要保持相同的缩进
  5. Play中的hosts、roles、tasks等对象的表示方法都是以 key:[一个空格]value 的形式来写
  6. 当要在对象下要使用列表项时,使用- name或- xxx表示;多个项使用相同的缩进级别作为同一个列表的一部分

对Yaml格式自动对齐

当使用vim编写.yml或.yaml文件时,支持格式自动对齐;并且当tap建按下时,相当于执行一个双空格缩进

vim ~/.vimrc
autocmd FileType yaml setlocal ai ts=2 sw=2 et

Playbook语法检测与执行

在执行YAML文件前需要先对YAML文件的语法进行检测

ansible-playbook --syntax-check  yaml文件     检查yaml文件的语法格式是否正确

执行YAML文件

ansible-playbook  yaml文件                                  执行yaml文件

yaml文件执行步骤

  1. 收集facts
  2. 执行tasks
  3. 报告结果

绿色表示执行成功,系统保持原样

黄色表示执行成功,系统发生变化

红色表示执行失败

Playbook任务实施

实施一个任务(在servers主机上通过yum文件安装php和mariadb)

vim xxx.yml---
- name: installhosts: serverstasks:- name: install php mariadbyum:name: php,mariadbstate: present

实施多个任务(将/etc/issue文件内容更改为Development,将/etc/issue1文件内容更改为Test)

方式一:一个tasks下配置多个name

vim xxx.yml---
- name: onehosts: alltasks:- name: copy developmentcopy:content: "Development"dest: /etc/issue2- name: copy Testcopy:content: "Test"dest: /etc/issue1

方式二:每个tasks下配置一个name,配置多个tasks

vim xxx.yml---
- name: onehosts: alltasks:- name: copy developmentcopy:content: "Development"dest: /etc/issue
- name: twohosts: alltasks:- name: copy Testcopy:content: "Test"dest: /etc/issue1

Playbook特权升级

Playbook中的特权升级和ansible.cfg的配置一样

配置关于student用户的playbook特权升级(需要在被管理主机上为student配置sudo权限)--就是通过student用户在被管理节点执行任务

- name: one

  hosts: all

  remote_user: student

  become: true

  become_method: sudo

  become_user: root

  tasks:

    - name: copy development

      copy:

        content: "Development"

        dest: /etc/issue


Playbook常用模块

软件包管理模块

yum:                  进行软件包安装

name:软件包名称

state:latest(更新软件包)/ present(安装软件包)/ absent(删除)

yum_repository:部署软件仓库

name:         仓库名称

description: 描述信息

baseurl:      软件仓库的地址

gpgcheck:   yes(开启gpg校验)/ no(不开启gpg校验)

gpgkey:      gpg密钥的地址

enabled:     yes(启用此软件仓库)/ no(不启用此软件仓库)

rpm_key:           当yum设置了gpg_check=yes时,需要在受管主机上安装GPG密钥,通过rpm_key进行配置

state:          present(将密钥推到被管理主机)/ absent(删除)

key:            gpg密钥地址

用户管理模块

user  创建删除用户,修改用户属性

name:         名称

uid:               设置Uid

group:          设置用户所属的组

groups:         设置附加组

shell:           设置工作环境

password:   创建用户的时候 直接赋予密码

home:           设置家目录位置

comment:     设置备注说明

role:            设置用户的身份

remove:        yes (删除用户的时候直接把家目录、邮件空间全部删掉)

state:             present(创建) | absent(删除)

group 创建删除用户组

name:         名称

state:          present(创建) | absent(删除)

gid:             组ID

存储模块管理

parted   进行磁盘分区

device:          要进行分区的硬盘

number:        分区编号

part_start:     开始大小

part_end:      结束大小

state:            present(创建)/ absent(删除)

lvg         配置pv卷和vg卷组

vg:                vg卷组的名称

pvs:               使用的pv卷

state:             present(创建)/ absent(删除)

pesize:        物理范围的大小

lvol        配置lv逻辑卷

vg:                vg卷组的名称

lv:                 lv逻辑卷的名称

size:              设置逻辑卷的大小

state:            present(创建)/ absent(删除)

filesystem     进行文件格式化

fstype:           格式化的文件类型

dev:               需要格式化的磁盘

mount   进行文件挂载

path:             挂载点

src:               要挂载的文件

fstype:           文件格式

state:            mounted(永久挂载)/ present(临时挂载) / unmounted(取消挂载)

文件操作相关模块

copy模块     主要用于将文件复制到某个地方,写入内容到文件中

src:               源文件

content:      需要写入的文件内容(将文件内容清空后写入 此时不需要src元素,只需要dest元素)

dest:             目的文件

owner:          文件所有者

group:          文件所属组

mode:           文件的权限

setype:        文件的安全上下文

file模块 创建目录、文件、链接文件等

path:             创建的文件/目录

state:          touch(文件)/ directory(目录)/ link(链接文件—不使用path元素,使用src和dest元素)

owner:          文件/目录所有者

group:          文件/目录所属组

mode:         文件/目录权限

setype:        文件/目录的安全上下文

lineinfile模块      主要是用于替换文件中的内容

path:             文件路径

regexp:         使用正则表达式来匹配要修改的内容

line:              替换后的内容

owner:          文件所有者

group:          文件所属组

mode:           文件的权限

setype:        文件的安全上下文

其他任务模块

cron              配置计划任务

name:           计划任务名称

minute:         分钟

hour:             时间

user:           执行用户

job:               执行的命令

firewalld       配置防火墙

zone:            配置的防火墙区域

service:       服务名称

port:           端口号

permanent:   yes(永久执行)

immediate:    yes(立即执行)

state:            enabled(放行)/ disabled(阻塞)

service   配置服务的运行、停止

name:           服务名称

state:            started / stopped / restarted

enabled:       开机自启动

debug模块  将指定的值输出到终端显示出来

var: 变量名                               将变量所对应的值显示到终端

msg:自定消息(任意)          将自定义消息显示到终端


传统配置与Playbook模块配置比较

Cron计划任务配置

传统配置
crontab -u greg -e30 17 * * * /bin/echo "hello"
systemctl restart crond通过cron模块配置cron:name: "greg cron"minute: "30"hour: "17"job: /bin/echo "hello"user: greg

创建lv逻辑卷并进行临时挂载

传统配置
pvcreate /dev/vdb
vgcreate -s 16m vgdata /dev/vdb
lvcreate -L 1G -n lvdata vgdata
mkfs.xfs /dev/vgdata/lvdata
mkdir -p /opt/lvdata
mount  /dev/vgdata/lvdata  /opt/lvdata通过lvg、lvol、filesystem、mount模块配置
lvg:vg: vgdatapvs: /dev/vdbpesize: 16mlvol:vg: vgdatalv: lvdatasize: 1gfilesystem:fstype: xfsdev: /dev/vgdata/lvdatamount:path: /opt/lvdatasrc:  /dev/vgdata/lvdatastate: presentfstype: xfs

Ansible的执行过程

  1. 加载自己的配置文件(默认为/etc/ansible/ansible.cfg)
  2. 查找资产清单(Inventory)对应的主机或主机组
  3. 加载对应的模块(yum、user、lvol等)
  4. 通过ansible将模块或临时命令 生成对应的临时py文件;并将该文件传输至被管理节点(目录为 被管理节点执行用户下的 $HOME/.ansible/tnp/ansible-tmp-数字/XXX.py文件)
  5. 给文件配置执行权限,执行并返回结果到管理节点
  6. 删除被管理节点上的临时py文件

Ansible故障排除

配置ansible日志

vim /etc/ansible/ansible.cfg

log_path = /var/log/ansible  指定ansible日志存放路径

使用debug模块显示任务执行结果

通过debug模块的msg或var字段,结合register输出任务执行结果

 

在执行playbook时获取详细的信息

ansible-playbook  yml文件  -v | -vv | -vvv | -vvvv

-v          显示任务结果

-vv       显示任务结果、任务配置(推荐)

-vvv       显示被管理主机连接信息

-vvvv     增加连接插件相关的额外详细程度选项(包含受管主机上用于执行脚本的用户和所执行的插件)

 

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gpt在线使用-免费的 GPT在哪下载

免费的 GPT(Generative Pre-trained Transformer) 。现在您可以免费体验我们的 GPT 技术,来让您的业务或项目更加智能。 GPT 是一种基于最前沿的自然语言处理技术,它展现出了令人惊叹的预测能力和交互性能。我们的 GPT 是在世界顶…

TryHackMe-M4tr1x: Exit Denied(boot2root)

M4tr1x: Exit Denied 大多数人只看到一个完美构建的系统。但你一直都是不同的。你不仅看到表面上的东西,还看到 它下面有什么统治;调节和调节的内部关联机制 几乎完美地管理其每个模块,以至于它试图隐藏所有模块 其多面设计中的微小孔。但是&#xff0c…

linux-01-基础回顾-虚拟机安装linux(centos7)、linux常用命令

文章目录 Linux-Day01课程内容1. 前言1.1 什么是Linux1.2 为什么要学Linux1.3 学完Linux能干什么 2. Linux简介2.1 主流操作系统2.2 Linux发展历史2.3 Linux系统版本 3. Linux安装3.1 安装方式介绍3.2 安装VMware3.3 安装Linux3.4 网卡设置3.5 安装SSH连接工具3.5.1 SSH连接工具…

Linux安装mysql(5.7解压版)

Linux服务器安装软件时,建议安装解压版,将文件安装在自己指定的目录。安装版一般会将软件安装在Linux默认的目录,如/usr/local/,配置文件在/etc/,日志在/logs,安装目录比较分散,特别是不熟悉该软…

Linux网络——PXE高效批量网络装机

Linux网络——PXE高效批量网络装机 一、PXE远程安装服务1.PXE批量部署的优点2.搭建PXE网络体系的安装条件 二、PXE 安装进行前的配置1.PXE装机所需的文件2.搭建 PXE 过程中使用的服务和程序①.DHCP服务②.vsftpd服务③.TFTP服务④.syslinux 三、搭建 PXE 远程安装服务器1.安装相…

IPEmotion 2023 R1支持在线能量分析

新发布的IPEmotion 2023 R1提供了许多新功能,其中最重要的是新的“在线功率计算(Online Power Calculation)”功能。该功能允许使用预定义的功率计算来进行测量任务和数据分析。此外,IPEmotion 2023 R1现在支持一种新的存储模式&a…

Vmware安装Ubuntu出现 unable to find a medium containing a live file system

一、前言 由于未知的原因,使用Vmware安装Ubuntu的时候,总是遇到奇怪的问题。(忘记截图了…) 大致是: unable to find a medium containing a live file system找了几个帖子,参考1、参考2,但都…

现场工程师救火-UEFI(BIOS)节能设置导致金牌服务器只跑出龟速

近期协助出现场,解决了一个非常典型的UEFI 启动参数配置不当导致的服务器降效案例。错误的节能参数配置,导致价值几十万的服务器变成龟速服务器,并造成严重的生产事故。 1. 现象 朋友公司近期准备升级2010年就部署的服务器组,新…

【LeetCode】188. 买卖股票的最佳时机 IV

188. 买卖股票的最佳时机 IV(困难) 思路 状态定义 一、首先确定要一天会有几种状态,不难想到有四种: a.当天买入了股票;b.当天卖出了股票;c.当天没有操作,但是之前是买入股票的状态&#xff…

【数据库】数据库的基础知识

目录 前言 1、 查看数据库 1.1、查看所有数据库(show databases;) 1.2、创建数据库之后,查看创建的数据库的基本信息。 2、 创建数据库 2.1、直接创建数据库(create database [数据库名];) 2.2、创建数据库的时…

Pytest接口自动化测试实战演练

结合单元测试框架pytest数据驱动模型allure 目录 api: 存储测试接口conftest.py :设置前置操作目前前置操作:1、获取token并传入headers,2、获取命令行参数给到环境变量,指定运行环境commmon:存储封装的公共方法connect_mysql.p…

解决方案:Zotero实现参考文献中英文混排,将英文文献中的“等”转成“et al.”

Zotero 是一款非常实用且易于使用的参考文献管理工具,可帮助用户收集、整理和引用各种类型的文献,包括图书、期刊文章、网页等。在学术写作中起着重要作用。 但是其在中文世界中,运行起来偶尔会出现问题,这里记录一个问题及其解决…

隋唐洛阳“西宫”:上阳宫的GIS视角

隋唐洛阳城简介 营建 隋大业元年(605年),在隋炀帝的授意下,隋代著名城市设计师宇文恺,在汉魏故城以西重新选址,历时8个月,日役劳工200万,兴建新都洛阳城。 城和苑 隋唐洛阳城采用…

eBPF技术介绍

前言 eBPF起源于linux内核,它可以以砂箱程序运行在操作系统内核的特权上下文,高效,安全,易于扩展而不需要修改内核源码或者加载内核模块。 操作系统一直是实现观测,安全和网络功能的最理想的地方,因为内核的…

优思学院|精益管理的理念是什么?

作为一个企业,我们都希望拥有高效率和优异的竞争力。但是,如何才能在竞争激烈的市场中脱颖而出?这时,精益管理理念的出现可以帮助我们。 精益管理的基本概念是什么? 精益管理的核心理念是通过消除浪费来实现生产效率…

Java线程间通信方式(3)

前文了解了线程通信方式中的CountDownLatch, Condition,ReentrantLock以及CyclicBarrier,接下来我们继续了解其他的线程间通信方式。 Phaser Phaser是JDK1.7中引入的一种功能上和CycliBarrier和CountDownLatch相似的同步工具,相…

辛弃疾最经典的10首词

他,文能挥笔填词,武能上马杀敌; 他,被称为“词中之龙”, 他,一生赤子,追求收复山河; 他,是与苏轼齐名的豪放派词人; 他是辛弃疾。 辛弃疾一生怀着赤子之…

IO多路复用——select函数

1.select函数原型和fd_set结构体说明 1.1 select函数原型 ​ 使用 select 这种 IO 多路转接方式需要调用一个同名函数 select,这个函数是跨平台的,Linux、Mac、Windows 都是支持的。程序员通过调用这个函数可以委托内核帮助我们检测若干个文件描述符的…

【MCS-51】51单片机结构原理

至今为止,MCS-51系列单片机有许多种型号的产品:其中又分为普通型51(8031、8051、89S51)和增强型52(8032、8052、89S52等)。它们最大的区别在于存储器配置各有差异。下面我举例子的都是8051这一系列的单片机…

STM32-HAL-定时器(无源蜂鸣器的驱动)

文章目录 一、蜂鸣器的介绍二、常用的无源蜂鸣器的电路三、测试准备四、初始化片上外设4.1 初始化定时器4的通道2为PWM输出模式4.2 编写驱动代码4.3 Logic分析仪查看波形4.4 代码分析 一、蜂鸣器的介绍 有源蜂鸣器: 有源蜂鸣器内部有一个发声电路,也就是“源”&…