如何在 mysql 响应中使用正则表达式来使用 ansible 过滤值?

How can I use a regex on a mysql response to filter values using ansible?

如何使用 ansible slave_io_running/slave_sql_running 进行过滤并获得是或否的值?

stdout_lines:

    - '            Slave_IO_Running: Yes'
    - '            Slave_SQL_Running: No'
    - '              Replicate_Do_DB: '
    - '          Replicate_Ignore_DB: '
    - '           Replicate_Do_Table: '
    - '       Replicate_Ignore_Table: '
    - '      Replicate_Wild_Do_Table: '
    - '  Replicate_Wild_Ignore_Table: '
    - '                   Last_Errno: 0'
    - '                   Last_Error: '
    - '                 Skip_Counter: 0'
    - '          Exec_Master_Log_Pos: 2595'
    - '              Relay_Log_Space: 1306'
    - '              Until_Condition: None'

我已经试过了,但是没用

when: yum_sec_upd.stdout_lines | select('search', 'Slave_IO_Running:') | list | length > 0


如果你想提取Slave_IO_Running的值,你可以这样做:

    - set_fact:
        slave_io_running: >-
          {{ (yum_sec_upd.stdout_lines | select("search", "Slave_IO_Running:") | first).split(": ")[1] }}

这会将变量 slave_io_running 设置为提取的值。 这是一个完整的测试,展示了这一点:

- hosts: localhost
  gather_facts: false
  vars:
    yum_sec_upd:
      stdout_lines:
        - '            Slave_IO_Running: Yes'
        - '            Slave_SQL_Running: No'
        - '              Replicate_Do_DB: '
        - '          Replicate_Ignore_DB: '
        - '           Replicate_Do_Table: '
        - '       Replicate_Ignore_Table: '
        - '      Replicate_Wild_Do_Table: '
        - '  Replicate_Wild_Ignore_Table: '
        - '                   Last_Errno: 0'
        - '                   Last_Error: '
        - '                 Skip_Counter: 0'
        - '          Exec_Master_Log_Pos: 2595'
        - '              Relay_Log_Space: 1306'
        - '              Until_Condition: None'

  tasks:
    - set_fact:
        slave_io_running: >-
          {{ (yum_sec_upd.stdout_lines | select("search", "Slave_IO_Running:") | first).split(": ")[1] }}

    - debug:
        msg: "running"
      when: slave_io_running

    - debug:
        msg: "not running"
      when: not slave_io_running

(使用 ansible ansible 2.12.1 测试)

创建字典

stats: "{{ yum_sec_upd.stdout_lines|map('from_yaml')|combine }}"

给予

  stats:
    Exec_Master_Log_Pos: 2595
    Last_Errno: 0
    Last_Error: null
    Relay_Log_Space: 1306
    Replicate_Do_DB: null
    Replicate_Do_Table: null
    Replicate_Ignore_DB: null
    Replicate_Ignore_Table: null
    Replicate_Wild_Do_Table: null
    Replicate_Wild_Ignore_Table: null
    Skip_Counter: 0
    Slave_IO_Running: true
    Slave_SQL_Running: false
    Until_Condition: None

条件很简单

    - debug:
        msg: Slave IO is running
      when: stats.Slave_IO_Running
(使用 Ansible 2.12.1 测试)