0
点赞
收藏
分享

微信扫一扫

linux下ansible中when、block 、handler工具及 mount、cron模块的使用方法

颜路在路上 2022-02-24 阅读 23

1、loop 工具

loop 工具可以存储多个值,利用固定的变量名称item实现执行多次任务的目的

例:

  • vi www.yml

    ---
    - hosts: node1                执行主机对象
    tasks:                      任务
      - user:                   模块
          name: "{{item}}"      名称,正常是写创建的用户模块,这里使用变量item来调用loop 工具 达到多次循环创建用户的目的,不用创建一个写一个任务那么麻烦
        loop:                  工具
          - zhsan               创建的用户一列写下去即可
          - lisi
          - wangwu
    # 别的很多的模块也可以按照这个格式这样写    
    例:
    ---
    - hosts: node1                执行主机对象
    tasks:                      任务
      - file:                   模块创建文件
          state: touch          任务动作  touch文件
          dest: /opt/{{item}}   创建的目标 变量前面如果有目录什么的,就不用再双引号了,如果没有双大括号外面在家双引号
        loop:                  工具
          - aaa               创建的文件名称一列列写下去即可
          - sss
          - ddd
  • ansible-playbool www.yml 执行playbook

多次使用变量调用的方法,例如使用loop工具时,不仅要创建用户还要为用户创建密码并加密

---
- hosts
  tasks:
    - user:
        name: "{{item.name}}"   指定名称表示item的什么什么
        password: "{{item.pass|password_hash('sha512')}}"  指定密码表示item的什么什么 并使用password_hash指定sha512 去加密
      loop"
        - {name: zhangsan,pass: "123"} 这里的name、pass 要与上面item后面指定的一样
        - {name: lisi,pass: "111"}
        - {name: wangwu,pass: "222"}
#item.name/pass  这样个可以根据不同的模块去自己定义内容,但是下面的loop使用时要对应

2、when 工具 判断 可以进行条件测试

举个例子,比如分区需要硬盘,使用when 去测试有没有硬盘

== != > >= < <= in 、 not in、is defined、 is not defined 这些为测试符号

上述条件也可以用and (并且) 、 or(或者) 连在一起使用

---
- hosts: node1
  tasks:
    - debug:
        msg: "ok"
      when: ansible_hostname == "node1" 测试这个主机的ansible_hostname 是不是等于 nide1 是的话就执行上面那个debug模块的任务,不是就不执行   调用变量时不用加{{}}
# 执行时如果条件不成立 不会报错 会提示 skipping  跳过  表示失败      
---
- hosts: node1
  tasks:
    - debug:
        msg: "ok"
      when: "rhel" in ansible_lvm.vgs  表示 rhel有没有在ansible_lvm.vgs里面
#in 、 not in  表示在不在
  is defined、 is not defined 表示有没有
  可以用or and  连在一起使用
例:when: ansible_memfree_mb > 300 and/or ansible_machine is defined

3、block 工具

rescue 表示救援

always 总是执行

---
- hosts: node1
  tasks:
    - block:              添加了block之后 将任务加到block里面实现写多个任务,并且下方when 与block对齐,达到同时测试block里面所有任务的需求
        - debug:
            msg: "aaa"
        - debug:
            msg: "ok" 
      when: "rhel" in ansible_lvm.vgs
#这个只是与when配合使用的其中一种方法
---
- hosts: node1
  tasks:
    - block:               添加了block之后 将任务加到block里面实现写多个任务
        - debug:
            msg: "aaa"
        - debug:
            msg: "ok" 
      rescue:             这个表示救援,表示前面的block如果执行不成功,则执行rescue任务。
        - debug:
            msg: "no"
      always:     
        - debug:          表示总是执行 不管前面的block、rescue是否执行成功,aloways都会执行。
            msg: "222"
# 基本上 block的使用方法就是这几个,需要时可以加上when测试            

4、handler 工具 可以单独定义备用任务

  • 使用时要在任务模块后面加上notify 来触发任务,需要调用
  • 定义备用任务时的名称name
  • 仅仅在任务是changed状态才会触发
---
- hosts: node1
  tasks:
    - file:
        name: /opt/asd
        state: directory   创建目录
      notify: testo1       调用了一个handler任务 调用的任务名要与handler定义的任务名称一致。
  handlers:                定义handler任务
    - name: test01         定义任务名字test01
      debug:               让test01 使用debug
        msg: "hand"
# 同一个playbook执行两次之后第二次就不会在执行notify、handler任务,因为上面已经执行过一次了。要么同时一起执行任务,要么都不执行,取决于上方第一个任务是否执行过。     

5、mount挂载模块

  • mount 模块挂载
  • path 需要挂载到哪里
  • src 挂载谁 (源路径)
  • fstype 文件系统类型
  • state 动作 present挂载 mounted 永久挂载

6、cron 计划任务模块

  • name 名字
  • minute 分钟
  • hour 小时 (其他的没写就默认是 * )
  • job 执行内容
  • user 指定用户
---
- hosts: a 
  tasks:
    - cron:
        name: "dasda asda" (有空格需要加引号)  (可不写此行)
        minute: "0"
        hour: "5,2"
        job: "ls -alh > /dev/null"
        user: alice  (不写就默认给root执行任务)
# 给alice用户每天的5点2点 执行一次 这个命令"ls -alh > /dev/null"        
  • ansible a -m shell -a 'crontab -l -u alice' 查看计划任务 -u 表示指定查看哪个用户
举报

相关推荐

0 条评论