У меня есть книга, из которой я получаю то, что мне нужно, с помощью метода отладки, однако я не могу получить точное значение дочернего элемента моей отладочной переменной

Ниже моя пьеса

- hosts: db
  tasks:
  - name: Checking if For Page Life Expectancy.
    win_command: sqlcmd -q "SELECT [object_name],[counter_name],[cntr_value] FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Manager%'AND [counter_name] = 'Page life expectancy'"
    register: win_command_result


  - debug:
      var: win_command_result.stdout_lines.object_name

И мы получаем такой вывод

TASK [debug] 

ok: [db1.local] => {
    "win_command_result": {
        "changed": true, 
        "cmd": "sqlcmd -q \"SELECT [object_name],[counter_name], 
               [cntr_value] FROM sys.dm_os_performance_counters WHERE [object_name] 
                LIKE '%Manager%'AND [counter_name] = 'Page life expectancy'\"", 
        "delta": "0:00:01.099974", 
        "end": "2018-09-11 05:08:36.022907", 
        "failed": false, 
        "rc": 0, 
        "start": "2018-09-11 05:08:34.922933", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": "object_name                                                                                                                      
                   counter_name                                                                                                                     
                   cntr_value          \r\n--------------------------- 
  ----------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- --------------------\r\nSQLServer:Buffer Manager                                                                                                         
                            Page life expectancy                                                                                                                           
                            238579\r\n\r\n(1 rows affected)\r\n", 
        "stdout_lines": [
            "object_name                                                                                                                      
             counter_name                                                                                                                     
             cntr_value          ", 
            "--------------------------------------------------------- 
            ----------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- --------------------", 
            "SQLServer:Buffer Manager                                                                                                         
             Page life expectancy                                                                                                                           
             238579", 
            "", 
            "(1 rows affected)"
        ] 
    }
}  

Нам нужно только значение cntr_value , которое равно 238579

Если я установил, как я, хотя этот cntr_value является дочерним элементом stdout_lines

  - debug:
      var: win_command_result.stdout_lines.cntr_value

Это говорит

ok: [db1.local] => {
    "win_command_result.stdout_lines.cntr_value": "VARIABLE IS NOT DEFINED!"
}

Как мне извлечь точное значение cntr_value

0
Jaydeep Chaudhari 11 Сен 2018 в 09:28

1 ответ

Лучший ответ

Ваша конечная выходная переменная:

myvar.win_command_result.stdout

Итак, если вы хотите извлечь число, выполните регулярное выражение:

- name: Debug
  debug:
    msg: "{{ myvar.win_command_result.stdout | regex_search('\\d{6}')}}"

Другой вариант:

- name: Fact
  set_fact:
    mylist: "{{ myvar.win_command_result.stdout_lines | list }}"

- name: Debug
  debug:
    msg: "{{ item | regex_search('\\d+') }}"
  with_items: "{{ mylist[2] }}"
3
imjoseangel 12 Сен 2018 в 09:07