equality not consistent

30 views
Skip to first unread message

senorsmile

unread,
Nov 29, 2019, 6:16:05 PM11/29/19
to Ansible Project
I assume I'm making some strange error here, but I cannot figure out what the error is. 

I have a "changed_when" clause I've constructed that never seems to work.  However, if I take out the clause into its own debug statement, it seems to work.  

I have reproduced this with the following ansible: 

- hosts: localhost
  gather_facts: False
  tasks:
    
  - name: Update Jenkins-Jobs on Jenkins Master - docker container
    command: |
      echo "INFO:jenkins_jobs.cli.subcommand.update:Updating jobs in ['./jobs/'] ([])
            INFO:root:Caching type parameters of parameters = jenkins_jobs.modules.parameters:Parameters
            INFO:root:Caching type builders of builders = jenkins_jobs.modules.builders:Builders
            INFO:jenkins_jobs.builder:Number of jobs generated:  1
            INFO:jenkins_jobs.cli.subcommand.update:Number of jobs updated: 0
            INFO:jenkins_jobs.builder:Number of views generated:  0
            INFO:jenkins_jobs.cli.subcommand.update:Number of views updated: 0
      "
    register: jjb_update
    changed_when: 
      - ( jjb_update.stdout_lines | regex_replace('.*jobs updated.\s+(\d+).*', '\1') != '0' )

  - name: Number of jobs updated
    debug:
      msg: |
        {{ jjb_update.stdout_lines | regex_replace('.*jobs updated.\s+(\d+).*', '\1') }}

  - name: Number of jobs updated equals 0?
    debug:
      msg: |
        {{ jjb_update.stdout_lines | regex_replace('.*jobs updated.\s+(\d+).*', '\1') == '0' }}



The output I get in both 2.8.6 and 2.9.1 is 

TASK [Update Jenkins-Jobs on Jenkins Master - docker container] ************************************************************************************************************
changed: [localhost]

TASK [Number of jobs updated] **********************************************************************************************************************************************
ok: [localhost] => {
    "msg": "0\n"
}

TASK [Number of jobs updated equals 0?] ************************************************************************************************************************************
ok: [localhost] => {
    "msg": "True\n"
}


If the output is 0 and the check is true, the first task should NOT show changed.  

Kai Stian Olstad

unread,
Nov 30, 2019, 4:29:58 AM11/30/19
to ansible...@googlegroups.com
On 30.11.2019 00:16, senorsmile wrote:
> - hosts: localhost
> gather_facts: False
> tasks:
>
> - name: Update Jenkins-Jobs on Jenkins Master - docker container
> command: |
> echo "INFO:jenkins_jobs.cli.subcommand.update:Updating jobs in
> ['./jobs/'] ([])
> INFO:root:Caching type parameters of parameters =
> jenkins_jobs.modules.parameters:Parameters
> INFO:root:Caching type builders of builders =
> jenkins_jobs.modules.builders:Builders
> INFO:jenkins_jobs.builder:Number of jobs generated: 1
> INFO:jenkins_jobs.cli.subcommand.update:Number of jobs updated:
> 0
> INFO:jenkins_jobs.builder:Number of views generated: 0
> INFO:jenkins_jobs.cli.subcommand.update:Number of views
> updated: 0
> "
> register: jjb_update
> changed_when:
> - ( jjb_update.stdout_lines | regex_replace('.*jobs updated.\s+(\d+).*', '\1') != '0' )

jjb_update.stdout_lines is a list and the regex_replace filter work on strings, so it probably should have failed.

You can use the search test instead on stdout

changed_when: jjb_update.stdout is not search('jobs updated:.0')

--
Kai Stian Olstad

shaun

unread,
Jan 11, 2020, 1:41:33 AM1/11/20
to ansible...@googlegroups.com
This seems to have been some sort of quoting issue.  

After much troubleshooting, I found the working solution: 

  changed_when:
    - ((jjb_update.stderr_lines | regex_replace('.*jobs updated.\\s+(\\d+).*', '\\1')) != '0' )

--
Shaun


--
You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/RXmtqMg_pl4/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/92a3f484-9739-ae82-37eb-237e306277f5%40olstad.com.
Reply all
Reply to author
Forward
0 new messages