Create a file, if not exist, inside a loop

379 views
Skip to first unread message

Tristan Bessoussa

unread,
Jan 19, 2015, 5:51:04 AM1/19/15
to ansible...@googlegroups.com
Hi, 

I'm trying to achieve something basic (v1.8.2):  create a sitemap.xml if not exist for prestahsop projects.


- name: Check if sitemap is present
  stat: path={{ ansible_www_home }}/{{ item.dest }}/sitemap.xml
  with_items: repositories
  when: item.type == "prestashop"
  register: sitemap

- debug: var=sitemap

- name: Create sitemap.xml if necessary
  file: >
    path={{ ansible_www_home }}/{{ item.dest }}/sitemap.xml
    owner=www-data
    group=www-data
    mode=0644
  with_items: repositories
  when: item.type == "prestashop" and sitemap.results.item is defined and sitemap.results.stat.exists == False


The debug statement gives me 

    "sitemap": {
        "changed": false, 
        "msg": "All items completed", 
        "results": [
            {
                "changed": false, 
                "skipped": true
            }, 
            {
                "changed": false, 
                "skipped": true
            }, 
            {
                "changed": false, 
                "invocation": {
                    "module_args": "path=/home/yprox/ansible-www/project/sitemap.xml", 
                    "module_name": "stat"
                }, 
                "item": {
                    "dest": "top-kids", 
                    "repo": "g...@github.com:Organisation/project.git", 
                    "type": "prestashop", 
                    "version": "master"
                }, 
                "stat": {
                    "exists": false, 
                }
            },
            ..........


I have at least one node which has "exists" false. But it does not create the file. It just goes "Skipped".

Why ? Thanks :-)

junkmailt...@gmail.com

unread,
Jan 19, 2015, 7:52:30 AM1/19/15
to ansible...@googlegroups.com

Remember sitemap is a list. So you need to loop over that.

You should be able to do something like:

- name: Create sitemap.xml if necessary
  file
: >
    path
={{ ansible_www_home }}/{{ item.dest }}/sitemap.xml
    owner
=www-data
   
group=www-data
    mode
=0644

  with_items
: sitemap.results
 
when: item.item.type is defined and item.item.type == "prestashop" and item.stat.exists == False

Tristan Bessoussa

unread,
Jan 19, 2015, 8:25:21 AM1/19/15
to ansible...@googlegroups.com
Oh great, but sitemap.results doesn't know the item.dest which was contained in the first array (repositories).

Is there a way to cross arrays in order to avoid loosing the reference to item.dest (because I want to know where to create the sitemap, and right now with your solution, it doesn't know)

Tristan Bessoussa

unread,
Jan 19, 2015, 8:33:43 AM1/19/15
to ansible...@googlegroups.com
Ok nvm, there were a small error, but it works like a charm with :

- name: Create sitemap.xml if necessary
  file: >
    path={{ ansible_www_home }}/{{ item.item.dest }}/sitemap.xml
    owner=www-data
    group=www-data
    mode=0644
    file=touch


Thanks very much sir ;-)


Le lundi 19 janvier 2015 13:52:30 UTC+1, junkmailt...@gmail.com a écrit :
Reply all
Reply to author
Forward
0 new messages