Can we do the same with blockinfile?
For instance, if the variable is not found then omit only that item and
move on to the next item and update it.
Here is my play
- name: insert/update php configurations in App_config_file
blockinfile:
path: "/etc/php/7.4/fpm/php.ini_bak"
marker: ";# {mark} ANSIBLE MANAGED BLOCK ###"
block: |
{% for items in item %}
{{ items }}
{% endfor %}
when: item is not search(omit)
with_items:
- { "display_errors = {{service_configurations.display_errors | d(omit) }}"
}
- { "memory_limit = {{service_configurations.memory_limit | d(omit) }}M" }
Here is the output I'm getting:
root@aws-farrukhahmed-518:/etc/php/7.4/fpm# cat php.ini_bak
;# BEGIN ANSIBLE MANAGED BLOCK ###
memory_limit = {{service_configurations.memory_limit | d(omit) }}M
;# END ANSIBLE MANAGED BLOCK ###
root@aws-farrukhahmed-518:/etc/php/7.4/fpm#
Here is the command I'm using:
ansible-playbook -i hosts exec.yml -e
'{"service_configurations":{"display_errors":"On","memory_limit":"128"}}'
-vvv
The expected output should be:
;# BEGIN ANSIBLE MANAGED BLOCK ###
display_errors = On
memory_limit = 128M
;# END ANSIBLE MANAGED BLOCK ###
PS: It is mandatory for me to do this with the blockinfile module.
On Fri, Aug 5, 2022 at 8:27 PM farrukh ahmed <[email protected]>
wrote:
> Thanks @utoddl for your time and reply.
>
> when: item.line is not search(omit)
>
> This solution actually worked for me.
>
> Thanks & regards,
>
> FARRUKH
> On Friday, August 5, 2022 at 5:22:03 PM UTC+5 [email protected] wrote:
>
>> That "when:" should be
>>
>> when: item.line is not search(omit)
>>
>> On Friday, August 5, 2022 at 8:03:34 AM UTC-4 Todd Lewis wrote:
>>
>>> - name: "Update Redis Parameters in {{ redis_config_path }}"
>>> lineinfile:
>>> path: "{{ redis_config_path }}"
>>> backrefs: yes
>>> regexp: "{{ item.regexp }}"
>>> line: "{{ item.line }}"
>>> when: item.line is match(omit)
>>> with_items:
>>> - { regexp: '^maxmemory', line: "maxmemory {{ MAX_MEM | d(omit)
>>> }}mb" }
>>> - { regexp: '^tcp-keepalive', line: "tcp-keepalive {{ TCP_KEEPALIVE
>>> | d(omit) }}" }
>>> - { regexp: '^tcp-backlog', line: "tcp-backlog {{ TCP_BACKLOG |
>>> d(omit) }}" }
>>> - { regexp: '^maxclients', line: "maxclients {{ MAX_CLIENTS |
>>> d(omit) }}" }
>>> - { regexp: '^timeout', line: "timeout {{ TIMEOUT }}" }
>>>
>>>
>>>
>>> On 8/5/22 7:31 AM, farrukh ahmed wrote:
>>>
>>> Thanks for your reply Vladimir Botka.
>>>
>>> This is my actual case:
>>>
>>> defaults > main.yml
>>> ---
>>> # defaults file for redis_configs
>>> redis_config_path: /etc/redis/redis.conf
>>>
>>> # Default Params Values
>>> MAX_MEM: 3000
>>> TCP_KEEPALIVE: 0
>>> TCP_BACKLOG: 511
>>> MAX_CLIENTS: 15000
>>> TIMEOUT: 1500
>>>
>>>
>>> And this is:
>>>
>>> Tasks > main.yml
>>>
>>> ---
>>>
>>> - name: "Update Redis Parameters in {{ redis_config_path }}"
>>> lineinfile:
>>> path: "{{ redis_config_path }}"
>>> backrefs: yes
>>> regexp: "{{ item.regexp }}"
>>> line: "{{ item.line }}"
>>> with_items:
>>> - { regexp: '^maxmemory', line: "maxmemory {{ MAX_MEM }}mb", when:
>>> {{ MAX_MEM }} is defined }
>>> - { regexp: '^tcp-keepalive', line: "tcp-keepalive {{ TCP_KEEPALIVE
>>> }}", when: {{ TCP_KEEPALIVE }} is defined }
>>> - { regexp: '^tcp-backlog', line: "tcp-backlog {{ TCP_BACKLOG }}",
>>> when: {{ TCP_BACKLOG }} is defined}
>>> - { regexp: '^maxclients', line: "maxclients {{ MAX_CLIENTS }}",
>>> when: {{ MAX_CLIENTS }} is defined}
>>> - { regexp: '^timeout', line: "timeout {{ TIMEOUT }}" }
>>>
>>>
>>> I want this to check if each variable inside an item is defined then
>>> make the changes to the line in the file, otherwise skip only those items
>>> which variables is not defined.
>>> For Instance, If I comment out the variable MAX_MEM from the defaults >
>>> main.yml. like below:
>>>
>>> # Default Params Values
>>> ##MAX_MEM: 3000
>>> TCP_KEEPALIVE: 0
>>> TCP_BACKLOG: 511
>>> MAX_CLIENTS: 15000
>>> TIMEOUT: 1500
>>>
>>> Then the execution should skip changes to the line where MAX_MEM is
>>> undefined, and the rest lines should be changed as they defined.
>>>
>>> Is it possible?
>>>
>>>
>>> On Friday, August 5, 2022 at 2:18:05 PM UTC+5 [email protected] wrote:
>>>
>>>> On Thu, 4 Aug 2022 23:43:59 -0700 (PDT)
>>>> farrukh ahmed <[email protected]> wrote:
>>>>
>>>> > with_items:
>>>> > - { regexp: '^text1', line: "text1 = {{ VAR1 }}", when: VAR1 is
>>>> defined }
>>>> > - { regexp: '^text2', line: "text2 = {{ VAR2 }}" }
>>>> > - { regexp: '^text3', line: "text3 = {{ VAR3 }}" }
>>>>
>>>> Set *default* to avoid errors, add attribute *def*, and select lines.
>>>> For example,
>>>>
>>>> shell> cat pb.yml
>>>> ---
>>>> - hosts: localhost
>>>> gather_facts: false
>>>> vars:
>>>> lines:
>>>> - regexp: '^text1'
>>>> line: 'text1 = {{ VAR1|d("undef") }}'
>>>> def: '{{ VAR1 is defined }}'
>>>> - regexp: '^text2'
>>>> line: 'text2 = {{ VAR2|d("undef") }}'
>>>> def: '{{ VAR2 is defined }}'
>>>> - regexp: '^text3'
>>>> line: 'text3 = {{ VAR3|d("undef") }}'
>>>> def: '{{ VAR3 is defined }}'
>>>> tasks:
>>>> - debug:
>>>> var: item
>>>> loop: "{{ lines|selectattr('def') }}"
>>>>
>>>> gives
>>>>
>>>> shell> ansible-playbook pb.yml -e VAR1=test
>>>>
>>>> PLAY [localhost]
>>>> *********************************************************************
>>>>
>>>> TASK [debug]
>>>> *********************************************************************
>>>> ok: [localhost] => (item={'regexp': '^text1', 'line': 'text1 = test',
>>>> 'def': True}) => ansible_loop_var: item item:
>>>> def: true
>>>> line: text1 = test
>>>> regexp: ^text1
>>>>
>>>> --
>>>> Vladimir Botka
>>>>
>>>
>>> --
> 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/hBHvqWAmixw/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/2cf96c01-f0fc-4ed5-afdb-4329530ae06en%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/2cf96c01-f0fc-4ed5-afdb-4329530ae06en%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
--
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 view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/CAL6Xq1fBwYaDA6B1cZFdQ44Bv6f96k2voDU2r7SFSVq7K%3Dja8w%40mail.gmail.com.