2016-04-14 110 views
0

我不熟悉puppet,並且設置了master和agent服務器。我很難搞清楚如何在代理服務器上運行python腳本。在木偶上運行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

到目前爲止,世界,你好並顯示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 

我覺得我不能只是把高管:蟒蛇路徑名,但一些谷歌搜索發現使用該方法的一些人。

回答

-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:///

最後,exec要求我找到python安裝在puppet代理上的位置,並使用它作爲命令,因此/ usr/bin/python。

給我一個提示:/ Stage [main]/Pythontest/Exec [pythontestprint]/returns:successfully successfully。

添加一個logoutput => true,給我我期待的輸出。

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'], 
    } 
} 

還不清楚爲什麼你要管理木偶自己的文件(在/etc/puppetlabs/code木偶

+0

嗯,我完全陌生的傀儡,試圖在代理上運行python腳本有沒有更好的方法?我想你會複製腳本,然後運行它,或者我應該將它保存在其他地方? – kckaiwei

+1

請看看你如何獲得代碼到Puppet Master上,Puppet本身通常不應該管理/ etc/puppetlabs下的文件。https://docs.puppet.com/pe/latest/cmgmt_managi ng_code.html –

+0

嗯,明白了。是的,我一直在使用的一些教程使用Git來提取它。在這裏,它是一個需要使用這個腳本測試的python包。使用git還是更好,或者只是告訴代理調用pip install? 我會看看代碼管理器,看看有什麼更好的使用。謝謝! – kckaiwei