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