【问题标题】:Running a python script on puppet在 puppet 上运行 python 脚本
【发布时间】:2016-08-06 09:37:10
【问题描述】:

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

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

目前,我的 site.pp 有:

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

pythontest 的 manifest 文件夹中的 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 路径名,但一些谷歌搜索发现有些人使用该方法。

【问题讨论】:

    标签: python ubuntu server puppet puppet-enterprise


    【解决方案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',
        logoutput => true,
        command => '/usr/bin/python /etc/puppetlabs/code/environments/production/modules/pythontest/print.py',
        }
    }
    

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

    复制文件本身

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

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

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

    【讨论】:

      【解决方案2】:

      最好还是指定你的依赖:

      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。

      【讨论】:

      • 好吧,我对 puppet 完全陌生,并试图在代理上运行 python 脚本。有没有更好的办法?我想你把脚本复制过来,然后运行它。还是我应该把它保存在其他地方?
      • 看看这个,你是如何将代码放到 Puppet Master 上的。 Puppet 本身通常不应该管理 /etc/puppetlabs 下的文件。 docs.puppet.com/pe/latest/cmgmt_managing_code.html
      • 嗯,明白了。是的,我一直在关注的一些教程使用 Git 来提取它。在这里,它是一个需要使用此脚本进行测试的 python 包。使用 git 会更好,还是只告诉代理调用 pip install 更好?我会查看代码管理器,看看用什么会更好。谢谢!
      • 代码管理器需要 Puppet Enterprise,因此如果您使用开源 puppet,git pull 可能是完美的折衷方案。
      猜你喜欢
      • 2017-05-16
      • 2019-08-21
      • 2013-08-11
      • 1970-01-01
      • 2019-09-11
      • 2018-10-30
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多