<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Nov 19, 2015, at 03:38, Mike Plemmons &lt;<a href="mailto:mikeplemmons@gmail.com" class="">mikeplemmons@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><p dir="ltr" class="">We just replace the entire file in our roles instead of editing in place.&nbsp; The reasoning is that if a user removes any text in the file before or after the desired lineinfile or replaced lines you still end up with a broken config but the task still succeeds.</p><p dir="ltr" class="">This allows Ansible to provide a strong self healing capability.</p>
</div></blockquote><div>I agree. &nbsp;Manage the whole file httpd.conf if configuration management is your objective. &nbsp;If you need to parameterize things in httpd.conf you can probably use .erb templates or similar (I don't know Ansible specifically.)</div><div><br class=""></div><div>This prevents errors and problems from someone coming along later making changes by hand. &nbsp;Otherwise you can drive yourself crazy trying to set up just the exact right only-match-this-block-and-this-line rule. &nbsp;If httpd.conf needs to be modified later, use your configuration management. &nbsp;Any future modifications by hand or external process to httpd.conf should be clobbered - that's what you want to happen. &nbsp;It allows you to declare your configuration management - Ansible - as the authority for the contents of httpd.conf.</div><div><br class=""></div><div>Second, try to keep httpd.conf as small as possible, delegating all but core/global configuration to conf.d files. &nbsp;I'd still recommend using Ansible to manage the conf.d files - but you don't have to.</div><div><br class=""></div><div>Lastly, you're right to set aside sed/awk for this task. &nbsp;They're great and valuable tools, but they're also a poor substitute for more robust configuration management options like Chef, Puppet, Ansible, etc.</div><div><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><div class="gmail_quote">On Nov 18, 2015 10:25 PM,  &lt;<a href="mailto:jep200404@columbus.rr.com" class="">jep200404@columbus.rr.com</a>&gt; wrote:<br type="attribution" class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">How would you automate the editing of a configuration file as<br class="">
described below?<br class="">
<br class="">
I am automating the configuration of a system with Ansible.<br class="">
For /etc/httpd/conf/httpd.conf, I need to make sure that the<br class="">
&lt;Directory /&gt; section has a "Require all granted" line instead<br class="">
of a "Require all denied" line. "Require all" lines in other<br class="">
sections need to be left alone.<br class="">
<br class="">
original /etc/httpd/conf/httpd.conf<br class="">
<br class="">
&nbsp; &nbsp; ...<br class="">
&nbsp; &nbsp; &lt;Directory /&gt;<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; AllowOverride none<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; Require all denied<br class="">
&nbsp; &nbsp; &lt;/Directory&gt;<br class="">
&nbsp; &nbsp; ...<br class="">
&nbsp; &nbsp; &lt;Files ".ht*"&gt;<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; Require all denied<br class="">
&nbsp; &nbsp; &lt;/Files&gt;<br class="">
&nbsp; &nbsp; ...<br class="">
<br class="">
desired /etc/httpd/conf/httpd.conf<br class="">
<br class="">
&nbsp; &nbsp; ...<br class="">
&nbsp; &nbsp; &lt;Directory /&gt;<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; AllowOverride none<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; Require all granted<br class="">
&nbsp; &nbsp; &lt;/Directory&gt;<br class="">
&nbsp; &nbsp; ...<br class="">
&nbsp; &nbsp; &lt;Files ".ht*"&gt;<br class="">
&nbsp; &nbsp; &nbsp; &nbsp; Require all denied<br class="">
&nbsp; &nbsp; &lt;/Files&gt;<br class="">
&nbsp; &nbsp; ...<br class="">
<br class="">
I can write an awk script or probably even a sed script to do it,<br class="">
but it is desirable to edit with a Ansible module instead of an<br class="">
external shell command, because of the way Ansible modules<br class="">
understand when something has really changed or not.<br class="">
<br class="">
I don't see how to use the lineinfile module in this situation,<br class="">
because it will only change the last line to match a regex.<br class="">
Matching "Require all" would change the line in the &lt;Files ".ht*"&gt;,<br class="">
section instead of in the &lt;Directory /&gt; section.<br class="">
<br class="">
It would be easy to just replace the whole file with a new one from<br class="">
Ansible, but that is also not preferred because when some new<br class="">
version of httpd.conf arrives, the wholesale replacement would<br class="">
clobber other changes in the configuration file.<br class="">
_______________________________________________<br class="">
colug-432 mailing list<br class="">
<a href="mailto:colug-432@colug.net" class="">colug-432@colug.net</a><br class="">
<a href="http://lists.colug.net/mailman/listinfo/colug-432" rel="noreferrer" target="_blank" class="">http://lists.colug.net/mailman/listinfo/colug-432</a><br class="">
</blockquote></div>
_______________________________________________<br class="">colug-432 mailing list<br class=""><a href="mailto:colug-432@colug.net" class="">colug-432@colug.net</a><br class="">http://lists.colug.net/mailman/listinfo/colug-432<br class=""></div></blockquote></div><br class=""></body></html>