How to escape single quotes in ansible assertions?

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.

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

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"

Wow, many thanks. I would have bet that I exactly did try all these steps to no avail, but indeed - it works.

Thanks!

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.

https://docs.ansible.com/ansible/latest/collections/ansible/builtin/assert_module.html

  • 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

Yes, thanks. The issue is resolved. My bad

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