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}}" ```

相关推荐
互联网搬砖老肖4 小时前
运维打铁: MongoDB 数据库集群搭建与管理
运维·数据库·mongodb
Antonio9154 小时前
【音视频】HLS简介与服务器搭建
运维·服务器·音视频
艾伦_耶格宇5 小时前
【docker】-1 docker简介
运维·docker·容器
R.X. NLOS5 小时前
VS Code远程开发新方案:使用SFTP扩展解决Remote-SSH连接不稳定问题
运维·服务器·ssh·debug·vs code
cuijiecheng20186 小时前
Ubuntu下布署mediasoup-demo
linux·运维·ubuntu
jingyu飞鸟10 小时前
linux系统源代码安装apache、编译隐藏版本号
linux·运维·apache
2401_8582861111 小时前
OS15.【Linux】gdb调试器的简单使用
linux·运维·服务器·开发语言·gdb
c30%0012 小时前
内网渗透——红日靶场五
运维·服务器
zjw_rp13 小时前
centos停止维护后更换yum源
linux·运维·centos
宇钶宇夕13 小时前
EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上
运维·服务器·数据库·程序人生·自动化