深度解析 Ansible:核心组件、配置、Playbook 全流程与 YAML 奥秘(上)

news2025/2/24 9:18:20

文章目录

  • 一、ansible的主要组成部分
  • 二、安装
  • 三、相关文件
  • 四、ansible配置文件
  • 五、ansible 系列

一、ansible的主要组成部分

在这里插入图片描述

  1. ansible playbook:任务剧本(任务集),编排定义ansible任务集的配置文件,由ansible顺序依次执行,通常是json格式的yml文件。
    inventory:ansible管理主机的清单/etc/ansible/hosts
    modules:ansible执行命令的功能模块,多数为内置核心模块,也可自定义
    plugins:模块功能的补充,如连接类型的插件、循环插件,变量插件,过滤插件,改功能不常用
    api:供第三方程序调用的应用程序编程接口
    ansible:组合inventory,api,modules,plugins的绿框,可以理解为ansible命令工具,其为核心执行工具
  2. ansible命令执行来源
    user:普通用户,即system administrator
    cmdb(配置管理数据库)api调用
    public/private cloud api调用
    user --> ansible playbook --> ansible
  3. 利用ansible实现管路的方式:
    Ad-Hoc 即ansible命令。主要用于临时命令使用场景
    ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有提前的规划
  4. ansible-playbook执行过程
    将已经编排好的任务集写入ansible-playbook
    通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行
  5. ansible的主要操作对象
    HOSTS主机
    NETWORKING网络设备
  6. 注意事项
    执行ansible的主机一般称为主控端,中控,master或者堡垒机
    主控端python版本需要在2.6或者以上
    被控端python版本小鱼2.4需要安装python-simplejson
    被控端如开启SELinux需要安装libselinux-python
    Windows不能作为主控端

二、安装

rpm包安装:EPEL源
yum -y install ansible
编译安装:
yum -y install python-jinjia2 PyYAML python-paramiko python-babel python-crypto
tar -xf ansible-1.5.2.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible/
Git方式
 git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
pip安装:pip是安装python包的管理器,类似于yum
yum -y install python-pip python-devel
yum -y install gcc glib-devel zlibl-devel rpm-build openssl-devel
pip install --upgrade pip
pip install ansible --upgrade
确认安装:ansible --version

三、相关文件

在这里插入代码片


配置文件
/etc/ansible/ansible.cfg 主配置文件,哦诶之ansible工作特性
/etc/ansible/hosts 主机清单
/etc/ansible/roles/ 存放角色的目录
程序
/usr/bin/ansible 主程序,临时命令执行工具
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy 下载/上传优秀代码或者Roles模块的官网平台
/usr/bin/ansible-play-book 定制自动化任务,编排剧本工具 
/usr/bin/ansible-pull 远程执行的命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于Console界面与用户交互的执行工具
主机清单inventory
inventory主机清单:ansible的主要功用在于批量主机操作,为了方便的使用其中的部分主机,可以在inventory file中将其分组命名
默认的inventory file为/etc/ansible/hosts
inventory file可以有多个,且也可以通过Dynamic Inventory来动态完成
/etc/ansible/hosts文件格式
inventory文件遵循INI文件风格,中括号的字符为组名。可以将同一个主机同事归并到不通的组中;此外,当如若目标主机使用了非默认的ssh端口,还可以在主机名称之后使用冒号加端口号来标明

eg:
ntp.magedu.com
[webservers]
www1.magedu.com:2222
www2.magedu.com
[dbservers]
db1.magedu.com
db2.magedu.com

如果主机名称遵相似的命名模式,还可以使用列表的方式标识个主机
eg:
[wedservers]
www[01:100].example.com
[dbservers]
db-[a:f].example.com

四、ansible配置文件

ansible 配置文件/etc/ansible/ansible.cfg(一般保持默认)
[defaults]
#inventory      = /etc/ansible/hosts  #主机列表配置文件
#library        = /usr/share/my_modules/ #库文件存放目录
#module_utils   = /usr/share/my_module_utils/ 
#remote_tmp     = ~/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp      = ~/.ansible/tmp #本机临时命令执行目录
#forks          = 5 #默认并发数(同时执行5个操作,eg五台主机五台的执行)
#poll_interval  = 15 
#sudo_user      = root #默认sudo用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass      = True
#transport      = smart
#remote_port    = 22
#module_lang    = C
#module_set_locale = False
#host_key_checking = False #检查对应服务的的host_key,建议取消注释
#log_path = /var/log/ansible.log #日志文件

在这里插入图片描述

五、ansible 系列

ansible ansible-doc ansible-playbook ansible-vault ansible-console ansible-galaxy ansible-pull

  1. ansible-doc 显示模块帮助
    ansible-doc [options][module]
    -a 显示所有模块文档
    -l,–list 列出可用模块
    -s,–snippet 显示指定模块的playbook片段
    实例:
    ansible-doc -l 列出所有模块
    ansible-doc ping 查看指定模块的帮助用法
    ansible-doc -s ping 查看指定模块的帮助用法
    ansible通过ssh实现配置管理、应用部署,任务执行等功能,建议配置ansible段能基于密钥认证的方式联系各被管理节点
  2. ansible[-m module_name] [-a args]
    –version 显示版本
    -m module 指定模块,默认为command
    -v 详细过程 -vv -vvv 更详细
    –list-host 显示主机列表,可简写–list
    -k ,–ask-pass 提示输入ssh连接密码。默认key验证
    -K, --ask-become-pass 提示输入sudo时的口令
    -C,–check 检查不执行
    -T --timeout=TIMEOUT 执行命令的超时时间,默认10s
    -u --user=REMOTE——USER 执行远程执行的用户
    -b, --become 代替旧版本的sudo切换
  3. ansible的Host-pattern 匹配主机的列表
    all:表示所有Inventory中的所有主机
*:通配符
ansible “*” -m ping
ansible 192.168.1.* -m ping
ansible “*srvs” -m ping
或关系
ansible “webserver:dbserver” -m ping
ansible "webserver:dbserver" -m ping #执行在web组并且在dbserver组中的主机(忽略重复的)
与关系
ansible "webserver:&dbserver" -m ping
只执行在web组并且也在dbserver组中的主机
逻辑非
ansible 'webserver:!dbserver' -m ping  【注意此处只能使用单引号!】
综合逻辑
ansible 'webserver:dbserver:&webserver:!dbserver' -m ping
正则表达式
ansible "webserver:&dbserver" -m ping
ansible "~(web|db).*\.magedu.\com" -m ping
  1. ansible命令执行过程
    a 加载自己的配置文件 默认/etc/ansible/ansible.cfg
    b 加载自己对应的模块 如command
    c 通过ansible将模块或命令生成对应的临时py文件,并将改文件传输至远程服务器的对应执行用户SHOME/.ansible/tmp/ansible-tmp-数字/XXX.py文件
    d 文件见+x执行
    e 执行并返回结果
    f 删除临时py文件,sleep 0退出
  2. 执行状态
    绿色:执行成功并且不需要做改变的操作
    黄色:执行成功并且对目标主机做变更
    红色:执行失败
  3. ansible常见模块
ping:
command:在远程主机执行命令,默认模块。可忽略-m选项
ansible srvs -m command -a ‘systemctl restart sshd’
ansible srvs -m command -a 'echo magedu | passwd --stdin wang '不成功
此命令不支持$VRNAME< >  | ; & 等,需要用shell模块实现
shell:和command相似,用shell执行命令
ansible srv -m shell -a ‘echo magedu | passwd --stdin wang’
调用bash执行命令 类似cat /tmp/stanley.md | awk -F '|' '{print $1,$2}' & >
/tmp/example.txt 这些复杂命令,及时使用shell也可能会失败,解决办法:写到脚本时, copy到远程,执行,再把需要的结果拉回执行命令的机器
script:运行脚本
-a “/PATH/TO/SCRIPT_FILE”
ansible webserver -m script -a f1.sh
copy:从服务器复制文件到客户端
ansible all -m copy -a 'src=/data/test1 dest=/data/test1 backup=yes mode=000 owner=zhang'  ##如目标存在,默认覆盖,此处是指先备份,并修改全向属主
ansible all -m shell -a 'ls -l /data/'
ansible all -m copy -a "content='test content\n' dest=/tmo/f1.txt" 利用内容,直接生成目标文件
fetch:从客户端取文件至服务器端,与copy相反,目录可以先tar
ansible all -m fetch -a ‘src=/root/a.sh dest=/data/f2.sh'

在这里插入图片描述

file:设置文件属性(状态,属组,属主,权限)
ansible all -m file -a “path=/root/a.sh owner=zhang mode=755”
ansible all -m file -a 'src=/data/test1 dest=/tmp/test state=link'
ansible all -m file -a ’name=/data/f3 state=touch‘  #创建文件
ansible all -m file -a ’name=/data/f3 state=absent‘ #删除文件
ansible all -m file -a ’name=/data state=directory‘ #创建目录
ansible all -m file -a ’src=/etc/fstab dest=/data/fstab.link state=link‘
archive打包模块 :用于将文件打包成归档文件,参数“files”中指定要打包的文件列表,“dest”中指定要将文件打包成的目标路径和文件名。
unarchive 解打包模块:用于解压归档文件,参数“src”中指定要解压的归档文件路径,“dest”中指定要将文件解压到的目标路径。
hostname 管理主机名
ansible 192.168.10.24 -m hostname -a “name=kso-bj6-zw-zhangwei”#永久生效(但hosts文件需要手动更改)
cron 计划任务
支持时间:minute,hour,day,month,weekday
ansible all -m cron -a "minute=*/5 weekday=1,3,5 job='/usr/sbin/ntpfata 172.16.0.1 & >/dev/null' name=Synctime" 创建任务
ansible all -m cron -a "disabled=true job='/usr/sbin/ntpfata 172.16.0.1 & >/dev/null' name=Synctime" 禁用任务(加#号注释)
ansible all -m cron -a "disabled=no  job='/usr/sbin/ntpfata 172.16.0.1 & >/dev/null' name=Synctime" 启用任务
ansible all -m  cron -a 'state=absent name=Synctime' 删除任务
yum:管理包
    ansible websrvs -m yum -a 'list=httpd'  查看程序列表
             ansible websrvs -m yum -a 'name=httpd state=present' 安装
             ansible websrvs -m yum -a 'name=httpd state=absent'  删除
    可以同时安装多个程序包
service:管理服务
ansible all -m service -a 'name=httpd state=stopped'
ansible all -m service -a 'name=httpd state=started enabled=yes'
ansible all -m service -a 'name=httpd state=reload'
ansible all -m service -a 'name=httpd state=restart'
user:管理用户
ansible all -m user -a 'name=user1 comment="test user" uid=2048 home=/data/home/user1 group=root'  创建用户,以及uid,家目录,并描述(comment)
ansible all -m user -a 'name=zhangwei shell=/sbin/nologin  system=yes home=/data/home/zhangwei'    创建不可登陆的系统用户
ansible all -m user -a 'name=zhangwei state=absent remove=yes'删除用户及家目录
group:管理组
ansible all -m group -a "name=testgroup system=yes"
ansible all -m group -a "name=testgroup state=absent"
ansible-doc -s moudul #简短介绍模块使用方法
ansible-doc modul  #详细介绍模块使用方法
setup:主机信息
可收集远程主机的facts变量的信息,相当于收集了目标主机的相关信息(如内核版本、操作系统信息、cpu、…),保存在ansible的内置变量中,之后我们有需要用到时,直接调用变量即可.这在ansible-playbook 中很有用。 
可以使用gather_facts: no 来禁止收集信息



[root@ayunw ansible-example]# ansible dbsrvs -m setup



# 使用setup获取ip地址以及主机名使用filter过滤

ansible dbsrvs -m setup -a 'filter=ansible_default_ipv4'

# 获取内存信息

ansible dbsrvs -m setup -a 'filter=ansible_memory_mb'



# 获取主机名

ansible dbsrvs -m setup -a 'filter=ansible_nodename'



# 仅显示与ansible相关的内存信息

ansible dbsrvs -m setup -a 'filter=ansible_*_mb'
  1. ansible系列命令
ansible-galaxy    链接:https://galaxy.ansible.com下载对应的role
列出所有已安装的galaxy
ansible-galaxy list
安装galaxy
ansible-galaxy install geerlingguy.redis
删除galaxy
ansible-galaxy remove geerlingguy.redis
ansible-pull
推送命令至远程,效率无限提升,对运维要求较高
ansible-playbook
ansible-playbook hello.yml    【书写注意空格,行首注意对齐】
cat hello.yml 
---
# hello test yml file
- hosts: all
  remote_user: root    #远程用户
  tasks:
        - name: look hostname
          command: hostname
ansible-vault 管理加密解密yml文件
ansible-vault [create | decrypt | edit | encrypt | rekey | view]
ansible-vaullt encrypt hello.yml 加密
ansible-vault decrypt hello.yml 解密
ansible-vault view hello.yml 查看
ansible-vault edit hello.yml 编辑加密文件
ansible-vault rekey hello.yml 修改口令
ansible-vault create new.yml 创建新文件
ansible-console:2.0+新增,可交互执行命令,支持tab
root@test(2)[f:10] $
执行用户@当前操作的主机组(当前组的主机数量)[f:并发数]$
设置并发数:fock n 例如:fock 10
切换组:cd 主机组 例如:cd webserver 
列出当前组的主机列表:list
列出所有内置命令:?或help
示例:
root@all (2)[f:5]$ list
root@all (2)[f:5]$ cd webserver
root@dbserver (2)[f:5]$ list
root@dbserver (2)[f:5]$ yum name=httpd state=present
root@dbserver (2)[f:5]$ service name=httpd state=restart

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

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

相关文章

【银河麒麟操作系统真实案例分享】内存黑洞导致服务器卡死分析全过程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 现象描述 机房显示器连接服务器后黑屏&#xff…

# issue 8 TCP内部原理和UDP编程

TCP 通信三大步骤&#xff1a; 1 三次握手建立连接; 2 开始通信&#xff0c;进行数据交换; 3 四次挥手断开连接&#xff1b; 一、TCP内部原理--三次握手 【第一次握手】套接字A∶"你好&#xff0c;套接字B。我这儿有数据要传给你&#xff0c;建立连接吧。" 【第二次…

Dubbo应用篇

文章目录 一、Dubbo简介二、SSM项目整合Dubbo1.生产者方配置2.消费者方配置 三、Spring Boot 项目整合Dubbo1.生产者方配置2.消费者方配置 四、应用案例五、Dubbo配置的优先级别1. 方法级配置&#xff08;Highest Priority&#xff09;2. 接口级配置3. 消费者/提供者级配置4. 全…

Vulnhub---kioptirx5 超详细wp

个人博客 WuTongSec 欢迎大佬指点 打点 nmap 192.168.128.0/24 -sP 找ip nmap 192.168.128.137 --min-rate 10000 -p- 简单全端口扫描 nmap 192.168.128.137 -sC -sV -O -sT 详细 脚本 版本 系统 扫描 dirsearch -u http://192.168.128.137 目录扫描 PORT S…

JAVA八股文-运行篇-创建项目运行(1)

前置环境搭建:jdk、maven、idea、linux环境 一、创建一个java项目 File->New->Project 二、填写基本信息 三、完成&#xff0c;写了一段代码 四、打包 五、本地运行&#xff0c;运行和debug二选一 六、上传至linux环境 七、linux环境下命令执行 7.1 指定Main方法类 …

【C++】异常之道,行者无疆:解锁 C++ 的异常捕获哲学

文章目录 C语言处理错误C异常异常的抛出与捕获基本语法catch 的匹配原则函数调用链中的匹配原则异常的重新抛出 异常安全异常规范C标准库异常 C语言处理错误 终止程序&#xff1a;利用 assert() 断言去终止程序&#xff0c;当 ()的表达结果为 false 时会终止程序。返回错误码&…

[SWPUCTF 2022 新生赛]Ez_upload 详细题解

知识点: 文件上传 MIME绕过 script版本一句话木马 .htaccess配置文件 蚁剑虚拟终端的使用 打开题目可以文件上传 传入php文件, 提示 后缀不能是ph 所以也不能输入 phtml php3 pht等可以解析为php文件的后缀 bp抓包把传入的php木马文件后缀手动修改为jpg图片格式 提示 你上…

V20变频器设置电机电流超过设定的值,变频器报警停止运转

之前使用的台达变频器是有相关参数的设置的&#xff0c;比如设置额定电流的限制比例未1.5A时&#xff0c;超过1.5A时&#xff0c;变频器会输出报警信号&#xff0c;并停机报警。换到V20变频时&#xff0c;翻遍了说明书&#xff0c;并各种参数测试组合&#xff0c;未找到明确的相…

网络安全-态势感知

0x00 定义&#xff1a; 态势感知&#xff08;Situation Awareness&#xff0c;SA&#xff09;能够检测出超过20大类的云上安全风险&#xff0c;包括DDoS攻击、暴力破解、Web攻击、后门木马、僵尸主机、异常行为、漏洞攻击、命令与控制等。利用大数据分析技术&#xff0c;态势感…

未完成_RFdiffusion应用案例_从头设计pMHC的结合剂

目录 1. 论文导读1&#xff09;摘要2&#xff09;设计流程3&#xff09;设计流程的验证 2. 实战 1. 论文导读 Liu, Bingxu, et al. “Design of high specificity binders for peptide-MHC-I complexes.” bioRxiv (2024): 2024-11. 1&#xff09;摘要 MHC-I 将胞内抗原肽递呈…

Vant UI Axure移动端元件库:提升移动端原型设计效率

UI框架的选择对于提升开发效率和用户体验至关重要。Vant UI&#xff0c;作为一款基于Vue.js的轻量、可靠的移动端组件库&#xff0c;自2017年开源以来&#xff0c;凭借其丰富的组件库、良好的性能以及广泛的兼容性&#xff0c;在移动端开发领域崭露头角&#xff0c;赢得了众多开…

stm32中的常用函数

目录 一、定义声明类 1.1 预定义 1.2 条件编译 1.3 extern 声明 1.3 typedef 类型别名 1.4 结构体 二、基础函数 2.1 delay类函数 2.2 printf函数 三、GPIO 3.1 硬件 3.2 通用外设驱动模型 3.3 例程 四、中断 4.1. 什么是中断 4.2. NVIC 4.3. EXTI 4.4. EXTI和…

静态路由与交换机配置实验

1.建立网络拓扑 添加2台计算机&#xff0c;标签名为PC0、PC1&#xff1b;添加2台二层交换机2960&#xff0c;标签名为S0、S1&#xff1b;添加2台路由器2811&#xff0c;标签名为R0、R1&#xff1b;交换机划分的VLAN及端口根据如下拓扑图&#xff0c;使用直通线、DCE串口线连接…

【Appium】AttributeError: ‘NoneType‘ object has no attribute ‘to_capabilities‘

目录 1、报错内容 2、解决方案 &#xff08;1&#xff09;检查 &#xff08;2&#xff09;报错原因 &#xff08;3&#xff09;解决步骤 3、解决结果 1、报错内容 在PyCharm编写好脚本后&#xff0c;模拟器和appium也是连接成功的&#xff0c;但是运行脚本时报错&…

【汇编语言】标志寄存器(三) —— 条件跳转,精准决策:汇编语言的比较与转移

文章目录 前言1. 检测比较结果的条件转移指令1.1 什么是条件转移指令&#xff1f;1.2 两类条件转移指令 2. 根据无符号比较的条件转移指令2.1 如何记忆&#xff1f;2.2 如何实现比较转移的功能&#xff1f;2.3 举例说明2.3.1 例12.3.2 例2 3. 总结4. 例题巩固4.1 问题一4.1.1 问…

【Unity高级】如何获取着色器(Shader)的关键词

在动态设置Shader时&#xff0c;会需要通过EnableKeyword, DisableKeyword来完成。但一个Shader有哪些关键词呢&#xff1f;Unity的文档中并没有列出来&#xff0c;但我们可以通过遍历Shader的KeywordSpace来查看。 1. 代码如下 using UnityEngine;public class KeywordExamp…

针对边缘计算优化LoRa的TinyML信道跳变管道

论文标题&#xff1a;Optimizing LoRa for Edge Computing with TinyML Pipeline for Channel Hopping&#xff08;针对边缘计算优化LoRa的TinyML信道跳变管道&#xff09; 作者信息&#xff1a;Marla Grunewald, Mounir Bensalem 和 Admela Jukan&#xff0c;来自德国布伦瑞克…

使用AI工具Screenshot to Code将UI设计图翻译成代码

一、获取openAI apikey。 一般有两种方式&#xff0c;一种是到openAI官网注册账号&#xff0c;付费申请GPT4的apikey。另一种是某宝买代理。我这里采用第二种。 二、安装Screenshot to Code 1.到github下载源码。 2.启动&#xff0c;两种方式&#xff1a;源码启动和docker启动…

python学opencv|读取图像(三)放大和缩小图像

【1】引言 前序已经学习了常规的图像读取操作和图像保存技巧&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像-CSDN博客 python学opencv|读取图像&#xff08;二&#xff09;保存彩色图像-CSDN博客 今天我们更近一步&#xff0c;学习放大和缩小图像的技巧&…