我正在尝试将一个shell脚本从puppet master复制到puppet客户端。
这是我在puppet master上的shell脚本:
cat /etc/puppetlabs/code/environments/production/modules/mymodule/mybash.sh
echo hi hello
我也在/home/myserver/mybash.sh
复制了相同的shell脚本。
这是我在puppet master上的site.pp文件:
cat /etc/puppetlabs/code/environments/production/manifests/site.pp
notify{"Message : I am a message from puppet master": }
class myfile {
file { '/home/myserver/mybash.sh':
mode => '0755',
owner => 'root',
source => 'puppet:///modules/mymodule/mybash.sh',
notify => Exec['run_my_script'],
}
exec { 'run_my_script':
command => '/home/npatel/mybash.sh',
}
}
notify{"Message : new msg test": }
这是木偶代理的输出:
myclient:~$ sudo /opt/puppetlabs/bin/puppet agent --test
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for myclient.test.com
Info: Applying configuration version '1483393652'
Notice: Message : I am a message from puppet master
Notice: /Stage[main]/Main/Notify[Message : I am a message from puppet master]/message: defined 'message' as 'Message : I am a message from puppet master'
Notice: Message : new msg test
Notice: /Stage[main]/Main/Notify[Message : new msg test]/message: defined 'message' as 'Message : new msg test'
Notice: Applied catalog in 0.20 seconds
看起来只有notify{"Message :
的行在木偶代理上执行,而不是在它们之间的行。
我没有看到mybash.sh
被复制到文件部分中提到的/home/my-client
路径中,并且也没有日志来确保文件是否被复制。
我错过了源代码中的任何内容吗?
答案 0 :(得分:2)
在Puppet中,定义一个类并不会自动将它包含在一个配置中,它只是使它可以被声明。定义类类似于在Ruby,Python或C等语言中定义函数。该函数仅在调用时才起作用。同样,Puppet类定义在我们声明它们之前不会产生任何影响。
如果您想实际使用该类,可以使用include
函数声明它。这告诉Puppet评估该类并管理其中声明的所有资源。
除include
函数外,还可以使用类似资源的 class {'myfile':}
语法。
因此,在您的代码中,如果您要声明该类,则必须执行以下操作:
notify{"Message : I am a message from puppet master": }
class myfile {
file { "/home/myserver/mybash.sh":
mode => '0755',
owner => 'root',
source => 'puppet:///modules/mymodule/mybash.sh',
notify => Exec['run_my_script'],
}
exec { 'run_my_script':
command => '/home/npatel/mybash.sh',
}
}
include myfile
notify{"Message : new msg test": }
我还建议您直接将类代码放入模块清单中,然后在site.pp
文件中包含该类:
class myfile {
file { "/home/myserver/mybash.sh":
mode => '0755',
owner => 'root',
source => 'puppet:///modules/mymodule/mybash.sh',
notify => Exec['run_my_script'],
}
exec { 'run_my_script':
command => '/home/npatel/mybash.sh',
}
}
然后在site.pp
:
node default {
include myclass
}