How to escape single quotes in ansible assertions?

1,413 views
Skip to first unread message

Neil Young

unread,
Jun 9, 2022, 3:53:51 PM6/9/22
to Ansible Project
I need to check this console output:

Kurento Media Server version: 6.16.0

Found modules:

   'core' version 6.16.0

   'elements' version 6.16.0

   'filters' version 6.16.0

This assertion works:

- name: KURENTO-MEDIA-SERVER - Assert

  tags: kurento-media-server-check
  assert:
that:
- "'Kurento Media Server version: {{ kurento_media_server_version }}' in kms_result.stdout"
quiet: yes

But I would like to add the 'core' and others too, but cannot figure out, how to escape the wrapping quotes for 'core', 'filters' and 'elements' in that string.



Neil Young

unread,
Jun 10, 2022, 8:13:10 AM6/10/22
to Ansible Project
Any hint? Yaml single quote escaping https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#id8 does not work in this case

so 
- "'''core''  version {{ kurento_media_server_version }}' in kms_result.stdout"

fails

Todd Lewis

unread,
Jun 10, 2022, 8:52:45 AM6/10/22
to ansible...@googlegroups.com, uto...@gmail.com

Single quoted strings are easier, but here's both:

---
- name: Quoting Quotes Tests
  hosts: localhost
  gather_facts: no
  vars:
    kurento_media_server_version: 6.16.0
    kms_result:
      stdout: |
        Kurento Media Server version: 6.16.0
        Found modules:
          'core' version 6.16.0
          'elements' version 6.16.0
          'filters' version 6.16.0
  tasks:
    - name: data dump
      assert:
        that: "{{ item }}"
      loop:

        - "'Kurento Media Server version: {{ kurento_media_server_version }}' in kms_result.stdout"

        - '"Kurento Media Server version: {{ kurento_media_server_version }}" in kms_result.stdout'
        - '"''core'' version {{ kurento_media_server_version }}" in kms_result.stdout'
        - '"''elements'' version {{ kurento_media_server_version }}" in kms_result.stdout'
        - '"''filters'' version {{ kurento_media_server_version }}" in kms_result.stdout'

        - "\"'core' version {{ kurento_media_server_version }}\" in kms_result.stdout"

        - "\"'elements' version {{ kurento_media_server_version }}\" in kms_result.stdout"
        - "\"'filters' version {{ kurento_media_server_version }}\" in kms_result.stdout"

Neil Young

unread,
Jun 10, 2022, 9:15:25 AM6/10/22
to Ansible Project
Wow, many thanks. I would have bet that I exactly did try all these steps to no avail, but indeed - it works.

Thanks!

Walter Rowe

unread,
Jun 13, 2022, 7:34:51 AM6/13/22
to Ansible Project
I assume kms_result is the registered output from a prior task, thus stdout_lines will exist and be a list of the individual lines. You can assert as many things as you like in a single "that" parameter. It accepts a list. Read the documentation.


- assert:
    that:
      - "Kurento Media Server version: {{ kurento_media_server_version }}" in kms_result.stdout_lines
      - "'core' version {{ kurento_media_server_version }}" in kms_result.stdout_lines
      - "'elements' version {{ kurento_media_server_version }}" in kms_result.stdout_lines
      - "'filters' version {{ kurento_media_server_version }}" in kms_result.stdout_lines

Neil Young

unread,
Jun 13, 2022, 9:16:05 AM6/13/22
to Ansible Project
Yes, thanks. The issue is resolved. My bad

Brian Coca

unread,
Jun 13, 2022, 2:54:18 PM6/13/22
to Ansible Project
You can also avoid the moustaches in some cases:

- assert:
that:
- "Kurento Media Server version: " ~
kurento_media_server_version in kms_result.stdout_lines
- "'core' version " ~ kurento_media_server_version in
kms_result.stdout_lines
- "'elements' version" ~ kurento_media_server_version in
kms_result.stdout_lines
- "'filters' version" ~ kurento_media_server_version in
kms_result.stdout_lines


--
----------
Brian Coca

Reply all
Reply to author
Forward
0 new messages