Forum: Cfengine Help
Subject: package_select and updates/reinstall
Author: kholloway
Link to topic: https://cfengine.com/forum/read.php?3,17726,17726#msg-17726

I can't seem to figure out how to get a package to properly update to a new 
version on Solaris with CFEngine 3.0.5p1.
My special sauce is below and works great for an add when the package is 
missing (am I missing how package_select works?).
After that was all working I switched the add to update but that causes the 
packages to get installed every run of cf-agent which is not what I wanted or 
expected.
The version numbers can be lower or match and aways get selected for 
reinstallation/update.
I have changed package_select various times trying less-than, greater-than, 
equal to and a few other combinations, the packages still get marked for 
reinstall every time.
I'm using the Solaris package settings from CFEngine SVN in tests I think.

This was dead simple in CF2 but seems to be broken in CF3 (or I clearly don't 
understand something I should).

--TEST1 (ADD) / this works to install a package ONLY if one doesn't already 
exist regardless of version number--
        packages:
         solaris|solarisx86::
          "$(package_names)"
                package_policy          => "add",
                package_select          => ">=",
                package_version         => 
"$(solaris_versions[$(package_names)])",
                package_method          => solaris("$(package_names)", 
"${instloc}/$(solaris_packages[$(package_names)])", "$(admin_file)");


--TEST2 (UPDATE) / this reinstalls a package on every run regardless of version 
number, I have also tried package_select > instead--
        packages:
         solaris|solarisx86::
          "$(package_names)"
                package_policy          => "update",
                package_select          => ">=",
                package_version         => 
"$(solaris_versions[$(package_names)])",
                package_method          => solaris("$(package_names)", 
"${instloc}/$(solaris_packages[$(package_names)])", "$(admin_file)");


--TEST3 (REINSTALL) / this reinstalls a package on every run regardless of 
version number--
        packages:
         solaris|solarisx86::
          "$(package_names)"
                package_policy          => "reinstall",
                package_select          => ">=",
                package_version         => 
"$(solaris_versions[$(package_names)])",
                package_method          => solaris("$(package_names)", 
"${instloc}/$(solaris_packages[$(package_names)])", "$(admin_file)");


---package_method bits---
body package_method solaris (pkgname, spoolfile, adminfile)
{
package_changes => "individual";
package_list_command => "/usr/bin/pkginfo -l";
package_multiline_start    =>  "\s*PKGINST:\s+[^\s]+";
package_list_name_regex    => "\s*PKGINST:\s+([^\s]+)";
package_list_version_regex => "\s*VERSION:\s+([^\s]+)";
package_list_arch_regex    => "\s*ARCH:\s+([^\s]+)";
package_installed_regex => "\s*STATUS:\s*(completely|partially)\s+installed.*";
package_name_convention => "$(name)";
package_add_command => "/usr/sbin/pkgadd -n -a /tmp/$(adminfile) -d 
$(spoolfile)";
package_update_command => "/usr/sbin/pkgadd -n -a /tmp/$(adminfile) -d 
$(spoolfile)";
package_delete_command => "/usr/sbin/pkgrm -n -a /tmp/$(adminfile)";
}

_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to