0

パペットの使用は初めてで、マスター サーバーとエージェント サーバーをセットアップしています。エージェント サーバーで 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 パス名をそのまま入れることはできないと思いますが、一部のGoogle検索では、その方法を使用している人が見つかります。

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/codePuppet.

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

/ etcの前の/を見逃しました。変更が加えられました。最初の 2 つのファイル コマンドはディレクトリを作成し、source => puppet:/// を使用してファイル自体をコピーします。

最後に、exec は、python が puppet エージェントにインストールされている場所を見つけて、それをコマンドとして使用するように要求しました。したがって、/usr/bin/python.

/Stage[main]/Pythontest/Exec[pythontestprint]/returns: 正常に実行されました。

logoutput => true を追加すると、期待していた出力が得られます。

于 2016-04-14T18:30:40.553 に答える