如何在 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 测试)
如何使用 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 测试)