Ich versuche, an Luigi und Openstack zu arbeiten. Während ich die Klasse hauptsächlich anrufe, habe ich Probleme. Ich lerne immer noch Python, aber ich bekomme den Fehler nicht wirklich.<Class> Objekt hat kein Attribut
ERROR: Attribute: ‚OpenstackHelper‘ Objekt hat kein Attribut ‚Server
password = sys.argv[1]
auth_url = sys.argv[2]
username = sys.argv[3]
tenant_name = sys.argv[4]
class OpenstackHelper(luigi.Task):
def requires(self):
pass
def run(self):
self.keystone_auth = v2.Password(username=username, password=password, tenant_name=tenant_name,
auth_url=auth_url)
self.keystone_session = session.Session(auth=self.keystone_auth)
self.cinder = cinder_client.Client(OS_USERNAME, OS_PASSWORD, OS_TENANT_NAME, OS_AUTH_URL, service_type="volume")
self.volumes = self.cinder.volumes.list()
self.snapshots = self.cinder.volume_snapshots.list()
self.nova = client.Client("2.1", session=self.keystone_session)
self.servers = self.nova.servers.list()
self.kwargs = {
'auth_url': auth_url,
'session': self.keystone_session,
'auth': self.keystone_auth,
'service_type': 'orchestration'}
def output(self):
if sys.argv[5] == 'servers':
print(self.servers)
return MockFile(self.servers, mirror_on_stderr=True)
elif sys.argv[5] == 'volume':
return MockFile(self.volumes, mirror_on_stderr=True)
elif sys.argv[5] == 'cinder':
return MockFile(self.cinder, mirror_on_stderr=True)
if __name__ == '__main__':
luigi.run(["--local-scheduler"],OpenstackHelper())
Ich habe Fehler bei print (self.servers) innerhalb der Ausgabefunktion –
In Luigi, output() wird zuerst ausgeführt, um zu überprüfen, ob die Ausgabe bereits vorhanden ist, so dass die Aufgabe run() in diesem Fall nicht ausgeführt wird. – MattMcKnight
@MattMcKnight Aber ich rufe luigi.run zuerst an. Wie ich es verstehe, sollte luigi.run nicht zuerst ausgelöst werden und dann Funktion ausgeben? Oder ist es, dass Luigi die Ausgabe zuerst überprüft, um zu sehen, ob die Ausgabe bereits existiert, in welchem Fall es nicht stören würde, Lauffunktion zu laufen. –