如何为由puppet清单运行的脚本提供输入

时间:2016-02-18 10:01:06

标签: puppet foreman

我已经在我的私人网络中配置了foreman puppet,我已经附加了一个主机。我写了一个这样的模块: 这是hello.pp

class hello{
    file { 'xyz':
            ensure => present,
            owner => 'root',
            group => 'root',
            mode => '0775',
            path => '/tmp/input.py',
            source => 'puppet:///modules/py/input.py',
            notify => Exec['abc'],
        }
exec {'abc':
           command => 'usr/bin/python /tmp/input.py',
           require => File['xyz'],
           refreshonly => true,
           logoutput => true,
    }
}

我的input.py是这样的:

print 'hello'
print 'enter your name: '
x=raw_input()
print x

我正在使用木偶清单调用此文件。该文件被复制到tmp文件夹中的主机,但不要求输入执行。任何想法我怎么能让它工作?我想传递输入。是否可以在该特定模块的工头中传递参数? 这是我在主持人身上的傀儡输出:

Notice: /Stage[main]/Hello/Exec[abc]/returns: hello world
Notice: /Stage[main]/Hello/Exec[abc]/returns: enter your name:
Notice: /Stage[main]/Hello/Exec[abc]/returns: Traceback (most recent call last):
Notice: /Stage[main]/Hello/Exec[abc]/returns: File "tmp/input.py", line 3, in <module>
Notice: /Stage[main]/Hello/Exec[abc]/returns: x=raw_input()
Notice: /Stage[main]/Hello/Exec[abc]/returns: EOFError: EOF when reading a line
Error: /Stage[main]/Hello/Exec[abc]/returns: Failed to call refresh: /usr/bin/python /tmp/input.py returned 1 instaed of one of [0]
Error: /Stage[main]/Hello/Exec[abc]/returns: /usr/bin/python /tmp/input.py returned 1 instaed of one of [0]
Notice: Finished catalog run in 0.86 seconds

任何使其适用于与编码相关的任何解决方法的想法都将是一个很大的帮助。

1 个答案:

答案 0 :(得分:1)

你想要达到什么目的? raw_input是从stdin获取信息的函数,需要提示。有很多方法来存根stdin并给它一个变量,但我认为将脚本更改为以下内容会更容易:

from sys import argv
print 'hello'
print 'enter your name: '
x=argv[1]
print x

然后将您的执行人员更改为:

exec {'abc':
  command => "/usr/bin/python /tmp/input.py ${python_name}",
  require => File['xyz'],
  refreshonly => true,
  logoutput => true,
}

然后在课程中添加一个参数:

class hello (
  $python_name,
) 

然后你可以在Foreman中更改$ python name参数并获得你想要的结果。