Manual run with specific class

1,422 views
Skip to first unread message

Nev

unread,
May 16, 2013, 4:38:23 PM5/16/13
to Puppet Users
I need to be able to run a certain class ONLY when it is called
manually from the client.

I created a class named "manual" and can run it from the client like
this:

puppet agent --no-daemonize --onetime --verbose --tags=manual

However it only works if that class is specified in the node
definition. I don't want this class to run automatically on the
normal node run with the other classes. Is there any way to do this?

Keith Burdis

unread,
May 16, 2013, 4:47:35 PM5/16/13
to puppet-users

Perhaps try:

# puppet apply --execute 'include manual'

  - Keith

--
You received this message because you are subscribed to the Google Groups "Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users...@googlegroups.com.
To post to this group, send email to puppet...@googlegroups.com.
Visit this group at http://groups.google.com/group/puppet-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Nev

unread,
May 16, 2013, 6:40:03 PM5/16/13
to puppet...@googlegroups.com
thanks, but no:

# puppet apply --execute 'include manual'
Error: Could not find class manual

Keith Burdis

unread,
May 17, 2013, 1:36:35 AM5/17/13
to puppet-users

If you don't want to transfer the class files (and any dependencies) over to the agent host, which is what I was suggesting here then perhaps you can get your desired behaviour using a custom fact.

Assuming that you have facter.dot.d installed (usually from stdlib) do something like:

  $ echo 'run_manual: false' >> /etc/facter/facter.d/custom.yaml

And then check this fact before including your manual class in your node config, something like:

  if $run_manual {
    include manual
  }

Then when you do want to apply the class then change the fact value to true and do a onetime Puppet run.

Details above might be slightly off as I am not in from of a computer but you get the idea.

  - Keith

jcbollinger

unread,
May 17, 2013, 9:01:38 AM5/17/13
to puppet...@googlegroups.com


No, there is no way for the agent to override the master's determination of which classes are applicable to the client node.  This is a security feature, among other things -- otherwise, any node could extract possibly-sensitive information from the master that was not intended for it.  The agent can narrow the classes to be applied, as in your example command, but it cannot expand it.

Now, find a comfortable position, close your eyes, and repeat the Puppet mantra:

Puppet is not a script engine...
Puppet is not a script engine...
Puppet is not a script engine...
Om...

Repeat as needed.


If you nevertheless insist on using Puppet as if it were a script engine, then you need to have all the relevant manifests, files, etc. on the local node, so that you can use "puppet apply" to apply them.


John

Nev

unread,
May 17, 2013, 10:50:14 AM5/17/13
to puppet...@googlegroups.com
Thank you Keith and John.  I realize what I'm doing is an edge case and it is something I will rarely use.  I'll copy the assets to the clients and use the apply function.

Pete Brown

unread,
May 19, 2013, 11:25:08 PM5/19/13
to puppet-users
On 17 May 2013 23:01, jcbollinger <John.Bo...@stjude.org> wrote:


On Thursday, May 16, 2013 3:38:23 PM UTC-5, Nev wrote:
I need to be able to run a certain class ONLY when it is called
manually from the client.

I created a class named "manual" and can run it from the client like
this:

puppet agent --no-daemonize --onetime --verbose --tags=manual

However it only works if that class is specified in the node
definition.  I don't want this class to run automatically on the
normal node run with the other classes.  Is there any way to do this?


No, there is no way for the agent to override the master's determination of which classes are applicable to the client node.  This is a security feature, among other things -- otherwise, any node could extract possibly-sensitive information from the master that was not intended for it.  The agent can narrow the classes to be applied, as in your example command, but it cannot expand it.

Now, find a comfortable position, close your eyes, and repeat the Puppet mantra:

Puppet is not a script engine...
Puppet is not a script engine...
Puppet is not a script engine...
Om...

Repeat as needed.

Excellent manta John.

I may be quoting you in the future.



If you nevertheless insist on using Puppet as if it were a script engine, then you need to have all the relevant manifests, files, etc. on the local node, so that you can use "puppet apply" to apply them.


John

Reply all
Reply to author
Forward
0 new messages