Comparing command line variable in import_playbook

173 views
Skip to first unread message

SysAdmin EM

unread,
Feb 7, 2023, 1:48:01 PM2/7/23
to ansible...@googlegroups.com
I again, thank you all for your help, I’m really learning a lot.

I have a new query. I am passing via "extra-vars" a variable called wc2env and I need to compare it with a string (stage or prod).

Here is my playbook:

  hosts: all
 gather_facts: no
 vars:
   wc2env: '{{ wc2env }}'
 tasks:
- name: "Validando si debo deployar dominio en PROD"
 ansible.builtin.import_playbook: add_carrier_prod.yaml
 when: "{{ wc2env == 'prod' }}"

- name: "Validando si debo deployar el dominio en STAGE"
 ansible.builtin.import_playbook: add_carrier_stage.yaml
 when: "{{ wc2env == 'stage' }}"

I run the playbook this way and for some reason the condition returns "false":

ansible-playbook -i hosts --extra-vars "wc2env=stage" alta_carrier/playbook/tasks_target.yaml

Here the debug:

PLAYBOOK: tasks_target.yaml ************************************************************************************************************************
Positional arguments: alta_carrier/playbook/tasks_target.yaml
verbosity: 8
connection: smart
timeout: 10
become_method: sudo
tags: ('all',)
inventory: ('/etc/ansible/webcheckin/hosts',)
extra_vars: ('wc2env=stage',)
forks: 50
step: True
4 plays in alta_carrier/playbook/tasks_target.yaml

[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: {{ wc2env == 'prod' }}
skipping: [wc2-stage] => {
   "changed": false,
   "skip_reason": "Conditional result was False"
}

I’m doing something wrong and I don’t realize they could help me.

Regards,

Alex Wanderley

unread,
Feb 7, 2023, 1:58:09 PM2/7/23
to ansible...@googlegroups.com
Hi,

The error says all:
"[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }}"

So, your "when" statement should look like:
when: wc2env == 'stage'

Something else:
You are already passing on "wc2env" as an extra variable. You don't need the lines below, declaring it again, in the playbook:
 vars:
   wc2env: '{{ wc2env }}'

Alex

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/CAGUDtn%3DML6m-Q%2Boo9EfyWo8r7R91AgrM27_%3DNVU9FT0c_KokJw%40mail.gmail.com.


--

 

Edmonton_sig_RGB_S.jpg

Alex Wanderley

Application and Infrastructure Analyst II
Server Solutions & Automation

Financial and Corporate Services | Open City and Technology  

 

780-496-4156  Office

780-819-0273  Mobile

 

City of Edmonton

Century Place, 19th Floor

9803 102A Avenue NW

Edmonton AB, T5J 3A3

 

All information contained in this email post is proprietary to the City of Edmonton, confidential and intended only for the addressed recipient. If you have received this post in error, please disregard the contents, inform the sender of the misdirection, and remove it from your system. The copying, dissemination or distribution of this email, if misdirected, is strictly prohibited.


The contents of this message and any attachment(s) are confidential, proprietary to the City of Edmonton, and are intended only for the addressed recipient. If you have received this in error, please disregard the contents, inform the sender of the misdirection, and remove it from your system. The copying, dissemination, or distribution of this message, if misdirected, is strictly prohibited.

Brian Coca

unread,
Feb 7, 2023, 2:05:08 PM2/7/23
to ansible...@googlegroups.com
Alex pointed out your first mistake, but you also are using moustaches in 'when' when you shouldn't

when: wc2env == 'prod'


conditionals are already in an implied template context.

SysAdmin EM

unread,
Feb 7, 2023, 7:56:26 PM2/7/23
to ansible...@googlegroups.com
I’ve tried that way, but it doesn’t work either:

nsible-playbook -i hosts --extra-vars "wc2env=stage carrier=LL" alta_carrier/playbook/tasks_targe
t.yaml

PLAYBOOK: tasks_target.yaml ************************************************************************************************************************
Positional arguments: alta_carrier/playbook/tasks_target.yaml
verbosity: 5
connection: smart
timeout: 10
become_method: sudo
tags: ('all',)
inventory: ('/etc/ansible/webcheckin/hosts',)
extra_vars: ('wc2env=stage carrier=XX',)
forks: 50
step: True
4 plays in alta_carrier/playbook/tasks_target.yaml

TASK [Creating DataBase] ***************************************************************************************************************************
task path: /etc/ansible/webcheckin/alta_carrier/playbook/add_carrier_prod.yaml:6
skipping: [wc2-stage] => {
   "changed": false,
   "skip_reason": "Conditional result was False"
}


Here the playbook:

- name: "select target"
 hosts: all
 gather_facts: no
 tasks:
- name: "deploy prod"
 ansible.builtin.import_playbook: add_carrier_prod.yaml
 when: wc2env == 'prod'

- name: "deploy stage"
 ansible.builtin.import_playbook: add_carrier_stage.yaml
 when: wc2env == 'stage'

any sugestions?

Rowe, Walter P. (Fed)

unread,
Feb 8, 2023, 7:19:26 AM2/8/23
to ansible...@googlegroups.com
We need to see the entire output. This excerpt does not provide enough context. From what I see it is skipping the PROD because your wc2end is 'stage'. That is expected.

Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.

SysAdmin EM

unread,
Feb 8, 2023, 7:57:22 AM2/8/23
to ansible...@googlegroups.com
This is the entire output:

ansible-playbook [core 2.12.9]

 config file = /etc/ansible/ansible.cfg
 configured module search path = ['/home/emanuel/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
 ansible python module location = /usr/lib/python3/dist-packages/ansible
 ansible collection location = /home/emanuel/.ansible/collections:/usr/share/ansible/collections
 executable location = /usr/bin/ansible-playbook
 python version = 3.8.10 (default, Nov 14 2022, 12:59:47) [GCC 9.4.0]
 jinja version = 2.10.1
 libyaml = True
Using /etc/ansible/ansible.cfg as config file
setting up inventory plugins
host_list declined parsing /etc/ansible/webcheckin/hosts as it did not pass its verify_file() method
script declined parsing /etc/ansible/webcheckin/hosts as it did not pass its verify_file() method
auto declined parsing /etc/ansible/webcheckin/hosts as it did not pass its verify_file() method
Not replacing invalid character(s) "{'-'}" in group name (kiucargo-servers)
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
Parsed /etc/ansible/webcheckin/hosts inventory source with yaml plugin
Loading collection community.mysql from /usr/lib/python3/dist-packages/ansible_collections/community/mysql
Loading collection community.general from /usr/lib/python3/dist-packages/ansible_collections/community/general
Loading callback plugin default of type stdout, v2.0 from /usr/lib/python3/dist-packages/ansible/plugins/callback/default.py
Attempting to use 'default' callback.
Skipping callback 'default', as we already have a stdout callback.
Attempting to use 'junit' callback.
Attempting to use 'minimal' callback.
Skipping callback 'minimal', as we already have a stdout callback.
Attempting to use 'oneline' callback.
Skipping callback 'oneline', as we already have a stdout callback.
Attempting to use 'tree' callback.

PLAYBOOK: tasks_target.yaml ************************************************************************************************************************
Positional arguments: alta_carrier/playbook/tasks_target.yaml
verbosity: 5
connection: smart
timeout: 10
become_method: sudo
tags: ('all',)
inventory: ('/etc/ansible/webcheckin/hosts',)
extra_vars: ('wc2env=stage carrier=LL',)
forks: 50
step: True
4 plays in alta_carrier/playbook/tasks_target.yaml

PLAY [Seleccionamos el destino] ********************************************************************************************************************
META: ran handlers
META: ran handlers
META: ran handlers

PLAY [Creando DNS para nuevo carrier WC2 STAGE] ****************************************************************************************************
META: ran handlers
Perform task: TASK: Creating DataBase (N)o/(y)es/(c)ontinue: yes

Perform task: TASK: Creating DataBase (N)o/(y)es/(c)ontinue: ***************************************************************************************

TASK [Creating DataBase] ***************************************************************************************************************************
task path: /etc/ansible/webcheckin/alta_carrier/playbook/add_carrier_prod.yaml:6
skipping: [wc2-stage] => {
   "changed": false,
   "skip_reason": "Conditional result was False"
}

Does this skipping: [wc2-stage] mean the playbook is skipping the stage server? 

This is my hosts file:

kiucargo-servers:
  hosts:
    wc2-stage:
      ansible_host: 172.x.x.x
    wc2-prod:
      ansible_host: 172.x.x.x

I understand that the import_playbook parameter function should not matter the prod playbook, am I right?

Todd Lewis

unread,
Feb 8, 2023, 8:17:54 AM2/8/23
to Ansible Project
You still haven't shown us a task with the name "Creating DataBase", which is what's being skipped. Until you show us the tasks and their conditionals that go with the outputs, we can only guess.

Rowe, Walter P. (Fed)

unread,
Feb 8, 2023, 8:28:34 AM2/8/23
to ansible...@googlegroups.com
task path: /etc/ansible/webcheckin/alta_carrier/playbook/add_carrier_prod.yaml:6 
skipping: [wc2-stage] => { 
   "changed": false, 
   "skip_reason": "Conditional result was False" 
}

Look at the red text above. You have a prod task file. Your wc2env variable has a value of 'stage'. Your task in the prod file has a condition of when wc2env == 'prod'. Since wc2env == 'stage' this 'prod' task is the one being skipped. 

The skipping message means the task itself is being skipping because the condition you place on it evaluated to false. The task would only execute if the condition evaluated to true.

You provided these two tasks in a prior message.

- name: "deploy prod" 
  ansible.builtin.import_playbook: add_carrier_prod.yaml 
  when: wc2env == 'prod' 

- name: "deploy stage" 
  ansible.builtin.import_playbook: add_carrier_stage.yaml 
  when: wc2env == 'stage'

You are using 'include_playbook'. When you place a condition on 'import_playbook' it does not skip importing the playbook when the condition is false. It effectively places that condition on every task inside the imported playbook. If you want to skip the import itself you should use include vs import. In one of my playbooks I have a series of include_tasks tasks. The task files included are also ansible yaml files. Some of the include_tasks tasks in my playbook have when clauses on them. If one of those 'when' clauses evaluates to false, the task file is NOT included. In your case if one of your include_playbook 'when' clauses evaluates to false the playbook is still imported and all of the tasks are assigned the added condition from your import_playbook task.

Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123

Rowe, Walter P. (Fed)

unread,
Feb 8, 2023, 8:35:03 AM2/8/23
to ansible...@googlegroups.com
Read this article for a more thorough explanation of import vs include and how conditions on them are handled.



Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123

Rowe, Walter P. (Fed)

unread,
Feb 8, 2023, 8:35:03 AM2/8/23
to ansible...@googlegroups.com
Read this article for a more thorough explanation of import vs include and how conditions on them are handled.


Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123
On Feb 8, 2023, at 8:28 AM, Walter P. Rowe (Fed) <walte...@nist.gov> wrote:

Reply all
Reply to author
Forward
0 new messages