Thanks a lot Todd for making us learn new thing and developing more 
interest in ansible.

Absolute thanks Todd.

On Wednesday, November 1, 2023 at 7:12:16 PM UTC+5:30 Todd Lewis wrote:

> The short answer is no. If you want to modify the string with backrefs, 
> then lineinfile will not create the line if it doesn't exist.
>
> But step back and consider your options for managing your override.conf 
> file.
>
> A. The best scenario is to take total ownership of the entire file, 
> generating it from variables in your project. You have to take changes into 
> account as you upgrade kafka etc, but you should do that in any case.
>
> B. If for some reasons you aren't ready or able to take ownership of the 
> whole file, then the next best thing is to at least take complete ownership 
> of the 'Environment="KAFKA…' line, and build it from information in your 
> project. You can still have appropriate differences on various instances, 
> but that would all by controlled by data and logic in your Ansible project. 
> See the example below.
>
> C. The absolute worst scenario, the situation where you should be saying, 
> "How can we move to option 'B' or 'A' as soon as possible?", is when you 
> try to tweak a line that may or may not exist, in a file that may or may 
> not exist, and that may have unknown variances between hosts for reasons 
> that (apparently) aren't coming from your configuration management system. 
> As a stop-gap step in a house-on-fire situation, you've got to do what 
> you've got to do. But you should stop doing it as soon as possible.
>
> That's not to say that 'C' doesn't work; it does, and I've managed files 
> that way for years. But I got in that situation for two reasons: 1) Nobody 
> told me what I just told you, and 2) I figured my problem was to tweak a 
> line in a file, and if there was an Ansible module to do just that, then it 
> must be an okay way to do it.
>
> Here's a short playbook with variables to inform the line in question. 
> Clearly you could use group_vars, host_vars, and/or inventory variables to 
> tailor the result for individual hosts. But I strongly encourage you to 
> pull the responsibility for that entire line (option 'B') or better yet 
> that entire file (option 'A') into your Ansible project.
>
> ---
> # sameer-0.yml
> - name: KAFKA_JMX options management
>   hosts: localhost
>   gather_facts: false
>   vars:
>     filename: sameer-0-override.conf
>     kafka_jmx_opts:
>       - 
> '-javaagent:/usr/share/java/kafka/jolokia.jar=port=8778,host=pilot01.test'
>       - '-Dcom.sun.management.jmxremote'
>       - '-Dcom.sun.management.jmxremote.authenticate=false'
>       - '-Dcom.sun.management.jmxremote.ssl=false'
>       - '-Djava.rmi.server.hostname=pilot01.test'
>       - '-Dcom.sun.management.jmxremote.rmi.port=1099'
>     kafka_jmx_opts_str: 'KAFKA_JMX_OPTS={{ kafka_jmx_opts | join(" ") }}'
>   tasks:
>     - name: Manage kafka_jms_opts in override.conf
>       ansible.builtin.lineinfile:
>         path: '{{ filename }}'
>         regexp: 'Environment="KAFKA_JMX_OPTS=.*"'
>         line: 'Environment="{{ kafka_jmx_opts_str }}"'
>         state: present
>         create: true # You should have "owner:", "group:", and "mode:" here 
> too.
>
>
>
> On 11/1/23 7:12 AM, Sameer Modak wrote:
>
> Hello Team, 
>
> I could figure out after 10 tries this is how i got it 
>
> - name: append the line
>   lineinfile:
>       path: /tmp/hello.txt
>       backrefs: yes
>       regexp: '^(.*KAFKA_JMX_OPTS.*)$"'.  <------------------------
>       line: '\1 
> -javaagent:{{jmxexporter_jar_path}}={{zookeeper_jmxexporter_port}}:{{zookeeper_jmxexporter_config_path}}"''
>
> but like can we handle the if else in one line in file 
>
> this will not work when file does not have "KAFKA_JMX_OPTS" in it. Can we 
> do it in same taks using item 2 regexp 
>
> if sting absent  add entire line else if string present append it.
>
>
>
>
>
>
> On Wednesday, November 1, 2023 at 4:11:40 PM UTC+5:30 Sameer Modak wrote:
>
>> We want to only append string  
>>  
>> -javaagent:{{jmxexporter_jar_path}}={{zookeeper_jmxexporter_port}}:{{zookeeper_jmxexporter_config_path}}"'
>>  
>>
>> to a file override.conf
>> if we have "Environment="KAFKA_JMX_OPTS" in it else 
>> add new line  "actual line"
>>
>>
>> Environment="KAFKA_OPTS=-javaagent:{{jmxexporter_jar_path}}={{zookeeper_jmxexporter_port}}:{{zookeeper_jmxexporter_config_path}}"'
>>
>> So basically append if something is there else add new line.
>>
>> I m struggling to get regex ryt.
>>
>> Currently the override.conf file has this below content with jmx 
>> parameters in it so  we want append  above line/string to  end of the 
>> existing line 
>>
>> Environment="KAFKA_JMX_OPTS=-javaagent:/usr/share/java/kafka/jolokia.jar=port=8778,host=pilot01.test
>>  
>> -Dcom.sun.management.jmxremote 
>> -Dcom.sun.management.jmxremote.authenticate=false 
>> -Dcom.sun.management.jmxremote.ssl=false 
>> -Djava.rmi.server.hostname=pilot01.test 
>> -Dcom.sun.management.jmxremote.rmi.port=1099"
>>
> -- 
> 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/73e8499f-c1f0-4183-88c7-4a55b034b161n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/ansible-project/73e8499f-c1f0-4183-88c7-4a55b034b161n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
> -- 
> Todd
>
>

-- 
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/7bce2653-6158-457c-b862-2303dd817d0fn%40googlegroups.com.

Reply via email to