2017-05-19 95 views
0

我正在尝试Luigi和Openstack。从主体调用这个类时,我遇到了问题。我仍然在学习Python,但是我真的不知道错误。<Class>对象没有属性

错误: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.servers = self.nova.servers.list()在run()函数。

+0

我在输出函数 –

+0

内部打印(self.servers)时出错。在luigi中,首先运行output()以检查输出是否已经存在,以便在这种情况下不会执行任务run()。 – MattMcKnight

+0

@MattMcKnight但我首先打电话给luigi.run。据我了解,不应该先luigi.run触发,然后输出功能?或者,luigi首先检查输出,看看输出是否已经存在,在这种情况下,它不会打扰跑步功能。 –