Linux Ansible创建任务并执行

news2024/11/25 11:03:47

目录

通过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: install
  hosts: servers
  tasks:
    - name: install php mariadb
      yum:
        name: php,mariadb
        state: present

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

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

vim xxx.yml

---
- name: one
  hosts: all
  tasks:
    - name: copy development
      copy:
        content: "Development"
        dest: /etc/issue2
    - name: copy Test
      copy:
        content: "Test"
        dest: /etc/issue1

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

vim xxx.yml

---
- name: one
  hosts: all
  tasks:
    - name: copy development
      copy:
        content: "Development"
        dest: /etc/issue
- name: two
  hosts: all
  tasks:
    - name: copy Test
      copy:
        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 -e
 30 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: vgdata
    pvs: /dev/vdb
    pesize: 16m

lvol:
    vg: vgdata
    lv: lvdata
    size: 1g

filesystem:
    fstype: xfs
    dev: /dev/vgdata/lvdata

mount:
    path: /opt/lvdata
    src:  /dev/vgdata/lvdata
    state: present
    fstype: 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.coloradmin.cn/o/461217.html

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

相关文章

GPT-3 论文阅读笔记

GPT-3模型出自论文《Language Models are Few-Shot Learners》是OpenAI在2020年5月发布的。 论文摘要翻译:最近的工作表明,通过对大量文本进行预训练,然后对特定任务进行微调(fine-tuning),在许多NLP任务和基准测试上…

TYPE-C口是怎么样的接口?它有什么功能强大的地方?

C口指的是USBType-C接口。USBType-C,又称USB-C,是一种通用串行总线(USB)的硬件接口形式,外观上最大特点在于其上下端完全一致与Micro-USB相比不再区分USB正反面。 认识了Type-C的外观之后,我们来一起看一下它是怎么产生的。早在20…

QT with OpenGL(IBL-镜面反射)

文章目录 预滤波generate Mipmap获取每一层级的预滤波图prefilterMap Shader重要性采样效果展示 预过滤卷积的亮点解决方法代码解析首先得确保我们被采样的环境贴图有mipmap贴图通过计算决定使用那一层mipmap值 效果 预计算BRFD生成LUT图 IBL Shading渲染结果与教材的不同最终结…

(C语言版)力扣(LeetCode)189. 轮转数组官方3种解法分析

轮转数组 题目第一种解法:额外数组第二种解法:环状替换第三种解法:翻转数组结语 题目 题目链接:轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: num…

实战项目:手把手带你实现一个高并发内存池

项目介绍 1.这个项目做的是什么? 当前项目是实现一个高并发的内存池,他的原型是google的一个开源项目tcmalloc,tcmalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替…

Java——字符串的排列

题目链接 牛客网在线oj题——字符串的排列 题目描述 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。 例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。 数…

【SpringMVC】| SpringMVC 入门

目录 一:SpringMVC 入门 1. SpringMVC简介 2. SpringMVC的优点 3. SpringMVC的优化 4. SpringMVC执行的流程 5. 基于注解的SpringMVC程序 图书推荐 一:《Spring Boot进阶:原理、实战与面试题分析》 二:《深入理解Java虚拟…

19.网络爬虫—照片管道

网络爬虫—照片管道 Scrapy基础Scrapy运行流程原理Scrapy的工作流程 scrapy照片管道实战演示设置图片路径配置爬虫解析数据运行爬虫查看文件 后记 前言: 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️:Python领域…

C++ Primer笔记——排列算法(next_permutation、prev_permutation、is_permutation)

目录 概述 ①next_permutation ②prev_permutation ③is_permutation 概述 页数&#xff1a;P778 &#xff08;A.2.7 排列算法&#xff09; 头文件&#xff1a;<algorithm> 函数名&#xff1a;next_permutation & prev_permutation & is_permutation C为…

信息安全复习七:报文鉴别与哈希函数

一、章节梗概 1.安全服务与安全需求 2.报文鉴别的安全需求 3.对报文加密来实现报文鉴别 4.报文鉴别码 5.哈希函数 6.生日攻击 二、安全服务与安全需求 2.1 引入 通信保密可以概况所有的安全需求吗? 不能&#xff0c;信息安全需求有很多种&#xff0c;通信保密只是一种安全…

2023移动云大会 | “六大”服务承诺 全力做优“心级服务”

4月25日&#xff0c;以“云擎未来 智信天下”为主题的2023移动云大会在苏州金鸡湖国际会议中心举办&#xff0c;众多政府领导、院士专家、知名企业客户与合作伙伴高层等数千名嘉宾齐聚一堂。 大会期间&#xff0c;移动云深入践行“为国建云”的使命&#xff0c;推出“六大”服…

vdo磁盘管理

在 storagesrv 上新加一块 10G 磁盘;  创建 vdo 磁盘,并开启 vdo 磁盘的重删和压缩;  名字为 vdodisk,大小为 150G,文件系统为 ext4;  并设置开机自动挂载。挂载到/vdodata。 1.lsblk 查看自己添加的硬盘名称 2.安装vdo软件包 yum -y install vdo…

卡尔曼滤波原理及代码

目录 一.简介 二.原理 1.先验估计原理 2.后验估计原理 3.总结 三.示例 一.简介 卡尔曼滤波&#xff08;Kalman filtering&#xff09;是一种利用线性系统状态方程&#xff0c;通过系统输入输出观测数据&#xff0c;对系统状态进行最优估计的算法&#xff0c;它可以在任意…

Vue-全局过滤器以及进阶操作

前言 上篇文件讲述了&#xff0c;Vue全局过滤器的基本使用&#xff1a;Vue过滤器的基本使用 本篇将延续上文&#xff0c;讲述vue中过滤器的进阶操作 过滤器传参 如果有一天&#xff0c;多个地方使用过滤器&#xff0c;而且需要传递参数&#xff0c;那么可以这么写 多个过滤…

《Netty》从零开始学netty源码(四十三)之PoolChunk.allocate

allocate PoolChunk分配内存空间时可调用allocate方法来分配&#xff0c;具体的源码过程如下&#xff1a; 从代码中可以看出会根据分配的内存大小决定分配的是subpage还是normal的page&#xff0c;接下来具体分析以下方法&#xff1a; allocateSubpageallocateRuninitBuf …

Unity|| 如何把生存类游戏设计得更优秀

你是否曾经玩过这样的生存类游戏&#xff1a; 1、通过最初阶段后&#xff0c;你觉得游戏变得越来越简单 2、游戏的重点从生存转移到了基地建设或其他方面 诸如此类&#xff0c;很大程度上是由于糟糕的难度曲线所致。包括很多&#xff08;非常受欢迎的&#xff09;生存游戏都…

Redis——缓存更新策略

业务场景&#xff1a; 低一致性需求&#xff1a;使用内存淘汰机制。例如店铺类型的查询缓存&#xff0c;很少修改 高一致性需求&#xff1a;主动更新&#xff0c;并以超时剔除作为兜底方案。例如店铺详情查询的缓存&#xff0c;经常修改 主动更新策略 实际开发中最常用的还是…

51单片机(三)独立按键控制LED

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

【SpringMVC源码三千问】DispatcherServlet源码解析

DispatcherServlet#doDispatch() 是 SpringMVC 处理请求分发的方法&#xff0c;只要是 spring mvc 处理的 http 请求&#xff0c;都会经过 DispatcherServlet 的请求分发处理&#xff0c;从而调用相应的 handler method。 DispatcherServlet#doDispatch() 源码分析&#xff1a…

PCL点云库(3) — common模块

目录 3.1 common模块中的头文件 3.2 common模块中的基本函数 &#xff08;1&#xff09;angle角度转换 &#xff08;2&#xff09;distance距离计算 &#xff08;3&#xff09;random随机数生成 &#xff08;4&#xff09;sping扩展模块 &#xff08;5&#xff09;time获…