ansible 模块进阶及变量

yum 模块进阶

复制代码
- name: install pkgs
复制代码
  hosts: webservers
复制代码
  tasks:
复制代码
    - name: install web pkgs  # 此任务通过yum安装三个包
复制代码
      yum:
复制代码
        name: httpd,php,php-mysqlnd
复制代码
        state: present
复制代码
# 根据功能等,可以将一系列软件放到一个组中,安装软件包组,将会把很多软件一起安装上。比如gcc、java等都是开发工具,安装开发工具包组,将会把它们一起安装。
复制代码
[root@node1 ~]# yum grouplist   # 列出所有的软件包组
复制代码
[root@node1 ~]# yum groupinstall "Development Tools"
复制代码
# 如果列出的组名为中文,可以这样进行:
复制代码
[root@node1 ~]# LANG=C yum grouplist

ansible变量

  • 常用的facts变量

    • ansible_all_ipv4_addresses:所有的IPV4地址
    • ansible_bios_version:BIOS版本信息
    • ansible_memtotal_mb:总内存大小
    • ansible_hostname:主机名
  • facts变量是一个大的由{}构成的键值对字典。在{}中,有很多层级的嵌套。可以通过参数过滤出第一个层级的内容。

root@pubserver ansible# ansible web1 -m setup |less

自定义变量

  • 引入变量,可以方便Playbook重用。比如装包的playbook,包名使用变量。多次执行playbook,只要改变变量名即可,不用编写新的playbook。

  • ansible支持10种以上的变量定义方式。常用的变量来源如下:

    • inventory变量。变量来自于主机清单文件
    • facts变量。
    • playbook变量。变量在playbook中定义。
    • 变量文件。专门创建用于保存变量的文件。推荐变量写入单独的文件。
    • 变量文本 > playbook变量 > inventory变量
firewalld模块
    • port:声明端口
    • permanent:永久生效,但不会立即生效
    • immediate:立即生效,临时生效
    • state:enabled,放行;disabled拒绝
  • 防火墙一般默认拒绝,明确写入允许的服务。
template模块
  • copy模块可以上传文件,但是文件内容固定

  • template模块可以上传具有特定格式的文件(如文件中包含变量)

  • 当远程主机接收到文件之后,文件中的变量将会变成具体的值

  • template模块上传的文件,使用的语法叫Jinja2。

  • src:要上传的文件

  • dest:目标文件路径

进阶语法

触发执行任务

  • 通过handlers定义触发执行的任务
  • handlers中定义的任务,不是一定会执行的
  • 在tasks中定义的任务,通过notify关键通知handlers中的哪个任务要执行
  • 只有tasks中的任务状态是changed才会进行通知。

when条件

  • 只有满足某一条件时,才执行任务

  • 常用的操作符:

    • ==:相等
    • !=:不等
    • >:大于
    • <:小于
    • <=:小于等于
    • >=:大于等于
  • 多个条件或以使用and或or进行连接

  • when表达式中的变量,可以不使用{``{}}

复制代码
# 当dbs组中的主机内存大于2G的时候,才安装mysql-server
复制代码
[root@pubserver ansible]# vim when1.yml
复制代码
---
复制代码
- name: install mysql-server
复制代码
  hosts: dbs
复制代码
  tasks:
复制代码
    - name: install mysql-server pkg
复制代码
      yum:
复制代码
        name: mysql-server
复制代码
        state: present
复制代码
      when: ansible_memtotal_mb>2048
复制代码
# 如果目标主机没有2GB内存,则不会安装mysqld-server

regitster注册变量

Ansible的"register"模块是用于捕获和保存任务执行结果的,它允许将其他任务的输出作为变量使用。register是一个关键字,可以将任务执行的结果赋值给指定的变量名称。这个变量可以在后续任务中使用。 register模块可以捕获各种类型的输出,包括stdout、stderr、rc、changed等。它可以与其他模块一起使用,例如"when"条件、"loop"循环等。

复制代码
# 在web1组的主机上执行任务,创建/tmp/regfile1.txt,并打印创建结果
复制代码
[root@pubserver ansible]# vim reg1.yml
复制代码
---
复制代码
- name: create file /tmp/regfile1.txt
复制代码
  hosts: web1
复制代码
  tasks:
复制代码
    - name: create file
复制代码
      file:
复制代码
        path: /tmp/rgefile1.txt
复制代码
        state: touch
复制代码
      register: result 名字可以定义 
复制代码
    - name: display output
复制代码
      debug:
复制代码
        msg: "{{result}}"
相关推荐
Tongzhi202611 分钟前
从部署到运维:通芝科技无感考勤一体机的全流程效率解析
运维·数据结构·科技·算法·贪心算法
数据知道20 分钟前
宽字节注入、二次注入、堆叠注入:高级 SQLi 专题
linux·运维·安全·网络安全
2301_7807896639 分钟前
DDoS 攻击溯源:DNS 水印标记 + 区块链存证的双保险
运维·服务器·网络·云原生·ddos
童槿顏丶2 小时前
GitLab部署到Linux
linux·运维·gitlab
小柒儿3364 小时前
从单Agent到多智能体系统:多智能体协作重塑自动化边界
运维·自动化
QYR-分析5 小时前
注塑机机械手自动化装备行业发展研判:存量升级催生增量红利,2032 年市场规模逼近 9 亿美元
运维·自动化
牢姐与蒯6 小时前
Linux基本指令及知识点(二)
linux·运维·服务器
ᥬ 小月亮6 小时前
SonarQube使用教程(Docker安装)
运维·docker·容器
去伪存真20256 小时前
数字样机、态势推演与3D汇报场景下的平台选型对比
运维·服务器
自动化测试行业观察7 小时前
从“自动化”到“智能化”:TestMan AI测试平台引领软件测试范式转移
运维·自动化测试·人工智能·测试工具·自动化·app测试·移动应用测试