2017-05-19 7 views
0

私はLuigiとOpenstackで作業しようとしています。メインからクラスを呼び出す際に、私は問題があります。私はまだPythonを学んでいますが、実際にはエラーは表示されません。<Class>オブジェクトには属性がありません

ERROR:はAttributeError:「OpenstackHelper」オブジェクトが属性「サーバ

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()) 

答えて

1

を持っていない、あなたがエラーを取得している行番号/スタックトレースを伝えることはできますか?

このエラーは、クラスに「サーバー」として定義された変数がないことを意味します。 self.servers = self.nova.servers.list()実行中()関数 - は、だからあなたの出力(あなたがself.serversを印刷している)()関数は、行の前に呼び出さなっていることができます。

+0

出力関数 –

+0

の中でprint(self.servers)でエラーが発生しました。出力が既に存在するかどうかを確認するためにoutput()が最初に実行され、その場合run()が実行されません。 – MattMcKnight

+0

@MattMcKnightしかし、私は最初にluigi.runを呼び出しています。私が理解しているように、luigi.runが最初にトリガしてから関数を出力するべきではないのですか?あるいは、出力が最初に出力をチェックして出力が既に存在するかどうかを確認します。その場合は、実行機能を実行しません。 –

関連する問題