not able to match a string in a var list.

26 views
Skip to first unread message

matthew...@learnosity.com

unread,
Mar 29, 2016, 10:48:50 PM3/29/16
to Ansible Project
Hi All 

Doing something Im sure seems odd but building a production deployment script based on some very manual steps. The dev team list out all the services that need to be upgraded. I made a var called deploy to do two things.
1. Write out to a build file what needs to be build for prod. Its a flat file 
2. Be able to include upgrade tasks based on if api or data appears in the deployment list 

Example of my variable 

var:
  deploy:
      - api-app                     v2.41.0
      - api-develop              v0.23.2
      - api-tool                     v0.24.0
      - api-consumers         v0.16.0
      - api-data                    v0.57.2
      - api-bus                     eventbus-v1.1.2


Im trying to do the following. 

- include task/upgrade-api.yml
  when: "'api' in deploy"

This does not work as for some reason as Ive put spaces between it im thinking it cant seem to find 'api' at all. If I change the deploy var and remove the versions and have it as one liners like below, it will find a match if I was to have  when: "' api-too' in deploy. It seems to want to match a whole line and not part of it. I tried doing when: deploy |search("api'") but it failed because I think its a list. Im sure there is a better way to do this but wondering why my 'api in deploy" is not finding a match. 

var:
  deploy:
      - api-app
      - api-develop           
      - api-tool        
      - api-consumers      
      - api-data               
      - api-bus

Jean-Yves LENHOF

unread,
Mar 30, 2016, 12:14:25 AM3/30/16
to ansible...@googlegroups.com


Le 30/03/2016 04:48, matthew...@learnosity.com a écrit :
> Hi All
>
> Doing something Im sure seems odd but building a production deployment
> script based on some very manual steps. The dev team list out all the
> services that need to be upgraded. I made a var called deploy to do
> two things.
> 1. Write out to a build file what needs to be build for prod. Its a
> flat file
> 2. Be able to include upgrade tasks based on if api or data appears in
> the deployment list
>
> Example of my variable
>
> var:
> deploy:
> - api-app v2.41.0
> - api-develop v0.23.2
> - api-tool v0.24.0
> - api-consumers v0.16.0
> - api-data v0.57.2
> - api-bus eventbus-v1.1.2

Using minus or "." in a variable is very, very bad idea... Like in
python those are functions
Try using underscore instead
So :
api-app => api_app
api-develop => api_develop
...



Regards,

matthew...@learnosity.com

unread,
Mar 30, 2016, 1:01:42 AM3/30/16
to Ansible Project
Thanks Jean

But the issue is that even when I changed them to underscore (like below), Im finding when I do the "'api' in deploy" it seems to not find it. Its only when Its a completely match in a line it works. ie when: "'api_author' in deploy". 

Example (this does not work)

deploy:
      - api_assess
      - api_author
    
- include: tasks/update-api.yml
  when: "'api' in deploy"

Example (this works)

deploy:
      - api_assess
      - api_author
    
- include: tasks/update-api.yml
  when: "'api_assess' in deploy"

:/ 
Message has been deleted

Uditha Desilva

unread,
Mar 30, 2016, 6:43:14 PM3/30/16
to Ansible Project
Looks to me like you're actually building a dict of dicts, rather than a simple list. For example, this works for me:

---
- hosts: localhost
  vars:
    deploy:
        api:
          app:        v2.41.0
          develop:    v0.23.2
          tool:       v0.24.0
          consumers:  v0.16.0
          data:       v0.57.2
          bus:        eventbus-v1.1.2

  tasks:
    - include: tasks/update-api.yml
      when: "'api' in deploy.keys()"

-- or have I misunderstood what you're trying to do?
Reply all
Reply to author
Forward
0 new messages