0

我是使用 puppet 的新手,并且设置了主服务器和代理服务器。我很难弄清楚如何在代理服务器上运行 python 脚本。

我遵循了快速入门指南并一直在寻找答案,但我找不到明确的解释。

目前,我的 site.pp 有:

node default {
    class { 'helloworld':}
    class { 'helloworld::motd':}
    include python
    class { 'pythontest':}
}

pythontest 的清单文件夹中的 init.pp 有:

class pythontest {
    exec {'python etc/puppetlabs/code/environments/production/modules/pythontest/print.py':
    require => File['etc/puppetlabs/code/environments/production/modules/pythontest/print.py']
    }
}

两者都运行 Ubuntu 15.04

到目前为止,Hello world 已显示,并且 python 模块已安装(https://forge.puppet.com/stankevich/python)。

我得到错误:

Error: Failed to apply catalog: Validation of Exec[etc/puppetlabs/code/environments/production/modules/pythontest/print.py] failed: 'etc/puppetlabs/code/environments/production/modules/pythontest/print.py' is not qualified and no path was specified. Please qualify the command or specify a path. at etc/puppetlabs/code/environments/production/pythontest/manifests/init.pp:2

我想我不能只放 exec : python 路径名,但是一些谷歌搜索发现有些人使用这种方法。

4

2 回答 2

1

最好还是指定您的依赖项:

class pythontest {
  file { '/etc/puppetlabs/code/environments/production/modules/pythontest/':
    ensure => directory,
    mode => '0755',
  }
  file { '/etc/puppetlabs/code/environments/production/modules/pythontest/print.py':
    mode => '0644',
    source => 'puppet:///modules/pythontest/print.py',
  }
  exec { 'pythontestprint':
    path => '/usr/bin',
    command => '/usr/bin/python /etc/puppetlabs/code/environments/production/modules/pythontest/print.py',
    require => File['/etc/puppetlabs/code/environments/production/modules/pythontest/print.py'],
  }
}

还不清楚您为什么要尝试管理 Puppet 自己的文件(/etc/puppetlabs/code使用 Puppet.

于 2016-04-16T13:51:17.710 回答
0

弄清楚了!

class pythontest {
    file { '/etc/puppetlabs/code/environments/production/modules/pythontest/':
    ensure => directory,
    mode => '0755',
    }
    file { '/etc/puppetlabs/code/environments/production/modules/pythontest/print.py":
    mode => '0644',
    source => 'puppet:///modules/pythontest/print.py',
    }
    exec { 'pythontestprint':
    path => '/usr/bin',
    logoutput => true,
    command => '/usr/bin/python /etc/puppetlabs/code/environments/production/modules/pythontest/print.py',
    }
}

我错过了/之前的/等。进行了更改,第一个两个文件命令创建一个目录,然后使用 source => puppet:/// 复制文件本身

最后,执行程序要求我找到 puppet 代理上安装 python 的位置并将其用作命令,因此使用 /usr/bin/python.

给我一个通知:/Stage[main]/Pythontest/Exec[pythontestprint]/returns: 成功执行。

添加一个 logoutput => true,给了我我期望的输出。

于 2016-04-14T18:30:40.553 回答