Trying to use a facter information in manifest.

55 views
Skip to first unread message

JGonza1

unread,
Dec 27, 2012, 6:12:36 PM12/27/12
to puppet...@googlegroups.com
I am trying to use information that facter gathers on the agent server in the manifest. I am trying to use "domain => dev.com" depending on what domain is I deploy the file. I ran the manifest and it did not give me an error but it did not fdeploy the file. My code is below.
In my files directory for this manifest I have these files
aliases
 
MY init.pp file is the one below
class sendmailnew {
exec { "mail":
     command => "/usr/bin/yum -y install sendmail",
  }
  exec { "restart":
       command => "/etc/init.d/sendmail restart",
  }
    file {
    "/etc/mail/aliases":
      ensure => file,
      source => "puppet:///sendmailnew/aliases",
      owner => root,
      group => root,
      mode => 644;
  }
  exec { "mailaliases":
       command => "/usr/bin/newaliases",
  }
}
class submitcf ($domain) {
      file { submit:
         path => $domain ? {
             default => "/etc/mail/submit.cf",
      },
      ensure => file,
      owner => root,
      group => root,
      mode => 644,
      source => "puppet:///sendmailnew/submit.cf.$domain";
  }
}

Luke Bigum

unread,
Dec 28, 2012, 4:48:06 AM12/28/12
to puppet...@googlegroups.com
On Thursday, December 27, 2012 11:12:36 PM UTC, JGonza1 wrote:
I am trying to use information that facter gathers on the agent server in the manifest. I am trying to use "domain => dev.com" depending on what domain is I deploy the file. I ran the manifest and it did not give me an error but it did not fdeploy the file. My code is below.
In my files directory for this manifest I have these files
aliases
 

What you're trying to do is sensible.

The first thing I do with these sorts of problems is work backwards from the Agent - is the Agent trying to manage this resource? The last run should store a list of classes and resources in these files:

$ grep submit /var/lib/puppet/state/resources.txt
$ grep submitcf /var/lib/puppet/state/classes.txt

Or you can run the Agent with --evaltrace and it will print out each resource it tries to manage - check if submit.cf scrolls past:

$ puppet agent --test --evaltrace

If submit.cf is not there, then the Puppet Master does not think that your node should be managing those resources and the problem is in manifest compilation. Make sure this node's definition is declaring the correct submitcf classes.

If you want to, you can run a catalog compilation in debug mode. It won't help you with this specific problem but it's useful to know:

$ puppet master --compile <node name> --debug

This can be a bit complicated to read as you'll get a deluge of debug messages while the catalog is being compiled, then a big dump of JSON which is the catalog itself.

Lastly, I would rewrite your classes below like this:

class sendmailnew {
  package { "sendmail":
    ensure => installed,
    notify  => Service["sendmail"],
  }

  service { "sendmail":
    ensure => running,
    enable => true,
    has_restart => true,
    has_status => true,
    require => [ Package["sendmail"], File["/etc/mail/submit.cf"], ],
  }

  file { "/etc/mail/aliases":
      ensure => file,
      source => "puppet:///modules/sendmailnew/aliases",

      owner => root,
      group => root,
      mode => 644;
      notify => Exec["mailaliases"],
  }

  exec { "mailaliases":
       command => "/usr/bin/newaliases",
       refreshonly => true,
       notify => Service["sendmail"],
  }

    file { "/etc/mail/submit.cf",

      ensure => file,
      owner => root,
      group => root,
      mode => 644,
      source => "puppet:///modules/sendmailnew/submit.cf.$domain";
      require => Package["sendmail"],
      notify => Service["sendmail"],
    }
  }

Have a look at the differences and if you have any questions, please ask.

HTH,

-Luke

Keiran Sweet

unread,
Dec 28, 2012, 5:07:05 AM12/28/12
to puppet...@googlegroups.com
Hi There,
Luke beat me to the punch, but I'd already typed this up so I figured I'd send it anyway.

You are going about some of these tasks the wrong way a little, and you should probably have a read of the following:
* Pro Puppet - James Turnbull & Jeffrey McCune
* The Puppet cookbook - http://puppetcookbook.com/

Using the package -> config -> service approach, your puppet code should be similar to the following in your module.


class sendmailnew {


package { sendmail :
  ensure => installed,
}


file { "/etc/mail/aliases":
ensure => file,
source => "puppet:///sendmailnew/aliases",
owner  => root,
      group  => root,
mode   => 644,
notify => Exec[mailaliases],
}

exec { 'mailaliases':
command => '/usr/bin/newaliases',
              }


file { '/etc/mail/submit.cf' :
ensure => file,
owner => root,
       group => root,
       mode => 644,
source => [ "puppet:///sendmailnew/submit.cf.${::domain}",
'puppet:///sendmailnew/submit.cf',
],
notify => Service[sendmail],
}
service { sendmail : 
ensure => running,
enable => true,
require => [ Package[sendmail] , File['/etc/mail/submit.cf'] ],
}


}


Once you have setup your module, you need to apply the module's classes to the node in question.
This can be done in your site.pp file similar to the following:

node 'servername' {

include sendmailnew

}

I hope this helps.

K




On Thursday, December 27, 2012 11:12:36 PM UTC, JGonza1 wrote:
Reply all
Reply to author
Forward
0 new messages