Pysphere имеет проблему с вставкой аннотации после установки vm_mor

Цель моей программы - проанализировать некоторую информацию, возвращенную из базы данных оракула. Затем, когда он анализирует эту информацию, создайте словарь рассылки для вставки данных в vcenter vm.object с использованием модуля pysphere. Тем не менее, в настоящее время я сталкиваюсь с проблемой при попытке сохранить аннотацию для пользовательского набора vm_object, который устанавливается с помощью идентификатора vm_mor. До того, как я просматривал свойства виртуальной машины, он работал правильно, но теперь, когда я пытаюсь найти через VM-mor у меня возникли проблемы, я опубликую, как это работает и как я хочу это сделать, но это не работает.

Вот как это не работает, и код ошибки, который я получаю:

import cx_Oracle
import datetime
from decimal import *
from pysphere import VIServer, MORTypes, VIProperty, VIMor
from pysphere.resources import VimService_services as VI
from pysphere.vi_virtual_machine import VIVirtualMachine
import pickle
import sys
import time

vc = VIServer()
vc.connect(hostname,username,password, trace_file="debug.txt")

properties = ['config.name', 'config.annotation']
licenses_list = []
license_built_list = []

def change_annotation(vm_mor, new_annotation):
    request = VI.ReconfigVM_TaskRequestMsg()
    _this = request.new__this(vm_mor)
    _this.set_attribute_type(vm_mor.get_attribute_type())
    request.set_element__this(_this)

    spec = request.new_spec()
    spec.set_element_annotation(new_annotation)
    request.set_element_spec(spec)
    vc._proxy.ReconfigVM_Task(request)

oracle = cx_Oracle.connect()
cursor = oracle.cursor()
cursor_guestos = oracle.cursor()

select_customer = ( ''' ''')

cursor.execute(select_customer)
for value in cursor:
   licenses_list.append(value)


for index, value in enumerate(licenses_list):
   customer_id = value[0]
   vm_mor = value[1]
   vm_id = value[2]
   license_id = value[3]
   product = value[4]
   guest_os_id = 0

   sql_guest_os = (''' ''')%int(vm_id)
   cursor_guestos.execute(sql_guest_os)

   for guest_os_id in cursor_guestos:
      guest_os_id = guest_os_id[0]

   if licenses_list[index][2] == licenses_list[index+1][2]:     
      license_built_list.append((licenses_list[index][4], licenses_list[index][3]))
      continue     
   else:
      license_built_list.append((licenses_list[index][4], licenses_list[index][3]))       


   pickle_dict = {"license":license_built_list, "customer_id":customer_id, "guest_os":guest_os_id}
   pickle.dump( pickle_dict, open( vm_mor, "wb" ) )
   annotation = vm_mor

   vm_mor_query =  VIMor(str(vm_mor), MORTypes.VirtualMachine)
   try:
      vm = VIVirtualMachine(vc, vm_mor_query)
   except:
      continue
   change_annotation(vm, annotation) #this is where it breaks.

   pickle_dict = {}
   annotation = {}
   vm_mor = {}
   license_built_list=[]




Traceback (most recent call last):
  File "/home/grant/.eclipse/org.eclipse.platform_3.8_155965261/plugins/org.python.pydev_3.4.1.201403181715/pysrc/pydevd.py", line 1844, in <module>
    debugger.run(setup['file'], None, None)
  File "/home/grant/.eclipse/org.eclipse.platform_3.8_155965261/plugins/org.python.pydev_3.4.1.201403181715/pysrc/pydevd.py", line 1372, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/home/grant/workspace/Metering/metering-home/push-annotation-pickle.py", line 96, in <module>
    change_annotation(vm, annotation)
  File "/home/grant/workspace/Metering/metering-home/push-annotation-pickle.py", line 25, in change_annotation
    _this.set_attribute_type(vm_mor.get_attribute_type())
AttributeError: 'VIVirtualMachine' object has no attribute 'get_attribute_type'

Как это работает:

def change_annotation(vm_mor, new_annotation):
    request = VI.ReconfigVM_TaskRequestMsg()
    _this = request.new__this(vm_mor)
    _this.set_attribute_type(vm_mor.get_attribute_type())
    request.set_element__this(_this)

    spec = request.new_spec()
    spec.set_element_annotation(new_annotation)
    request.set_element_spec(spec)
    vc._proxy.ReconfigVM_Task(request)

vc = VIServer()
vc.connect()

properties = ['config.name', 'config.annotation']
vm_mors = []

for vm_mor_sql in cursor:
   vm_mors.append(vm_mor_sql[0])


for vc_vm in vc._retrieve_properties_traversal(property_names=properties, obj_type='VirtualMachine'):
   vm_mor = vc_vm.Obj
   if vm_mor in vm_mors:
      vm = dict()
      print vm_mor,
      try:
         for vm_prop in vc_vm.PropSet:
            vm[vm_prop.Name] = vm_prop.Val
      except AttributeError:
         print 'missing properties'
         continue
      try:
         change_annotation(vm_mor, 'test insert')
      except:
         continue

Любая помощь будет оценена.

0 ответов

Другие вопросы по тегам