- Puppet 3 Cookbook
- John Arundel
- 401字
- 2021-04-09 23:52:25
Writing a papply script
We'd like to make it as quick and easy as possible to apply Puppet on a machine, so I usually write a little script that wraps the puppet apply
command with the parameters it needs. And to deploy the script where it's needed, what better tool than Puppet itself?
How to do it...
Follow these steps:
- In your Puppet repo, create the directories needed for a
puppet
module:ubuntu@cookbook:~/puppet$ mkdir modules ubuntu@cookbook:~/puppet$ mkdir modules/puppet ubuntu@cookbook:~/puppet$ mkdir modules/puppet/manifests ubuntu@cookbook:~/puppet$ mkdir modules/puppet/files
- Create the file
modules/puppet/files/papply.sh
with the following contents (change the path/home/ubuntu/puppet
to where your Puppet repo is located). Thesudo puppet apply
command should all be on one line:#!/bin/sh sudo puppet apply /home/ubuntu/puppet/manifests/site.pp --modulepath=/home/ubuntu/puppet/modules/ $*
- Create the file
modules/puppet/manifests/init.pp
with the following contents:class puppet { file { '/usr/local/bin/papply': source => 'puppet:///modules/puppet/papply.sh', mode => '0755', } }
- Modify your
manifests/nodes.pp
file as follows:node 'cookbook' { include puppet }
- Apply your changes:
ubuntu@cookbook:~/puppet$ sudo puppet apply manifests/site.pp --modulepath=/home/ubuntu/puppet/modules Notice: /Stage[main]/Puppet/File[/usr/local/bin/papply] /ensure: defined content as '{md5} 171896840d39664c00909eb8cf47a53c' Notice: Finished catalog run in 0.07 seconds
- Test that the script works:
ubuntu@cookbook:~/puppet$ papply Notice: Finished catalog run in 0.07 seconds
Now whenever you need to run Puppet, you can simply run papply
. In future, when we apply Puppet changes, I'll ask you to run papply
instead of the full puppet apply
command.
How it works...
As you've seen, to run Puppet on a machine and apply a specified manifest file, we use the puppet
apply
command:
puppet apply manifests/site.pp
When you're using modules (such as the puppet module we just created) you also need to tell Puppet where to search for modules, using the modulepath
argument:
puppet apply manifests/nodes.pp -- modulepath=/home/ubuntu/puppet/modules
In order to run Puppet with the root privileges it needs, we have to put sudo
before everything:
sudo puppet apply manifests/nodes.pp -- modulepath=/home/ubuntu/puppet/modules
Finally, any additional arguments passed to papply
will be passed through to Puppet itself, by adding the $*
parameter:
sudo puppet apply manifests/nodes.pp -- modulepath=/home/ubuntu/puppet/modules $*
That's a lot of typing, so putting this in a script makes sense. We've added a Puppet file
resource that will deploy the script to /usr/local/bin
and make it executable:
file { '/usr/local/bin/papply': source => 'puppet:///modules/puppet/papply.sh', mode => '0755', }
Finally, we include the puppet
module in our node declaration for cookbook
:
node 'cookbook' { include puppet }
You can do the same for any other nodes managed by Puppet.
- Painter 現代服裝效果圖表現技法
- IBM Cognos 8 Report Studio Cookbook
- 中文版Illustrator CC實用教程
- Lightroom Classic完全自學一本通
- 中文版Maya 2022完全自學教程
- Unity Game Development Essentials
- BIM與Unity 3D開發實例詳解
- 無師自通AutoCAD:中文版室內設計
- PyTorch深度學習簡明實戰
- 中文版Rhino 5.0完全自學教程(第3版)
- Capture One 22 Pro高級實戰教程
- 3dsMax 2018動畫制作基礎教程(第4版)
- 用Multisim玩轉電路仿真
- 構筑敏捷的開發團隊:微軟Visual Studio 2010實戰兵法
- Python氣象應用編程