I have as well the need to loop over a set of tasks. In my case it's about
incremental updating of the schema in a database. I know there are tools
like Flyway and schema-evolution-manager that would easily do the trick but
they're not wished to be used in this project for different reasons. So I'd
like to imitate what these tools are doing in Ansible.
Here is what I have so far:
Content of tasks/main.yml:
- name: get info which version is installed
shell: psql -A -t -c "SELECT version_name FROM schema_deploy_version
WHERE version_rank IN (SELECT MAX(version_rank) FROM schema_deploy_version)"
register: installed_version_info
- include: incremental_install.yml
when: (item | version_compare('{{ installed_version_info.stdout }}',
'>')) and (item | version_compare('{{ target_version }}', '<='))
with_items:
- "{{ versions }}"
Content of vars/main.yml:
versions: ['4.5.0.0.002', '4.6.0.0.001', '4.7.0.0.004']
Content of tasks/incremental_install.yml: (simplified)
- name: install increment
shell: psql -f install_{{ item }}.sql
register: install_result
- name: check install
shell: source check_install.sh;
register: check_install_result
failed_when: "('ERROR' in check_install_result.stdout)"
- name: set schema version
shell: psql -c "INSERT INTO schema_deploy_version(version_name) VALUES
('{{ item }}')"
Problem is that "include" and "with_items" is deprecated and not possible
anymore. Putting the looping inside incremental_install.yml to each task
would not work because in case the currently installed version is
'4.5.0.0.002' and the target version is '4.7.0.0.004' it would run try to
run each task *individually *first for version='4.6.0.0.001' and then for
version='4.7.0.0.004' - but I only want to install version='4.7.0.0.004'
after I checked that version='4.6.0.0.001' was ok. Thus the need to loop
over a set of tasks.
http://stackoverflow.com/questions/24625539/ansible-1-6-include-with-items-deprecated
recommends furthermore to write the tasks into a module. Or, since shell
scripts are standard for the project I'm involved in, just write a shell
script that encapsulates these 3 tasks and then loop over the shell task.
Any other solutions?
Cheers,
Cindy
Am Donnerstag, 23. Oktober 2014 18:12:08 UTC+2 schrieb Michael DeHaan:
>
> Can you explain your use case in less abstract ways?
>
> On Wed, Oct 22, 2014 at 2:49 AM, chen Augustin <[email protected]
> <javascript:>> wrote:
>
>> I have a play which has two tasks, something looks like the following
>> snippet of code. The Task2 has dependency on the result of Task 1. And I
>> want to loop over the two tasks, is it feasible? It appears the
>> ‘with_items’ only loops over one task. The ‘include + with_items’ seems to
>> be a solution, but it gets deprecated since Ansible 1.6. Do you have other
>> solutions? Please advise.
>>
>>
>>
>> - name: Task 1
>>
>> Module 1:
>>
>> register: result
>>
>>
>>
>> - name: Task 2
>>
>> Module 2:
>>
>> Parameter: “{{ result }}”
>>
>> --
>> 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 [email protected] <javascript:>.
>> To post to this group, send email to [email protected]
>> <javascript:>.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ansible-project/2fbfed74-23bb-4152-b588-836caafdc4b8%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/ansible-project/2fbfed74-23bb-4152-b588-836caafdc4b8%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/82b3a7ff-fb10-4591-b358-a023f756d8b9%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.