Perfect.  That worked.

The other problem appears to have been comments getting parsed as part of the 
packages command!


Here is what failed:

packages:
  debian::
    bind9 
      version=1\:9.5.1.dfsg.P2-1
      cmp=eq
      define=bind_installed
      elsedefine=bind_not_installed
      #version="0:9.3.4"
      #version="1:9.5.1.dfsg.P2-1"
      #version=1
      #version=1:9.5.1.dfsg.P2-1
      #version=9.3.4
      #version=9.5.1


And here is what worked:

packages:
  debian::
    bind9 
      version=1\:9.5.1.dfsg.P2-1
      cmp=ge
      define=bind_installed
      elsedefine=bind_not_installed

# version="0:9.3.4"
# version="1:9.5.1.dfsg.P2-1"
# version=1
# version=1:9.5.1.dfsg.P2-1
# version=9.3.4
# version=9.5.1


Before moving the comments I saw messages with version numbers coming from the 
comments.  :-/

Can anyone else confirm?

--
Daniel Ortmann <dortmann31...@yahoo.com>
612-518-3147 m, 651-455-1442 h, dortmann31415 Skype
Key fingerprint = 2605 DFA4 A828 F840 9EBF  C3C4 20EB F2C7 ED34 E8B4



On Mon April 27 12:54:28 pm Eric Searcy wrote:
Daniel Ortmann wrote:
> Hello,
> 
> Am I the only one having problems with package versions not being 
recognized?
> I am running the recent jaunty ubuntu with the following bind9 installed as 
> reported by dpkg --list bind9:
> 1:9.5.1.dfsg.P2-1
> 
> Cfengine2 has a problem recognizing that bind9 is installed.  The system 
> architecture is x86_64 (i.e. Core2 Duo).
> 
> I am running configurations modified from Nate Campi and Kirk Bauer's recent 
> excellent book "Automating Linux and Unix System Administration".
> 
> Note that DefaultPkgMgr = ( dpkg ) as in the book.
> 
> I have tried the variations on the following packages section, including no 
> version as well as all the other versions listed here and "ge" and "eq".
> 
> packages:
>     debian::
>         bind9 
>             #version=1:9.5.1.dfsg.P2-1
>             #version="1:9.5.1.dfsg.P2-1"
>             version=9.3.4

I suspect this is a cf parsing issue rather than something going awry in
the package.c routine.  The test that is done is based on the string in
the "Installed:" portion of "apt-cache policy pkgname."  If it matches
exactly your version=, then cmp=le, cmp=ge, and cmp=eq will match.  If
the string doesn't match (aside from the "(none)" case) it uses "dpkg
--compare-versions INSTALLEDVER {gt|lt} CFVER" to determine comparison.

So ...

There might be an issue with the colon here, which in some cases you
need to escape (like in shellcommands).  So maybe:

version=1\:9.5.1.dfsg.P2-1

Unfortunately DPKGPackageCheck() never verbosely outputs the version
asked for, but you can find it in the debug promise output.

Here's a snippet from `cfagent -qdn -j packages':

> PROMISED PACKAGE CHECKS
> 
> ExpandVarstring( httpd.x86_64 )
> Add |httpd.x86_64| to str, waiting at ||
> Returning varstring (httpd.x86_64)
> Package "httpd.x86_64" promises
>  Search constraint body:
>    Will have version ge 2.2.3-11.el5_2.centos.4
>  Behaviour constraint body:
>    Promise to install package
>    Using Package database: rpm
>    IfElapsed=0, ExpireAfter=120
>    Define  if matches
>    ElseDefine  if no match
>    Rule from /var/cfengine/inputs/httpd at/before line 11

What do you have in there under "search constraint body" when you have
version=1:9.5.1.dfsg.P2-1, and does using a backslash help?

Eric


Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
Bug-cfengine mailing list
Bug-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/bug-cfengine

Reply via email to