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 ![](https://img-blog.csdnimg.cn/direct/f8d760d738b44dbaad6d2d9c794279fc.png) #### 自定义变量 ![](https://img-blog.csdnimg.cn/direct/97dad66a981545f0869cbda7cb630dcc.png) * 引入变量,可以方便Playbook重用。比如装包的playbook,包名使用变量。多次执行playbook,只要改变变量名即可,不用编写新的playbook。 * ansible支持10种以上的变量定义方式。常用的变量来源如下: * inventory变量。变量来自于主机清单文件 * facts变量。 * playbook变量。变量在playbook中定义。 * 变量文件。专门创建用于保存变量的文件。推荐变量写入单独的文件。 * **变量文本 \> playbook变量 \> inventory变量** ![](https://img-blog.csdnimg.cn/direct/04de89e4c9ad4081aba258aa1ad0b175.png) ![](https://img-blog.csdnimg.cn/direct/85b2ac7a011a4848ac588047a476ffc2.png) ![](https://img-blog.csdnimg.cn/direct/513351873fc74bffaebbe4c2e346e489.png) ##### firewalld模块 ![](https://img-blog.csdnimg.cn/direct/8d4422831ab141588d0fb5f4f2341e6d.png) ![](https://img-blog.csdnimg.cn/direct/d6a87a064deb400eab0195171f36732c.png) * * port:声明端口 * permanent:永久生效,但不会立即生效 * immediate:立即生效,临时生效 * state:enabled,放行;disabled拒绝 * 防火墙一般默认拒绝,明确写入允许的服务。 ##### template模块 * copy模块可以上传文件,但是文件内容固定 * template模块可以上传具有特定格式的文件(如文件中包含变量) * 当远程主机接收到文件之后,文件中的变量将会变成具体的值 * template模块上传的文件,使用的语法叫Jinja2。 * src:要上传的文件 * dest:目标文件路径 ![](https://img-blog.csdnimg.cn/direct/39405260473a4add80ddd8b4e3c26b0f.png) ### 进阶语法 ![](https://img-blog.csdnimg.cn/direct/ca7b90f1cb43473db4c218c5c674bc60.png) ![](https://img-blog.csdnimg.cn/direct/fcd0ef9a3c7b42978652316585be163f.png) #### 触发执行任务 * 通过handlers定义触发执行的任务 * handlers中定义的任务,不是一定会执行的 * 在tasks中定义的任务,通过notify关键通知handlers中的哪个任务要执行 * 只有tasks中的任务状态是changed才会进行通知。 ![](https://img-blog.csdnimg.cn/direct/a0cd2df6ca174effbeb2419602a7c436.png) ![](https://img-blog.csdnimg.cn/direct/e52eb55c22b54c15920a9ff46984506c.png) #### 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}}" ```

相关推荐
码农101号5 小时前
Linux中shell编程表达式和数组讲解
linux·运维·服务器
powerfulzyh5 小时前
非Root用户启动SSH服务经验小结
运维·ssh
云道轩5 小时前
升级centos 7.9内核到 5.4.x
linux·运维·centos
爱学习的小道长5 小时前
Ubuntu Cursor升级成v1.0
linux·运维·ubuntu
EelBarb5 小时前
seafile:ubuntu搭建社区版seafile12.0
linux·运维·ubuntu
402 Payment Required5 小时前
serv00 ssh登录保活脚本-邮件通知版
运维·chrome·ssh
小柏ぁ6 小时前
calico/node is not ready: BIRD is not ready: BGP not established with xxx
运维·docker·kubernetes
Mintimate6 小时前
云服务器 Linux 手动 DD 安装第三方 Linux 发行版:原理与实战
linux·运维·服务器
RussellFans6 小时前
Linux 环境配置
linux·运维·服务器
高冷的肌肉码喽7 小时前
Linux-进程间的通信
linux·运维·服务器