Aren't you looking for the "Single copy nirvana" ? http://blog.zzamboni.org/implementing-single-copy-nirvana-in-cfengine3
You define a list to copy from, and the first file in that list that exists will be copied, and the other skipped ? Nicolas CHARLES Normation SAS - http://www.normation.com 87 rue de Turbigo - 75003 Paris +33 (0)1 83 62 26 96 - +33 (0)6 14 63 25 18 On 21/11/2011 19:52, [email protected] wrote: > Forum: CFEngine Help > Subject: fileexists() on remote host > Author: zont1 > Link to topic: https://cfengine.com/forum/read.php?3,24026,24026#msg-24026 > > Hi, > > I want to synchronize some system files with cfengine3. I've got few named > profiles and one default profile with hierarchy as following: > default/etc/inetd.conf > default/etc/sysctl.conf > profile1/etc/inetd.conf > profile2/etc/sysctl.conf > > profile1 has it's own version of inetd.conf and sysctl.conf from default, > profile2 has it's own sysctl.conf and inetd.conf from default. > > I try to use "files:" promises to implement this sceme but I can't find > function/method to check if file exists on remote server. > > How can I check if the file exists on the remote host? > > > For now, I sync all config files for two profiles - profile1 and default and > then copy/install config from where it exists. > > > vars: > > profile1:: > "profile" string => "profile1"; > profile2:: > "profile" string => "profile2"; > > files: > freebsd:: > "$(g.masterfiles)/$(profile)" > comment => "Copy $(profile) config files", > perms => mog("0600", "root", "wheel"), > depth_search => recurse("inf"), > copy_from => remote_sync_dcp("$(g.syncfiles)/$(profile)", > "$(g.policyhost)"); > > "$(g.masterfiles)/default" > comment => "Copy default config files", > perms => mog("0600", "root", "wheel"), > depth_search => recurse("inf"), > copy_from => remote_sync_dcp("$(g.syncfiles)/default", > "$(g.policyhost)"); > > "/etc/inetd.conf" > comment => "Install $(this.promiser) file for $(profile)", > perms => mog("0644", "root", "wheel"), > ifvarclass => > and(fileexists("$(g.masterfiles)/$(profile)/etc/inetd.conf")), > copy_from => > no_backup_dcp("$(g.masterfiles)/$(profile)/etc/inetd.conf"), > classes => if_repaired("reload_inetd"); > > "/etc/inetd.conf" > comment => "Install $(this.promiser) file for default", > perms => mog("0644", "root", "wheel"), > ifvarclass => > not(fileexists("$(g.masterfiles)/$(profile)/etc/inetd.conf")), > copy_from => > no_backup_dcp("$(g.masterfiles)/default/etc/inetd.conf"), > classes => if_repaired("reload_inetd"); > > "/etc/sysctl.conf" > comment => "Copy $(this.promiser) file for $(profile)", > perms => mog("0644", "root", "wheel"), > ifvarclass => > and(fileexists("$(g.masterfiles)/$(profile)/etc/sysctl.conf")), > copy_from => > no_backup_dcp("$(g.masterfiles)/$(profile)/etc/sysctl.conf"), > classes => if_repaired("start_sysctl"); > > "/etc/sysctl.conf" > comment => "Copy $(this.promiser) file for default", > perms => mog("0644", "root", "wheel"), > ifvarclass => > not(fileexists("$(g.masterfiles)/$(profile)/etc/sysctl.conf")), > copy_from => > no_backup_dcp("$(g.masterfiles)/default/etc/sysctl.conf"), > classes => if_repaired("start_sysctl"); > > ... > commands: > > reload_inetd:: > "/etc/rc.d/inetd reload"; > > start_sysctl:: > "/etc/rc.d/sysctl start"; > ... > > body copy_from remote_sync_dcp(from, server) > { > servers => { "$(server)" }; > source => "$(from)"; > compare => "digest"; > purge => "true"; > } > > > > > _______________________________________________ > Help-cfengine mailing list > [email protected] > https://cfengine.org/mailman/listinfo/help-cfengine _______________________________________________ Help-cfengine mailing list [email protected] https://cfengine.org/mailman/listinfo/help-cfengine
