[augeas-devel] Re: Augeas and Puppet

Bryan Kearney bkearney at redhat.com
Fri Aug 1 11:21:01 UTC 2008



Raphaël Pinson wrote:
> 
> 
> On Fri, Aug 1, 2008 at 12:17 AM, Kjetil Torgrim Homme 
> <kjetilho at linpro.no <mailto:kjetilho at linpro.no>> wrote:
<SNIP>
> 
> I'm personnaly for keeping the xpath syntax in puppet, because otherwise 
> we lose a lot of functionality from augeas, so I was thinking of 
> something like :
> 
> 
> augeas {
> 
> "/files/etc/my.cnf/mysqld/query_cache_limit":
>    action => set,
>    value  => "1048576",
>    notify => Service["mysql"];
> 
> "/files/etc/my.cnf/mysqld/log-slow-queries":
>    action => rm,
>    notify => Service["mysql"];
> 
> "/files/etc/logrotate.d/apache2/rule[1]":
>    action => mv,
>    newnode => "/files/etc/logrotate.d/apache2/rule[2]",
>    notify => Service["logrotate"];
> 
> }
> 
> 
> I believe using an "action" parameter is better than using "set", 
> "insert", "rm", etc. because using the latter would make you think that 
> you can perform several actions in one puppet call, which is not 
> possible (or I don't know how to do it at least :) ).

Take a look at [1]. The changes property can take a single command, or 
many based on line breaks or bring an array. The thinking being that you 
would want to do dependency managment on a a single unit of work which 
could be more then one augeas call.


> 
> Calling the object "augeas" makes it clear that it's an an editfile 
> syntax like in Cfengine, but specifically an augeas syntax, and that 
> this object is likely to evolve with the augeas API.
> 
> 
> When it comes to setting several values with one call, I think it is the 
> task of specific constructed types in puppet, like :
> 
> define mysql::server ( $query_cache_limit="123456", $log-slow-queries, 
> other parameters...) {
> 
> blah blah
> package management
> blah blah
> 
> 
>     augeas {
>         "/files/etc/mysql.cnf/query_cache_limit":
>            action => set,
>            value  => "123456";
> 
>         "/files/etc/my.cnf/log-slow-queries":
>            action => rm;
>     }
> 
> }
> 

In the current implementation it would be:
$mysql_augeas_commands = [
	"set /files/etc/mysql.cnf/query_cache_limit $query_cache_limit",
	"rm /files/etc/my.cnf/log-slow-queries"
]

augeas {"mysql_changes":
	changes => $mysql_augeas_commands
}
	

> 
> This type could check for values, and do :
>    - set the value if the value is defined
>    - rm the value if the value is not defined
> 
> 
> Or there could be a keyword to tell the type to delete the value...
> 
> 
> editfile { "/etc/ssh/sshd_config":
> 
>          lens => 'sshd,
>          match => '/sshd/AcceptEnv/*',
>          rm => 'match',
>      }
> 
> 
> 
> using the xpath format directly in the action would lead to this aswell :
> 
> augeas { "/files/etc/ssh/sshd_config/sshd/AcceptEnv/*":
>     action => rm;
> }
> 

I agree in principle, force them to understand the augeas syntax.

> 
<snip>
> 
> Btw, I'm forwarding this conversation to the puppet-dev group to have 
> more insight/ideas from other puppet experts.

thanks.. I am hoping to push this into the common modules when it is ready.


-- bk

[1] http://git.et.redhat.com/?p=ace.git;a=blob;f=modules/augeas/test.pp




More information about the augeas-devel mailing list