Cant get puppet to remove rpm's with circular dependencies

1,184 views
Skip to first unread message

Ross McKerchar

unread,
May 1, 2009, 11:22:45 AM5/1/09
to puppet...@googlegroups.com
Hi Guys,

I'm trying to use puppet to remove some software on all our machines. The two rpm's I'm trying to remove are dependent on each other, that is rpm A requires rpm B and rpm B requires rpm A.

The packages installed fine with puppet via yum (I just asked to install rpm A). Unfortunately puppet is calling "rpm -e", not "yum remove" to remove packages so just asking to remove rpm A causes a dependency error. I tried using "provider => yum" in the package definition but this was ignored.

To get round this I specified both packages: "package { [rpmA,rpmB]: ensure => absent }". Unfortunately this doesn't work either. It appears puppet is running:

for package in packages:
rpm -e package

As opposed to:

rpm -e " ".join(packages)

(no prizes for guessing what language I am most familiar with :)

Consequently I am unable to use puppet to remove this package. I cant easily resort to an exec statement as I am doing the following:

class software{
package{ [a,b]: ensure => present }
}

class software::uninstall{
package{ [a,b]: ensure => absent }
}

As this allows me per-node control over the removal.

I'm using puppet 0.24.8 on rhel5.3.

Can I get round this, or should I file a bug report?

-ross


Sophos Plc, The Pentagon, Abingdon Science Park, Abingdon, OX14 3YP, United Kingdom.
Company Reg No 2096520. VAT Reg No GB 348 3873 20.

Jason Rojas

unread,
May 1, 2009, 11:36:02 AM5/1/09
to puppet...@googlegroups.com
RPM circular dependencies have nothing to do with puppet.
I would rebuild the packages and fix the dependency issue, then the
problem would go away.

If you are not comfortable with rebuilding the packages then my
suggestion would be use an exec for this specific case doing a rpm -e
--allmatches --nodeps --force package1 package2

When you pass the package type an array of names, it iterates over
them instead of using the array values like a glob.

Again, not a puppet issue but a circular dependency issue.
-Jason

Jim Pirzyk

unread,
May 1, 2009, 1:27:10 PM5/1/09
to puppet...@googlegroups.com
I see the same dependency problem with ypbind and yp-tools that come
with Fedora/RHEL/CentOS.

Changing to using an exec seems broken. It prevents you from using
the builtin provider that puppet supplies.

- JimP

> --~--~---------~--~----~------------~-------~--~----~
> You received this message because you are subscribed to the Google
> Groups "Puppet Users" group.
> To post to this group, send email to puppet...@googlegroups.com
> To unsubscribe from this group, send email to puppet-users
> +unsub...@googlegroups.com
> For more options, visit this group at http://groups.google.com/
> group/puppet-users?hl=en
> -~----------~----~----~----~------~----~------~--~---

--- @(#) $Id: dot.signature,v 1.15 2007/12/27 15:06:13 pirzyk Exp $
__o j...@pirzyk.org -------------------------------------------
_'\<,_
(*)/ (*) I'd rather be out biking.

--- @(#) $Id: dot.signature,v 1.15 2007/12/27 15:06:13 pirzyk Exp $
__o j...@pirzyk.org -------------------------------------------
_'\<,_
(*)/ (*) I'd rather be out biking.

PGP.sig

Brandon Evans

unread,
May 1, 2009, 2:14:28 PM5/1/09
to puppet...@googlegroups.com
I'm not sure broken is the right word. The Package type needs a way to
supply options to the underlying provider.

I ran into a similar issue with yum when I needed to install an RPM from
a particular repo (yum --disablerepo=* --enablerepo=rpmforge)

Or install a package from a repo that is disabled by default (yum
--enablrerepo=rpmforge)
I ended up reluctantly creating custom Exec's for both scenarios.

There is a feature request ticket open for the issue I mentioned

http://projects.reductivelabs.com/issues/915


-Brandon
Reply all
Reply to author
Forward
0 new messages