[chef] RE: Re: RE: Re: Need cfengine like copy to achieve Self Healing


Chronological Thread 
  • From: "Steve Caissie" < >
  • To: < >
  • Subject: [chef] RE: Re: RE: Re: Need cfengine like copy to achieve Self Healing
  • Date: Sat, 5 Feb 2011 16:44:02 -0500

Sorry, I'll try to provide a clear example:

I've got a 3rd party monitoring application that requires me to deploy the 
agents and plugins to all of the systems on my network. Here's the cfengine 
syntax to do that:

    monitoring_agent_class::
        /opt/agent-software
            dest=/opt/agent-software
            owner=root
            group=root
            recurse=inf
            purge=true
            server=monitoring_server
            define=restart_agent
        /var/lib/agent-plugins
            dest=/opt/agent-plugins
            owner=root
            group=root
            recurse=inf
            purge=true
            server=monitoring_server
            define=restart_agent

This tells each system on the network to copy the monitoring agent and 
plugins from "monitoring_server". There are multiple levels of directories 
under /opt/agent-software. It is "self healing", because any missing or 
changed files on the destination servers are fixed next time cfengine runs. 
Only the files that need to change are updated. Cfengine guarantees that the 
source and destination directories are an exact match.  I can make a quick 
change to an agent-plugin and next time cfengine runs, that change is 
installed on each server.

I think these are my choices if I want to do this in Chef:

1. remote_directory resource - It doesn't preserve file permissions. If I set 
files_mode=755 on the files in /opt/agent-software, I'd have execute 
permissions on configuration files that should be read-only.

2. tar the directories and use the cookbook_file resource - If I want to be 
100% sure that the destination isn't corrupt, I'd have to untar the tar file 
on every chef run and restart the agent. With the cfengine configuration 
above, the agent would only be restarted if an individual file gets updated.

3. Create an rpm for agent-software and another for agent-plugins - To make 
this "self healing", chef would need a "verify" action in the package 
resource. I'd use the "verify" action to verify that the target system's 
install matches the contents of the rpm.  If it doesn't match, I'd install 
the rpm with a --force option.  I also think creating and maintaining an rpm 
is a lot more complex that the cfengine setup above.

Are there any other Chef options for doing this?

Steve

-----Original Message-----
From: 

 
[mailto:
 On Behalf Of Michael Hale
Sent: Saturday, February 05, 2011 2:12 PM
To: chef
Subject: [chef] Re: RE: Re: Need cfengine like copy to achieve Self Healing

I'm confused about how recursively copying a directory and preserving
permissions provides "self healing". Can you elaborate on how that
feature of cfengine provides self healing in your environment? It is
possible there is a more idiomatic way to accomplish what you are
after in chef.

On Sat, Feb 5, 2011 at 2:06 PM, Steve Caissie 
< >
 wrote:
> I can apply the same mode to all of the files in a directory with 
> remote_directory, but I don't see any way to preserve the source 
> directory's permissions.
>
> Ideally, I'd like to be able to copy from a local or remote source and 
> preserve permissions. Cfengine offers this with the copy action.
>
> Steve
>
>
> -----Original Message-----
> From: 
> 
>  
> [mailto:
>  On Behalf Of Daniel DeLeo
> Sent: Saturday, February 05, 2011 1:24 PM
> To: 
> 
> Subject: [chef] Re: Need cfengine like copy to achieve Self Healing
>
> On Sat, Feb 5, 2011 at 9:59 AM, Steve Caissie 
> < >
>  wrote:
>> I'm trying to make my systems self healing with chef. I've been doing this
>> for many years with cfengine. I think chef needs a cfengine like copy
>> resource to make it easier to maintain a self healing environment.
>>
>>
>>
>> In cfengine 2, the copy action has a recursive option that lets you 
>> preserve
>> permissions and create classes if files were changed.  There doesn't appear
>> to be any resource to do this in chef.  You could use a tar file to 
>> preserve
>> permissions, but then the copy isn't idempotent.  There would be no easy 
>> way
>> to tell if files on the destination system have changed.  You could put the
>> files into a package like an rpm, but those packages are more difficult to
>> maintain.  I have a lot of directories that I need to copy and maintain.  I
>> don't want to create an rpm for every directory.
>>
>>
>>
>> It would also be nice if chef didn't have to import all of the files you
>> want to copy.  I'd like to be able to change a directory tree without 
>> having
>> to tell Chef about the change.
>>
>>
>>
>> To get around this limitation, I'm going to try to create an "rsync" LWRP 
>> in
>> chef.
>
> Can you explain a bit more about how what you're looking for differs
> from the existing remote directory[1] resource? Do you just want a
> remote directory that uses a local (i.e., already exists elsewhere on
> the filesystem) source? Do you need permissions that are more varied
> than remote directory provides?
>
>
>>
>> Steve Caissie
>> Director of Operations
>>
>> Vlingo
>>
>>
>
> Thanks,
> Dan DeLeo
>



Archive powered by MHonArc 2.6.16.

§