[chef] Re: Re: RE: How to check whether a package is installed ?


Chronological Thread 
  • From: Noah Kantrowitz < >
  • To:
  • Subject: [chef] Re: Re: RE: How to check whether a package is installed ?
  • Date: Fri, 11 Oct 2013 22:48:41 -0700

Instead of your example you could do it idemopotently and asset the desired 
state. Something more like

if node['should_mysrv']
  package 'mypkg' do
    action :install
  end

  service 'mysvr' do
    action [:enable, :start]
  end

  ruby_block do
    code do
      do_work
    end
  end
else
  package 'mypkg' do
    action :remove
  end

  service 'mysvr' do
    action [:disable, :stop]
  end
end

Rather than reacting to state, that is enforcing and updating state.

--Noah

On Oct 11, 2013, at 3:27 AM, Hui Hu 
< >
 wrote:

> Thanks Kevin.  Scenario 2 is what I want.  How to use Ohai automatic 
> attribute to check whether a pacakge is installed or a service is running ? 
>  
> 
> What I want is some code like this :
> 
> do-work if package('mypkg').installed? 
> do-work if service('mysvr').running? 
> 
> Thanks
> Jesse Hu,  Project Serengeti
> 
> 
> 2013/10/10 Kevin Keane Subscription 
> < >
> What exactly are you trying to accomplish? There are two different 
> scenarios I can think of, and you can address them in two different ways.
> 
> Scenario 1: you want to install MySQL, and then perform another action. In 
> that case, you would simply use the package resource, which would then 
> notify your execute resource. In that case, your actions will only execute 
> once right after the package gets installed.
> Scenario 2: you want to execute your action only on those servers that 
> already have MySQL installed. In this case, the generic solution would be 
> to use an automatic attribute that Chef automatically populates at the 
> beginning of the chef run (actually, Ohai does the populating). In that 
> case, your actions will be executed on every single Chef run.
> The first scenario is probably closer to what Chef is intended for. The 
> second scenario means that your action isn't idempotent as Chef expects.
> 
> 
> Kevin Keane
> 
> The NetTech
> 
> 760-721-8339
> 
> http://www.4nettech.com
> 
> Our values: Privacy, Liberty, Justice
> 
> See https://www.4nettech.com/corp/the-nettech-values.html
> 
> 
> 
> 
> -----Original message-----
> From: Hui Hu 
> < >
> Sent: Thursday 10th October 2013 0:17
> To: 
> 
> Subject: [chef] How to check whether a package is installed ?
> 
> Hi Chef,
> 
> Is there a simple chef way to check whether a package is installed or a 
> service is running ?
> 
> For example, I want to write some code like this :
> 
> do-work if package('mypkg').installed? 
> do-work if service('mysvr').running? 
> 
> I know we can do it by the code below, but it's bind to the specific 
> platform. What I need is a platform independent way.
> 
> execute "..." do
>   only_if "rpm -q mypkg"
>   only_if "service mysvr status"
> end
> 
> Thanks
> Jesse Hu,  Project Serengeti
> 

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail




Archive powered by MHonArc 2.6.16.

§