Python ist als benutzerdefiniertes Skript für StackStorm Action verfügbar.
Schauen wir uns hier den Ablauf und die Verwendung für die Verwendung von Python-Skripten mit StackStorm an.
Es gibt die folgenden zwei.
Wenn Sie eine statische Konfigurationsdatei verwenden möchten, verwenden Sie eine andere Konfigurationsdatei.
Es wird der Fluss sein.
Lassen Sie uns von hier aus sehen, wie das Python-Skript tatsächlich als Aktion ausgeführt wird.
Es wird davon ausgegangen, dass die Zertifizierung im Voraus abgeschlossen wurde.
Das Folgende ist ein Beispiel für die Authentifizierung mit st2admin
/ st2admin
.
$ export ST2_AUTH_TOKEN=$(st2 auth st2admin -p st2admin -t)
Wie oben erwähnt, müssen Sie zwei Dateien erstellen.
Beide müssen sich unter / opt / stackstorm / packs / <Paketname> / action /
befinden.
Erstellen Sie es hier mit dem Packnamen test
.
metadata
Ich denke, das ist ziemlich leicht zu sehen.
entry_point
schreibt den relativen Pfad von / opt / stackstorm / packs / <Paketname> / action
.
/opt/stackstorm/packs/test/actions/python-test.yaml
---
name: "python-test"
runner_type: "python-script"
description: "this is a sample script of python"
enabled: true
entry_point: "python-test.py"
parameters:
param1:
type: "string"
description: "parameter 1"
required: true
position: 0
param2:
type: "string"
description: "parameter 2"
required: true
position: 1
default: "default parameter 2"
Da dieses Skript von StackStorm aufgerufen wird, gibt es eine Methode selbst, aber es scheint gut zu denken, dass die run
-Methode am Ende aufgerufen wird [^ 1].
/opt/stackstorm/packs/test/actions/python-test.py
import sys
from st2actions.runners.pythonrunner import Action
class PythonTestAction(Action):
def __init__(self, config):
self.config = config
def run(self, param1, param2):
print(param1, param2)
print(self.config["test_param1"])
return (True, param1 + "," + param2)
Ich übergebe config
im Konstruktor, der mit der Konfigurationsdatei funktioniert, die ich als nächstes einführen werde.
/opt/stackstorm/packs/test/config.yaml
test_param1: "static_param1"
Wenn Sie "config.yaml" direkt unter "
Jetzt möchte ich mich bei StackStorm registrieren und ausführen ... aber selbst wenn ich mich so registriere und ausführe, tritt ein Fehler auf. (Die Registrierung ist erfolgreich, aber die Ausführung führt zu einem Fehler.)
Um alle Aktionen zu registrieren, führen Sie zunächst den Befehl st2ctl reload --register-action
aus.
Dies ist ein Befehl, der alle Einstellungen unter "/ opt / stackstorm /
$ sudo st2ctl reload --register-actions
Registering content...[flags = --register-actions]
2016-08-27 14:23:15,107 INFO [-] Connecting to database "st2" @ "0.0.0.0:27017" as user "None".
2016-08-27 14:23:15,376 INFO [-] =========================================================
2016-08-27 14:23:15,376 INFO [-] ############## Registering actions ######################
2016-08-27 14:23:15,376 INFO [-] =========================================================
2016-08-27 14:23:17,147 INFO [-] Registered 63 actions.
##### st2 components status #####
st2actionrunner PID: 4291
st2actionrunner PID: 4293
st2actionrunner PID: 4295
st2actionrunner PID: 4297
st2actionrunner PID: 4299
st2actionrunner PID: 4301
st2actionrunner PID: 4303
st2actionrunner PID: 4305
st2actionrunner PID: 4307
st2actionrunner PID: 4309
st2api PID: 4316
st2api PID: 4810
st2stream PID: 4378
st2stream PID: 4756
st2auth PID: 4388
st2auth PID: 4748
st2garbagecollector PID: 4396
st2notifier PID: 4404
st2resultstracker PID: 4416
st2rulesengine PID: 4428
st2sensorcontainer PID: 4440
st2chatops is not running.
mistral-server PID: 4486
mistral-api PID: 4481
mistral-api PID: 4769
mistral-api PID: 4770
Es ist tatsächlich registriert.
$ st2 action list -p test
+----------------------+------+-----------------------------------+
| ref | pack | description |
+----------------------+------+-----------------------------------+
| test.python-test | test | this is a sample script of python |
+----------------------+------+-----------------------------------+
Wenn Sie nun versuchen, ... auszuführen, tritt ein Fehler auf.
$ st2 run test.python_test param1=p1
..
id: 57c1dbf1e368b912caaf8908
status: failed
parameters:
param1: p1
result:
error: '
Virtual environment (/opt/stackstorm/virtualenvs/test) for pack "test" doesn''t exist. If you haven''t
installed a pack using "packs.install" command, you can create a new virtual environment using
"st2 run packs.setup_virtualenv packs=test" command''
'
traceback: " File "/opt/stackstorm/st2/lib/python2.7/site-packages/st2actions/container/base.py", line 98, in _do_run
(status, result, context) = runner.run(action_params)
File "/opt/stackstorm/st2/lib/python2.7/site-packages/st2actions/runners/pythonrunner.py", line 118, in run
raise Exception(msg)
"
In der Mitte befindet sich eine Meldung, die jedoch bedeutet, dass das Paket "Test" keine Ausführungsumgebung für Python enthält. Es scheint, dass die Ausführungsumgebung für jedes Paket durch "virtualenv" unterteilt ist. Wenn Sie das Paket also richtig aufteilen, können Sie anscheinend die Ausführungsumgebung nicht überladen.
Lassen Sie uns nun die Umgebung gemäß der Nachricht erstellen. Es heißt "Drücke den Befehl so" vorsichtig, also führe ihn genau so aus, wie er ist.
$ sudo st2 run packs.setup_virtualenv packs=test
....
id: 57c1dc6ce368b912caaf890b
status: succeeded
parameters:
packs:
- test
result:
exit_code: 0
result: 'Successfuly set up virtualenv for the following packs: test'
stderr: 'st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Setting up virtualenv for pack "test"
st2.actions.python.SetupVirtualEnvironmentAction: INFO Virtualenv path "/opt/stackstorm/virtualenvs/test" doesn''t exist
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Creating virtualenv for pack "test" in "/opt/stackstorm/virtualenvs/test"
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Creating virtualenv in "/opt/stackstorm/virtualenvs/test" using Python binary "/opt/stackstorm/st2/bin/python"
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Running command "/opt/stackstorm/st2/bin/virtualenv -p /opt/stackstorm/st2/bin/python /opt/stackstorm/virtualenvs/test" to create virtualenv.
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Installing base requirements
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG No pack specific requirements found
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG Virtualenv for pack "test" successfully created in "/opt/stackstorm/virtualenvs/test"
'
stdout: ''
Alle sind INFO und DEBUG, also scheint es kein Problem zu geben. Wie Sie in der letzten Nachricht sehen können, befindet sich in / opt / stackstorm / virtualenvs / test
eine Python-Umgebung.
Nachdem die Registrierung selbst abgeschlossen wurde, versuchen wir es erneut.
$ st2 run test.python-test param1=p1
..
id: 57c1ed13e368b912caaf8962
status: succeeded
parameters:
param1: p1
result:
exit_code: 0
result: p1,default parameter 2
stderr: ''
stdout: '(u''p1'', u''default parameter 2'')
static_param1
'
Wie oben erwähnt, wird das, was von "print" ausgegeben wird, in "stdout" gespeichert, und was von "return" zurückgegeben wird, wird in "result" gespeichert.
Es ist also einfach, aber ich habe gesehen, wie Python-Skripte ausgeführt werden. Möglicherweise gibt es einige Komponenten, aber es sieht so aus, als könnten Sie Python sehr einfach als Workflow ausführen.
Es hat nicht geholfen. Was nicht unterbrochen oder bewegt wird, bewegt sich weiter. Die Änderungen werden ab der nächsten Ausführung übernommen. Daher scheint es nicht nötig zu sein, die bestehenden und funktionierenden zu stoppen.
Es ist Zeit, YAML (Metadaten) zu ändern. Wenn Sie nur das Python-Skript ändern, müssen Sie es nicht neu laden.
Es hat nicht geholfen.
Sie können den Befehl st2ctl reload --register-action
verwenden, um etwas wiederzugeben, das noch nie zuvor existiert hat.
Im Gegenteil, selbst wenn Sie die Datei löschen und den obigen Befehl ausführen, wird sie nicht gelöscht. (Aktion bleibt registriert)
Wenn Sie es löschen möchten, müssen Sie es daher explizit wie folgt löschen.
st2 action delete test.python-test
Wenn es um Python-Skripte geht, können Sie sie anscheinend nur explizit zu den Argumenten hinzufügen oder aus Umgebungsvariablen lesen [^ 3].
Es scheint, dass das Wörterbuch verschiedene Dinge in Form von {{action_context}}
[^ 4] enthält.
Beispielsweise ist WebHook der Benutzer und Workflow die ID der übergeordneten Aktion.
Ich habe es jedoch nicht versucht.
Recommended Posts