Files
Wiki/Ansible
..
AWX
2020-03-18 09:39:34 +01:00
2020-03-24 11:15:34 +01:00
2020-05-11 12:22:05 +02:00

Ansible

Adhoc commands

Generic

ansible <hosts/groups pattern> -l <limit pattern> -m <module> -a "<module args>" -u <login user> --become --ask-become-pass

Example

ansible all -l localhost -m systemd -a "name=nginx state=restarted" -u test --become --ask-become-pass

Usecases

Filter numbers from a list of strings

sample.result_list is a list of lists containing stdout output. We want to filter some numbers from this output. To do this we first filter the correct lines by using the json_query filter. If you need to match a specific substring, you could use select("match", "<regex>") in combination with the json_query. Next we map the regex_search filter on all lines to extract the data we need. As the map filter is a Python generator object, we need to convert it to a list.

The regex (?<=\()\d+ uses a feature called positive lookbehind: (?<=\(). It matches a group before the main expression with including it in the result. In this case it matches the opening parantheses (. This feature may not be supported in your regex implementation, but in Ansible/Python it is supported. To make the regex even more specific you could add a positive lookahead ((?=\))) after the \d+ to match the closing parantheses ).

---

- hosts: localhost

  vars:
    sample:
      result_list:
      - stdout_lines:
        - 'line0'
        - 'line12 (2319)'
      - stdout_lines:
        - 'line2'
        - 'line12 (2320)'

  tasks:
  - debug:
      msg: '{{ sample.result_list | json_query("[*].stdout_lines[1]") | map("regex_search" ,"(?<=\()\d+") | list }}'