2016-04-14 13 views
0

Ich bin neu bei der Verwendung von Marionette, und haben einen Master-und Agent-Server eingerichtet. Ich habe Schwierigkeiten, herauszufinden, wie man ein Python-Skript auf dem Agentenserver ausführt.Ausführen eines Python-Skripts auf Marionette

Ich habe die Schnellstartanleitung befolgt und nach einer Antwort gesucht, aber ich kann keine klare Erklärung finden.

Derzeit meine site.pp hat:

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

die init.pp in Manifest-Ordner des pythontest hat:

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

Beide sind mit Ubuntu 15.04

Bisher Hallo Welt wird angezeigt und das Python-Modul wird installiert (https://forge.puppet.com/stankevich/python).

ich den Fehler:

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 

Ich glaube, ich kann nicht einfach exec setzen: Python Pfadnamen, aber einige Google-Suchen finden einige Leute mit dieser Methode.

Antwort

-1

Ich habe es herausgefunden!

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

Ich habe die/vor/etc vermisst. Änderungen wurden vorgenommen, die ersten beiden Dateibefehle erstellen ein Verzeichnis und kopieren dann die Datei selbst mit source => puppet: ///

Zuletzt benötigte mich die exec, um herauszufinden, wo Python auf dem Puppet-Agenten installiert war und diese benutzte als der Befehl, daher der/usr/bin/python.

Gibt mir einen Hinweis:/Bühne [main]/Pythontest/Exec [pythontestprint]/returns: erfolgreich ausgeführt.

Hinzufügen eines Logoutput => True, gibt mir die Ausgabe, die ich erwartet hatte.

1

Besser noch Ihre Abhängigkeiten angeben.

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

auch unklar, warum Sie versuchen, Puppet eigenen Dateien (in /etc/puppetlabs/code mit Puppet zu verwalten

+0

Nun, ich bin völlig neu für Figuren- und versuchen, um ein Python - Skript auf dem Agenten auszuführen. Gibt es einen besseren Weg? Ich dachte mir, du kopierst das Skript und dann rennst du es. Oder sollte ich es irgendwo anders speichern? – kckaiwei

+1

Schau dir das an, wie du das bekommen sollst Code auf den Puppet Master selbst. Puppet selbst sollte die Dateien normalerweise nicht unter/etc/puppetlabs verwalten https://docs.puppet.com/pe/latest/cmgmt_managi ng_code.html –

+0

Hmm, hab es. Ja, einige Tutorials, denen ich gefolgt bin, haben Git benutzt, um es zu ziehen. Hier sind es Python-Pakete, die mit diesem Skript getestet werden müssen. Wäre es immer noch besser, mit git zu gehen, oder okay, dem Agenten nur zu sagen, dass er pip install aufrufen soll? Ich werde in den Code-Manager schauen, sehen, was besser wäre zu verwenden. Vielen Dank! – kckaiwei