Partage
  • Partager sur Facebook
  • Partager sur Twitter

importer les vm de vmware sur netbox

    20 août 2020 à 14:49:49

    bonjour,

    je dois faire un programme qui permet de facilement importer les vms et leurs donnees de vmware vers netbox.

    pour cela je dois gerer plusieurs exceptions :

    - la vm existe deja dans netbox

    - la vm existe deja dans netbox mais il manque des infos

    - la vm existe deja mais l'ip ou les ip sont pas les memes 

    et pour l'instant ce que j'ai reussie a faire c'est recuperer toutes les info des vm de vmware et de netbox>

    pouvez vous m'aidez s'il vous plait?

    cordialement,

    Victor

    voici si joint les code :

    code vmware : 

    import requests
    import urllib3
    import sys
    import json
    
    from pyVim.connect import SmartConnect, Disconnect
    from pyVmomi import vim
    import argparse
    import atexit
    import getpass
    import ssl
    
    from vmware.vapi.vsphere.client import create_vsphere_client
    from com.vmware.vcenter_client import Host
    from com.vmware.vcenter_client import Datastore
    
    
    def GetArgs():
       """
       Supports the command-line arguments listed below.
       """
       parser = argparse.ArgumentParser(
           description='Process args for retrieving all the Virtual Machines')
       parser.add_argument('-s', '--host', required=True, action='store',
                           help='Remote host to connect to')
       parser.add_argument('-o', '--port', type=int, default=443, action='store',
                           help='Port to connect on')
       parser.add_argument('-u', '--user', required=True, action='store',
                           help='User name to use when connecting to host')
       parser.add_argument('-p', '--password', required=False, action='store',
                           help='Password to use when connecting to host')
                           
       args = parser.parse_args()
       return args
    
    
    def PrintVmInfo(vm, depth=1):
       """
       Print information for a particular virtual machine or recurse into a folder
       or vApp with depth protection
       """
       maxdepth = 10
    
       # if this is a group it will have children. if it does, recurse into them
       # and then return
       if hasattr(vm, 'childEntity'):
          if depth > maxdepth:
             return
          vmList = vm.childEntity
          for c in vmList:
             PrintVmInfo(c, depth+1)
          return
    
       # if this is a vApp, it likely contains child VMs
       # (vApps can nest vApps, but it is hardly a common usecase, so ignore that)
       if isinstance(vm, vim.VirtualApp):
          vmList = vm.vm
          for c in vmList:
             PrintVmInfo(c, depth + 1)
          return
    
       
       summary = vm.summary
       Name = summary.config.name
       Template = summary.config.template
       Path = summary.config.vmPathName
    
       Guest = summary.config.guestFullName
       Guestid = summary.config.guestId
       cpu_reservation = summary.config.cpuReservation
       Fault_Tolerance = summary.config.ftInfo
       inforeboot = summary.config.installBootRequired
       managedby = summary.config.managedBy
       memoryreservation = summary.config.memoryReservation
       memorysize = summary.config.memorySizeMB
       numcpu = summary.config.numCpu
       numethernetcards = summary.config.numEthernetCards
       numvirtualdisks = summary.config.numVirtualDisks
       product = summary.config.product
       instance_uuid = summary.config.instanceUuid
       bios_uuid = summary.config.uuid
    
       annotation = summary.config.annotation
       Powerstate = summary.runtime.powerState
       Question =  summary.runtime.question
    
       if Powerstate != "poweredOff" :
          print("Name       : ", Name)
          print("Template   : ", Template)
          print("Path       : ", Path)
          print("Guest      : ", Guest)
          print("GuestId      : ", Guestid)
    
          print("CPUReservation      : ", cpu_reservation)
          print("FT      : ", Fault_Tolerance)
          print("infoRebootForInstallVM      : ", inforeboot)
          print("managedBy     : ", managedby)
          print("memoryReservation      : ", memoryreservation)
          print("memorySizeMB      : ", memorysize)
          print("numCPU     : ", numcpu)
          print("numethernetcards      : ", numethernetcards)
          print("numvirtualdisk      : ",  numvirtualdisks)
          print("product      : ",  product)
    
          print("Instance UUID : ", instance_uuid)
          print("Bios UUID     : ", bios_uuid)
       
          if annotation != None and annotation != "":
             print("Annotation : ", annotation)
    
       
          print("State      : ", Powerstate)
    
          if summary.guest != None:
             ip = summary.guest.ipAddress
             if ip != None and ip != "":
                print("IP         : ", ip)
        
          if  Question != None:
             print("Question  : ",  Question.text)
          print("")
    
    def main():
       """
       Simple command-line program for listing the virtual machines on a system.
    
       before run the programme enter this commande with your username and the host like this : 
       python your folder destination/your file.py --user 'username' --host 'host' and after that enter your password
       """
       
    
       args = GetArgs()
       if args.password:
          password = args.password
       else:
          password = getpass.getpass(prompt='Enter password for host %s and '
                                            'user %s: ' % (args.host,args.user))
    
       context = None
       if hasattr(ssl, '_create_unverified_context'):
          context = ssl._create_unverified_context()
       si = SmartConnect(host=args.host,
                         user=args.user,
                         pwd=password,
                         port=int(args.port),
                         sslContext=context)
       if not si:
           print("Could not connect to the specified host using specified "
                 "username and password")
           return -1
    
       atexit.register(Disconnect, si)
    
       content = si.RetrieveContent()
       for child in content.rootFolder.childEntity:
          if hasattr(child, 'vmFolder'):
             datacenter = child
             vmFolder = datacenter.vmFolder
             vmList = vmFolder.childEntity
             for vm in vmList:
                PrintVmInfo(vm)
       return 0
    
    # Start program
    if __name__ == "__main__":
       main()

    et voici le code netbox : 

    import json
    import pprint
    import pynetbox
    
    
    from pyVim.connect import SmartConnect, Disconnect
    from pyVmomi import vim
    import atexit
    
    
    import requests
    requests.packages.urllib3.disable_warnings() 
    from requests.adapters import HTTPAdapter
    
    #useless but utiles for separate things 
    def ligneÉtoiles():
       for iCol in range(100):
          print("*", end = "")
       print()
    
    
    
    class TimeoutHTTPAdapter(HTTPAdapter):
        def __init__(self, *args, **kwargs):
            self.timeout = kwargs.get("timeout", 5)
            super().__init__(*args, **kwargs)
    
        def send(self, request, **kwargs):
            kwargs['timeout'] = self.timeout
            return super().send(request, **kwargs)
    
    adapter = TimeoutHTTPAdapter()
    session = requests.Session()
    session.mount("http://", adapter)
    session.mount("https://", adapter)
    session = requests.Session()
    session.headers = {"mycustomheader": "test"}
    session.verify = False
    
    nb = pynetbox.api(url='netboxurl', token='netboxtoken')
    nb.http_session = session
    
    # for create vm in netbox with python
    # nb_create_vm = nb.virtualization.virtual_machines.create(name="Test_victor",status=1,cluster='1')
    
    ligneÉtoiles()
    
    #modifier un vm
    '''
    print("-------------affichage des information de la vm avant modification----------------------\n")
    
    nb_vm2 = nb.virtualization.virtual_machines.get(name="Test_victor2")
    test= nb_vm2.serialize()
    print(json.dumps(test,indent=4))
    
    ligneÉtoiles()
    
    print("-------------affichage des information de la vm dans netbox avec les donnees modifier----------------------\n")
    
    nb_modify_vm = nb_vm2.update({"role": 8,"platform": 1,"tenant": 4,"comments":"ajout d'autre paramettre"})
    
    nb_vm2_modify =nb_vm2 = nb.virtualization.virtual_machines.get(name="Test_victor2")
    
    vm_info2= nb_vm2_modify.serialize()
    
    print(json.dumps(vm_info2,indent=4))
    '''
    
    # get all vm
    '''
    print("--------------------affichage des informations d'une vm--------------------------\n")
    
    nb_vm = nb.virtualization.virtual_machines.get(name='Test_victor2')
    test1= nb_vm.serialize()
    print(json.dumps(test1,indent=4))
    '''
    
    
    def PrintVMInfoNetbox():
    
        print("--------------------affichage des informations des vms de Netbox--------------------------\n")
        i=None
    
        for i in range(1,691): #imaginons que tu en 1000 vms ou moins
            try:
                list_vmNetbox = []
                nb_vm2=nb.virtualization.virtual_machines.get(i)
                # a mettre si besoin : ici on inclut le test sur le statut et on fait l'affichage (ou le stockage)
                test2=nb_vm2.serialize()
                list_vmNetbox.append(json.dumps(test2,indent=4))
            except:
                pass # pass= ne fait rien #print(f"Erreur à l'itération {i}")
    
    PrintVMInfoNetbox()
    ligneÉtoiles()
    
    
    
    

    merci d'avance pour votre aide :)


    -
    Edité par VictorHuguet 21 août 2020 à 7:59:15

    • Partager sur Facebook
    • Partager sur Twitter
      20 août 2020 à 15:19:02

      re ^^
      pour moi c'est une "bête" comparaison entre chacun des sous-éléments des vm en parcourant chacune des listes tour à tour.
      dans l'idéal, il faudrait que les données soient représentées de la même façon.
      #en code non fonctionnel:
      for vm_vmware in list_vm_vmware:
          trouve=false
          for vm_netbox in list_vm_netbox:
              if vm_vmware=vm_netbox:
                  trouve=true
                  #je mets à jour tous les champs dont je dispose (sans se poser de questions, puisqu'il faut faire la mise à jour de toute façon); par exemple (non fonctionnelle mais pour le principe)
                  vm_netbox.ip=vm_vmware.ip
                  #[....]
                  break; # on sort de la boucle for (je ne pense pas que 2 vms aient le même nom)
          if not trouve:
              #j'ajoute la vm_ware sur netbox (je crois que c'est la fonction .create(....)


      Je vois que tu n'as pas modifié mon bout de code pour stocker les vm netbox dans une liste ou autre :( (un list_vm_netbox.add nb_vm2 c'est pas compliqué)
      • Partager sur Facebook
      • Partager sur Twitter
        21 août 2020 à 7:16:14

        ouais mais en gros si la vm existe des deux cotes faut juste que j'ajoute les donnees manquante a celle de netbox sans pour autant supprimer et les donnees de la vm de netbox qui peut contenir d'autre info utile qui ne sont pas dans vmware. 

        mais dans l'idees c'est sa

        je savais comment faire pour les list en java mais en python j'ai pas trop fait du coup j'allais me documenter dessus. 

        j'ai modifier le code peut tu me dire si c'est comme sa qu'on fait:

         for i in range(1,691): #imaginons que tu en 1000 vms ou moins
                try:
                    list_vmNetbox = []
                    nb_vm2=nb.virtualization.virtual_machines.get(i)
                    # a mettre si besoin : ici on inclut le test sur le statut et on fait l'affichage (ou le stockage)
                    test2=nb_vm2.serialize()
                    list_vmNetbox.append(json.dumps(test2,indent=4))
                except:
                    pass # pass= ne fait rien #print(f"Erreur à l'itération {i}")



        minces sa met uniquement les info de la dernier vm et avec des \n. 

        ['{\n    "id": 690,\n    "name": "Test_victor2",\n    "status": 1,\n    "cluster": 1,\n    "role": 8,\n  
          "tenant": 4,\n    "platform": 1,\n    "primary_ip": null,\n    "primary_ip4": null,\n    "primary_ip6": null,\n    "vcpus": null,\n    "memory": null,\n    "disk": null,\n    "comments": "ajout d\'autre paramettre",\n    "tags": [],\n    "custom_fields": {\n        "PFS": null,\n        "Password": null,\n      
          "Operating System": null\n    },\n    "config_context": {},\n    "created": "2020-08-18",\n    "last_updated": "2020-08-18T10:08:16.021874Z"\n}']



        -
        Edité par VictorHuguet 21 août 2020 à 8:19:09

        • Partager sur Facebook
        • Partager sur Twitter
          21 août 2020 à 11:52:19

          normal tu la réinitialises à chaque fois dans la boucle en faisant list_vmNetbox=[]; il faut déplacer cette ligne avant le for.
          pour son contenu, c'est lié au format json, si tu mets test2 dans la liste, ça sera peut-être bon.
          • Partager sur Facebook
          • Partager sur Twitter
            21 août 2020 à 12:14:25

            j'arrive pas a enlever les \n et a remettre en ordre la sa s'affiche mal
            • Partager sur Facebook
            • Partager sur Twitter
              21 août 2020 à 12:29:43

              si test2 ne te convient pas, il te reste nb_vm2 à mettre dans la liste (nb_vm2, test2 et le json.dimps(..) sont 3 représentations du même objet)
              • Partager sur Facebook
              • Partager sur Twitter
                21 août 2020 à 12:48:28

                umfred a écrit:

                si test2 ne te convient pas, il te reste nb_vm2 à mettre dans la liste (nb_vm2, test2 et le json.dimps(..) sont 3 représentations du même objet)


                oui mais si j'enleve le json.dumps sa rend moche en vrai et j'ai besoin qu'il soit sous ce format la pour pouvoir faire la comparaison et copier les donnees dans netbox apres

                -
                Edité par VictorHuguet 21 août 2020 à 14:08:57

                • Partager sur Facebook
                • Partager sur Twitter
                  21 août 2020 à 15:18:24

                  on s'en moque du rendu dans une variable, ne pas confondre l'affichage avec le contenu. Tu as besoin d'avoir ton jeu paramètres\valeurs accès aux données facilement , c'est-à-dire que list_vmnetbox[1]["id"] (ou quelque chose de semblable) te donne l'id de la vm 1.

                  -
                  Edité par umfred 21 août 2020 à 15:18:50

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 août 2020 à 15:40:50

                    hmm oui pas faux. du coup par rapport a sa je fait quoi ? 

                    # vmware 
                       summary = vm.summary
                       Name = summary.config.name
                       Template = summary.config.template
                       Path = summary.config.vmPathName
                    
                       Guest = summary.config.guestFullName
                       Guestid = summary.config.guestId
                       cpu_reservation = summary.config.cpuReservation
                       Fault_Tolerance = summary.config.ftInfo
                       inforeboot = summary.config.installBootRequired
                       managedby = summary.config.managedBy
                       memoryreservation = summary.config.memoryReservation
                       memorysize = summary.config.memorySizeMB
                       numcpu = summary.config.numCpu
                       numethernetcards = summary.config.numEthernetCards
                       numvirtualdisks = summary.config.numVirtualDisks
                       product = summary.config.product
                       instance_uuid = summary.config.instanceUuid
                       bios_uuid = summary.config.uuid
                    
                       annotation = summary.config.annotation
                       Powerstate = summary.runtime.powerState
                       Question =  summary.runtime.question
                    vm_ip_vmware = summary.guest.ipAddress
                    #netbox pynetbox je sais pas la structure pour recuperer exactement les attributs et la doc aide pas vraiment
                    vm_ip_netbox = nb.virtualization.virtual_machines.quelque chose
                    
                    for vm_vmware in list_vm_vmware:
                        trouve=false
                        for vm_netbox in list_vm_netbox:
                            if vm_vmware=vm_netbox:
                                trouve=true
                                #je mets à jour tous les champs dont je dispose (sans se poser de questions, puisqu'il faut faire la mise à jour de toute façon); par exemple (non fonctionnelle mais pour le principe)
                                vm_ip_netbox=vm_ip_vmware
                                #[....]
                                break; # on sort de la boucle for (je ne pense pas que 2 vms aient le même nom)
                        if not trouve:
                            nb_create_vm = nb.virtualization.virtual_machines.create(id=, name="", status=, cluster='', role=, tenant=,platform=,primary_ip=,primary_ip4=,primaryip6=,vcpus=,memory=,disk=,comments="",tags=,custom_fields=,config_context=,created=)

                    -
                    Edité par VictorHuguet 21 août 2020 à 16:09:35

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 août 2020 à 16:32:33

                      pour netbox, tu as la description d'un objet record ici =>https://pynetbox.readthedocs.io/en/latest/response.html#pynetbox.core.response.Recorddonc pour récupérer l'ip par exemple d'une vm récupérée par nb_vm2=nb.virtualization.virtual_machines.get(i) tu dois faire nb_vm2.primary_ip.adress

                      PS: je viens de lire sur la même page, que la fonction serialize() est à éviter et de préférer la méthode python dict(vm) pour sérialiser l'objet et je mettre en json après si besoin

                      -
                      Edité par umfred 21 août 2020 à 16:32:45

                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 août 2020 à 16:43:42

                        je suis aveugle mdr j'avais vue tous sauf sa

                        et pour le serialize j'ai pas vue parcontre

                        attend ta lu sa dans endpoint ?

                        -
                        Edité par VictorHuguet 21 août 2020 à 16:49:37

                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 août 2020 à 19:00:11

                          non sur la page que j'ai indiqué, à la fin de la description de la fonction serialize() (le cadre bleu d'information)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 août 2020 à 9:04:37

                            rebonjour, 

                            il affiche rien maintenant me pas d'erreur

                            import requests
                            import urllib3
                            import sys
                            import json
                            import pynetbox
                             
                             
                            from pyVim.connect import SmartConnect, Disconnect
                            from pyVmomi import vim
                            import argparse
                            import atexit
                            import getpass
                            import ssl
                             
                            from vmware.vapi.vsphere.client import create_vsphere_client
                            from com.vmware.vcenter_client import VM, Host
                            from com.vmware.vcenter_client import Datastore,Cluster
                             
                            import requests
                            requests.packages.urllib3.disable_warnings()
                            from requests.adapters import HTTPAdapter
                             
                             
                            def GetArgs():
                               """
                               Supports the command-line arguments listed below.
                               """
                               parser = argparse.ArgumentParser(
                                   description='Process args for retrieving all the Virtual Machines')
                               parser.add_argument('-s', '--host', required=True, action='store',
                                                   help='Remote host to connect to')
                               parser.add_argument('-o', '--port', type=int, default=443, action='store',
                                                   help='Port to connect on')
                               parser.add_argument('-u', '--user', required=True, action='store',
                                                   help='User name to use when connecting to host')
                               parser.add_argument('-p', '--password', required=False, action='store',
                                                   help='Password to use when connecting to host')
                                                    
                               args = parser.parse_args()
                               return args
                             
                             
                            def PrintVmInfo(vm, depth=1):
                               """
                               Print information for a particular virtual machine or recurse into a folder
                               or vApp with depth protection
                               """
                               maxdepth = 10
                             
                               # if this is a group it will have children. if it does, recurse into them
                               # and then return
                               if hasattr(vm, 'childEntity'):
                                  if depth > maxdepth:
                                     return
                                  vmList = vm.childEntity
                                  for c in vmList:
                                     PrintVmInfo(c, depth+1)
                                  return
                             
                               # if this is a vApp, it likely contains child VMs
                               # (vApps can nest vApps, but it is hardly a common usecase, so ignore that)
                               if isinstance(vm, vim.VirtualApp):
                                  vmList = vm.vm
                                  for c in vmList:
                                     PrintVmInfo(c, depth + 1)
                                  return
                             
                               
                               summary = vm.summary
                               cluster_vmware = summary.runtime.host.parent.name
                               vm_VMwareName = summary.config.name
                               Template = summary.config.template
                               Path = summary.config.vmPathName
                             
                               Guest = summary.config.guestFullName
                               Guestid = summary.config.guestId
                               cpu_reservation = summary.config.cpuReservation
                               Fault_Tolerance = summary.config.ftInfo
                               inforeboot = summary.config.installBootRequired
                               managedby = summary.config.managedBy
                               memoryreservation = summary.config.memoryReservation
                               memorysize = summary.config.memorySizeMB
                               numcpu = summary.config.numCpu
                               numethernetcards = summary.config.numEthernetCards
                               numvirtualdisks = summary.config.numVirtualDisks
                               product = summary.config.product
                               instance_uuid = summary.config.instanceUuid
                               bios_uuid = summary.config.uuid
                             
                               annotation = summary.config.annotation
                               Powerstate = summary.runtime.powerState
                               Question =  summary.runtime.question
                             
                               if Powerstate != "poweredOff" :
                                  print("Name       : ", vm_VMwareName)
                                  print("Template   : ", Template)
                                  print("Path       : ", Path)
                                  print("Guest      : ", Guest)
                                  print("GuestId      : ", Guestid)
                             
                                  print("CPUReservation      : ", cpu_reservation)
                                  print("FT      : ", Fault_Tolerance)
                                  print("infoRebootForInstallVM      : ", inforeboot)
                                  print("managedBy     : ", managedby)
                                  print("memoryReservation      : ", memoryreservation)
                                  print("memorySizeMB      : ", memorysize)
                                  print("numCPU     : ", numcpu)
                                  print("numethernetcards      : ", numethernetcards)
                                  print("numvirtualdisk      : ",  numvirtualdisks)
                                  print("product      : ",  product)
                             
                                  print("Instance UUID : ", instance_uuid)
                                  print("Bios UUID     : ", bios_uuid)
                                
                                  if annotation != None and annotation != "":
                                     print("Annotation : ", annotation)
                             
                                
                                  print("State      : ", Powerstate)
                             
                                  if summary.guest != None:
                                     ip_vm_vmware = summary.guest.ipAddress
                                     if ip_vm_vmware != None and ip_vm_vmware != "":
                                        print("IP         : ", ip_vm_vmware)
                                 
                                  if  Question != None:
                                     print("Question  : ",  Question.text)
                                  print("")
                             
                             
                            class TimeoutHTTPAdapter(HTTPAdapter):
                                def __init__(self, *args, **kwargs):
                                    self.timeout = kwargs.get("timeout", 5)
                                    super().__init__(*args, **kwargs)
                             
                                def send(self, request, **kwargs):
                                    kwargs['timeout'] = self.timeout
                                    return super().send(request, **kwargs)
                             
                            adapter = TimeoutHTTPAdapter()
                            session = requests.Session()
                            session.mount("http://", adapter)
                            session.mount("https://", adapter)
                            session = requests.Session()
                            session.headers = {"mycustomheader": "test"}
                            session.verify = False
                             
                             
                            def PrintVMInfoNetbox():
                             
                                nb = pynetbox.api(url='https://netbox.intranet.local/', token='1ffc8ed8429ae956201f9efa22ae7ee9e450de98')
                                nb.http_session = session
                             
                                print("--------------------affichage des informations des vms de Netbox--------------------------\n")
                                i=None
                                list_vmNetbox = []
                                for i in range(1,1200):
                                    try:
                                        nb_vm=nb.virtualization.virtual_machines.get(i)
                                        # a mettre si besoin : ici on inclut le test sur le statut et on fait l'affichage (ou le stockage)
                                        vm_netbox=dict(nb_vm)
                                        list_vmNetbox.append(vm_netbox)
                                    except:
                                        pass # pass= ne fait rien #print(f"Erreur à l'itération {i}")
                            def main():
                               """
                               Simple command-line program for listing the virtual machines on a system.
                             
                               before run the programme enter this commande with your username and the host like this :
                               python your folder destination/your file.py --user 'username' --host 'host' and after that enter your password
                               """
                                
                             
                               args = GetArgs()
                               if args.password:
                                  password = args.password
                               else:
                                  password = getpass.getpass(prompt='Enter password for host %s and '
                                                                    'user %s: ' % (args.host,args.user))
                             
                               context = None
                               if hasattr(ssl, '_create_unverified_context'):
                                  context = ssl._create_unverified_context()
                               si = SmartConnect(host=args.host,
                                                 user=args.user,
                                                 pwd=password,
                                                 port=int(args.port),
                                                 sslContext=context)
                               if not si:
                                   print("Could not connect to the specified host using specified "
                                         "username and password")
                                   return -1
                             
                               atexit.register(Disconnect, si)
                             
                               content = si.RetrieveContent()
                               for child in content.rootFolder.childEntity:
                                  if hasattr(child, 'vmFolder'):
                                     datacenter = child
                                     vmFolder = datacenter.vmFolder
                                     vmList = vmFolder.childEntity
                                     for vm in vmList:
                                        PrintVmInfo(vm)
                             
                            # code non fonctionnel:
                               for vm_vmware in vmList:
                                    trouve=false
                                    for vm_netbox in list_vm_netbox:
                                        if vm_vmware == vm_netbox:
                                            trouve=true
                                        #je mets à jour tous les champs dont je dispose (sans se poser de questions, puisqu'il faut faire la mise à jour de toute façon); par exemple (non fonctionnelle mais pour le principe)
                                            vm_VMwareName = nb_vm.name
                                            Powerstate = nb_vm.status
                                            cluster_vmware = nb_vm.cluster
                                            ip_vm_vmware = nb_vm.primary_ip.adress
                                            numcpu = nb_vm.vcpus
                                            memorysize = nb_vm.memory
                                          
                                        #[....]
                                            break; # on sort de la boucle for (je ne pense pas que 2 vms aient le même nom)
                                    if not trouve:
                                        nb_create_vm = nb.virtualization.virtual_machines.create( name=vm_VMwareName, status=Powerstate, cluster=cluster_vmware, role=8, tenant='',platform='',primary_ip=ip_vm_vmware,primary_ip4='',primaryip6='',vcpus=numcpu,memory=memorysize,disk='',comments="",tags='',custom_fields='',config_context='',created='')
                             
                                    #j'ajoute la vm_ware sur netbox (avec .create(....)
                            # Start program
                            if __name__ == "__main__":
                               main()
                            

                            -
                            Edité par VictorHuguet 24 août 2020 à 15:14:41

                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 août 2020 à 12:37:54

                              "vmList n'existe pas" mais à quel endroit de ton code (ligne ?) si la ligne indiquée est dans la zone "#code non fonctionel", c'est normal; ce code n'est pas dans ta fonction main (pas le même niveau d'indentation, et après le return du main).
                              la variable vmList (et list_vmNetwox d'ailleurs) n'est définie que dans tes fonctions
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 août 2020 à 13:26:15

                                umfred a écrit:

                                "vmList n'existe pas" mais à quel endroit de ton code (ligne ?) si la ligne indiquée est dans la zone "#code non fonctionel", c'est normal; ce code n'est pas dans ta fonction main (pas le même niveau d'indentation, et après le return du main).
                                la variable vmList (et list_vmNetwox d'ailleurs) n'est définie que dans tes fonctions


                                nan j'ai corriger, la le probleme que j'ai c'est que sa s'execute sans afficher d'erreur mais rien ne se passe dans netbox j'ai modifier mon presendant message.

                                j'ai l'impression que ya des morceau de code inutiles

                                et d'autre que je n'arrive pas a modifier correctement pour que sa face se que je veux

                                -
                                Edité par VictorHuguet 24 août 2020 à 14:03:20

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 août 2020 à 15:04:18

                                  le nouveau code a le même défaut que précédemment, il est après le return 0 de la fonction main; donc il n'est jamais exécuté (return fait sortir de la fonction).
                                  et list_vmNetbox est, comme je l'ai aussi dit, non définie dans main() mais uniquement dans PrintVMInfoNetbox() et au passage, tu as aussi supprimé une bonne partie de ta fonction PrintVMInfo() (celle qui suit le test de PowerState)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 août 2020 à 15:10:56

                                    oui mais si je le defini il sera vide nan et pareil pour vm_vmware ? 

                                    et j'ai oublier de l'enlever le return sorry ^^ alors que je l'avais vue et que tu me la dit x)

                                    bon bin fonctionne pas :/ : 

                                    import requests
                                    import urllib3
                                    import sys
                                    import json
                                    import pynetbox
                                     
                                     
                                    from pyVim.connect import SmartConnect, Disconnect
                                    from pyVmomi import vim
                                    import argparse
                                    import atexit
                                    import getpass
                                    import ssl
                                     
                                    from vmware.vapi.vsphere.client import create_vsphere_client
                                    from com.vmware.vcenter_client import VM, Host
                                    from com.vmware.vcenter_client import Datastore,Cluster
                                     
                                    import requests
                                    requests.packages.urllib3.disable_warnings()
                                    from requests.adapters import HTTPAdapter
                                     
                                     
                                    def GetArgs():
                                       """
                                       Supports the command-line arguments listed below.
                                       """
                                       parser = argparse.ArgumentParser(
                                           description='Process args for retrieving all the Virtual Machines')
                                       parser.add_argument('-s', '--host', required=True, action='store',
                                                           help='Remote host to connect to')
                                       parser.add_argument('-o', '--port', type=int, default=443, action='store',
                                                           help='Port to connect on')
                                       parser.add_argument('-u', '--user', required=True, action='store',
                                                           help='User name to use when connecting to host')
                                       parser.add_argument('-p', '--password', required=False, action='store',
                                                           help='Password to use when connecting to host')
                                                            
                                       args = parser.parse_args()
                                       return args
                                     
                                     
                                    def PrintVmInfo(vm, depth=1):
                                       """
                                       Print information for a particular virtual machine or recurse into a folder
                                       or vApp with depth protection
                                       """
                                       maxdepth = 10
                                     
                                       # if this is a group it will have children. if it does, recurse into them
                                       # and then return
                                       if hasattr(vm, 'childEntity'):
                                          if depth > maxdepth:
                                             return
                                          vmList = vm.childEntity
                                          for c in vmList:
                                             PrintVmInfo(c, depth+1)
                                          return
                                     
                                       # if this is a vApp, it likely contains child VMs
                                       # (vApps can nest vApps, but it is hardly a common usecase, so ignore that)
                                       if isinstance(vm, vim.VirtualApp):
                                          vmList = vm.vm
                                          for c in vmList:
                                             PrintVmInfo(c, depth + 1)
                                          return
                                     
                                       
                                       summary = vm.summary
                                       cluster_vmware = summary.runtime.host.parent.name
                                       vm_VMwareName = summary.config.name
                                       Template = summary.config.template
                                       Path = summary.config.vmPathName
                                     
                                       Guest = summary.config.guestFullName
                                       Guestid = summary.config.guestId
                                       cpu_reservation = summary.config.cpuReservation
                                       Fault_Tolerance = summary.config.ftInfo
                                       inforeboot = summary.config.installBootRequired
                                       managedby = summary.config.managedBy
                                       memoryreservation = summary.config.memoryReservation
                                       memorysize = summary.config.memorySizeMB
                                       numcpu = summary.config.numCpu
                                       numethernetcards = summary.config.numEthernetCards
                                       numvirtualdisks = summary.config.numVirtualDisks
                                       product = summary.config.product
                                       instance_uuid = summary.config.instanceUuid
                                       bios_uuid = summary.config.uuid
                                     
                                       annotation = summary.config.annotation
                                       Powerstate = summary.runtime.powerState
                                       Question =  summary.runtime.question
                                     
                                       if Powerstate != "poweredOff" :
                                          print("Name       : ", vm_VMwareName)
                                          print("Template   : ", Template)
                                          print("Path       : ", Path)
                                          print("Guest      : ", Guest)
                                          print("GuestId      : ", Guestid)
                                     
                                          print("CPUReservation      : ", cpu_reservation)
                                          print("FT      : ", Fault_Tolerance)
                                          print("infoRebootForInstallVM      : ", inforeboot)
                                          print("managedBy     : ", managedby)
                                          print("memoryReservation      : ", memoryreservation)
                                          print("memorySizeMB      : ", memorysize)
                                          print("numCPU     : ", numcpu)
                                          print("numethernetcards      : ", numethernetcards)
                                          print("numvirtualdisk      : ",  numvirtualdisks)
                                          print("product      : ",  product)
                                     
                                          print("Instance UUID : ", instance_uuid)
                                          print("Bios UUID     : ", bios_uuid)
                                        
                                          if annotation != None and annotation != "":
                                             print("Annotation : ", annotation)
                                     
                                        
                                          print("State      : ", Powerstate)
                                     
                                          if summary.guest != None:
                                             ip_vm_vmware = summary.guest.ipAddress
                                             if ip_vm_vmware != None and ip_vm_vmware != "":
                                                print("IP         : ", ip_vm_vmware)
                                         
                                          if  Question != None:
                                             print("Question  : ",  Question.text)
                                          print("")
                                     
                                     
                                    class TimeoutHTTPAdapter(HTTPAdapter):
                                        def __init__(self, *args, **kwargs):
                                            self.timeout = kwargs.get("timeout", 5)
                                            super().__init__(*args, **kwargs)
                                     
                                        def send(self, request, **kwargs):
                                            kwargs['timeout'] = self.timeout
                                            return super().send(request, **kwargs)
                                     
                                    adapter = TimeoutHTTPAdapter()
                                    session = requests.Session()
                                    session.mount("http://", adapter)
                                    session.mount("https://", adapter)
                                    session = requests.Session()
                                    session.headers = {"mycustomheader": "test"}
                                    session.verify = False
                                     
                                     
                                    def PrintVMInfoNetbox():
                                     
                                        nb = pynetbox.api(url='', token='')
                                        nb.http_session = session
                                     
                                        print("--------------------affichage des informations des vms de Netbox--------------------------\n")
                                        i=None
                                        list_vmNetbox = []
                                        for i in range(1,1200):
                                            try:
                                                nb_vm=nb.virtualization.virtual_machines.get(i)
                                                # a mettre si besoin : ici on inclut le test sur le statut et on fait l'affichage (ou le stockage)
                                                vm_netbox=dict(nb_vm)
                                                list_vmNetbox.append(vm_netbox)
                                            except:
                                                pass # pass= ne fait rien #print(f"Erreur à l'itération {i}")
                                    def main():
                                       """
                                       Simple command-line program for listing the virtual machines on a system.
                                     
                                       before run the programme enter this commande with your username and the host like this :
                                       python your folder destination/your file.py --user 'username' --host 'host' and after that enter your password
                                       """
                                        
                                     
                                       args = GetArgs()
                                       if args.password:
                                          password = args.password
                                       else:
                                          password = getpass.getpass(prompt='Enter password for host %s and '
                                                                            'user %s: ' % (args.host,args.user))
                                     
                                       context = None
                                       if hasattr(ssl, '_create_unverified_context'):
                                          context = ssl._create_unverified_context()
                                       si = SmartConnect(host=args.host,
                                                         user=args.user,
                                                         pwd=password,
                                                         port=int(args.port),
                                                         sslContext=context)
                                       if not si:
                                           print("Could not connect to the specified host using specified "
                                                 "username and password")
                                           return -1
                                     
                                       atexit.register(Disconnect, si)
                                     
                                       content = si.RetrieveContent()
                                       for child in content.rootFolder.childEntity:
                                          if hasattr(child, 'vmFolder'):
                                             datacenter = child
                                             vmFolder = datacenter.vmFolder
                                             vmList = vmFolder.childEntity
                                             for vm in vmList:
                                                PrintVmInfo(vm)
                                       PrintVMInfoNetbox()
                                    # code non fonctionnel:
                                       for vm_vmware in vmList:
                                            trouve=false
                                            for vm_netbox in list_vmNetbox:
                                                if vm_vmware == vm_netbox:
                                                    trouve=true
                                                #je mets à jour tous les champs dont je dispose (sans se poser de questions, puisqu'il faut faire la mise à jour de toute façon); par exemple (non fonctionnelle mais pour le principe)
                                                    vm_VMwareName = nb_vm.name
                                                    Powerstate = nb_vm.status
                                                    cluster_vmware = nb_vm.cluster
                                                    ip_vm_vmware = nb_vm.primary_ip.adress
                                                    numcpu = nb_vm.vcpus
                                                    memorysize = nb_vm.memory
                                                  
                                                #[....]
                                                    break; # on sort de la boucle for (je ne pense pas que 2 vms aient le même nom)
                                            if not trouve:
                                                nb_create_vm = nb.virtualization.virtual_machines.create( name=vm_VMwareName, status=Powerstate, cluster=cluster_vmware, role=8, tenant='',platform='',primary_ip=ip_vm_vmware,primary_ip4='',primaryip6='',vcpus=numcpu,memory=memorysize,disk='',comments="",tags='',custom_fields='',config_context='',created='')
                                     
                                            #j'ajoute la vm_ware sur netbox (avec .create(....)
                                    # Start program
                                    if __name__ == "__main__":
                                       main()



                                    -
                                    Edité par VictorHuguet 24 août 2020 à 17:38:27

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 août 2020 à 18:37:37

                                      1-soit tu en fait des variables globales:

                                      tu les initialises dans main, et tu rajoutes en début de tes fonctions PrintVMInfo et PrintVMInfoNetbox la ligne global vmList (et respectivement global list_vmNetbox)

                                      2- tes 2 fonctions retournent les listes (return vmList / return list_vmNetbox) et tu les récupères dans le main (list_vmVmwaret=PrintVMInfo() / list_vmNetbox=PrintVMInfoNetbox())  (même si c'est "étrange" qu'une fonction à la base faite pour de l'affichage retourne quelque chose)

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        25 août 2020 à 7:23:38

                                        umfred a écrit:

                                        1-soit tu en fait des variables globales:

                                        tu les initialises dans main, et tu rajoutes en début de tes fonctions PrintVMInfo et PrintVMInfoNetbox la ligne global vmList (et respectivement global list_vmNetbox)

                                        2- tes 2 fonctions retournent les listes (return vmList / return list_vmNetbox) et tu les récupères dans le main (list_vmVmwaret=PrintVMInfo() / list_vmNetbox=PrintVMInfoNetbox())  (même si c'est "étrange" qu'une fonction à la base faite pour de l'affichage retourne quelque chose)

                                        il me dis que j'ai pas defini vm_VMwareName a cette ligne la :

                                        nb_create_vm = nb.virtualization.virtual_machines.create( name=vm_VMwareName, status=Powerstate, cluster=cluster_vmware, role=8, tenant='',platform='',primary_ip=ip_vm_vmware,primary_ip4='',primaryip6='',vcpus=numcpu,memory=memorysize,disk='',comments="",tags='',custom_fields='',config_context='',created='')

                                        code :

                                        import requests
                                        import urllib3
                                        import sys
                                        import json
                                        import pynetbox
                                         
                                         
                                        from pyVim.connect import SmartConnect, Disconnect
                                        from pyVmomi import vim
                                        import argparse
                                        import atexit
                                        import getpass
                                        import ssl
                                         
                                        from vmware.vapi.vsphere.client import create_vsphere_client
                                        from com.vmware.vcenter_client import VM, Host
                                        from com.vmware.vcenter_client import Datastore,Cluster
                                         
                                        import requests
                                        requests.packages.urllib3.disable_warnings()
                                        from requests.adapters import HTTPAdapter
                                         
                                         
                                        def GetArgs():
                                           """
                                           Supports the command-line arguments listed below.
                                           """
                                           parser = argparse.ArgumentParser(
                                               description='Process args for retrieving all the Virtual Machines')
                                           parser.add_argument('-s', '--host', required=True, action='store',
                                                               help='Remote host to connect to')
                                           parser.add_argument('-o', '--port', type=int, default=443, action='store',
                                                               help='Port to connect on')
                                           parser.add_argument('-u', '--user', required=True, action='store',
                                                               help='User name to use when connecting to host')
                                           parser.add_argument('-p', '--password', required=False, action='store',
                                                               help='Password to use when connecting to host')
                                                                
                                           args = parser.parse_args()
                                           return args
                                         
                                         
                                        def PrintVmInfo(vm, depth=1):
                                           """
                                           Print information for a particular virtual machine or recurse into a folder
                                           or vApp with depth protection
                                           """
                                           maxdepth = 10
                                         
                                           # if this is a group it will have children. if it does, recurse into them
                                           # and then return
                                           if hasattr(vm, 'childEntity'):
                                              if depth > maxdepth:
                                                 return
                                              vmList = vm.childEntity
                                              for c in vmList:
                                                 PrintVmInfo(c, depth+1)
                                              return
                                         
                                           # if this is a vApp, it likely contains child VMs
                                           # (vApps can nest vApps, but it is hardly a common usecase, so ignore that)
                                           if isinstance(vm, vim.VirtualApp):
                                              vmList = vm.vm
                                              for c in vmList:
                                                 PrintVmInfo(c, depth + 1)
                                              return
                                         
                                           
                                        
                                           summary = vm.summary
                                           cluster_vmware = summary.runtime.host.parent.name
                                           vm_VMwareName = summary.config.name
                                           Template = summary.config.template
                                           Path = summary.config.vmPathName
                                         
                                           Guest = summary.config.guestFullName
                                           Guestid = summary.config.guestId
                                           cpu_reservation = summary.config.cpuReservation
                                           Fault_Tolerance = summary.config.ftInfo
                                           inforeboot = summary.config.installBootRequired
                                           managedby = summary.config.managedBy
                                           memoryreservation = summary.config.memoryReservation
                                           memorysize = summary.config.memorySizeMB
                                           nnumcpu = summary.config.numCpu
                                           numethernetcards = summary.config.numEthernetCards
                                           numvirtualdisks = summary.config.numVirtualDisks
                                           product = summary.config.product
                                           instance_uuid = summary.config.instanceUuid
                                           bios_uuid = summary.config.uuid
                                         
                                           annotation = summary.config.annotation
                                           Powerstate = summary.runtime.powerState
                                           Question =  summary.runtime.question
                                        
                                           if Powerstate != "poweredOff" :
                                              print("Name       : ", vm_VMwareName)
                                              print("Template   : ", Template)
                                              print("Path       : ", Path)
                                              print("Guest      : ", Guest)
                                              print("GuestId      : ", Guestid)
                                         
                                              print("CPUReservation      : ", cpu_reservation)
                                              print("FT      : ", Fault_Tolerance)
                                              print("infoRebootForInstallVM      : ", inforeboot)
                                              print("managedBy     : ", managedby)
                                              print("memoryReservation      : ", memoryreservation)
                                              print("memorySizeMB      : ", memorysize)
                                              print("numCPU     : ", numcpu)
                                              print("numethernetcards      : ", numethernetcards)
                                              print("numvirtualdisk      : ",  numvirtualdisks)
                                              print("product      : ",  product)
                                         
                                              print("Instance UUID : ", instance_uuid)
                                              print("Bios UUID     : ", bios_uuid)
                                            
                                              if annotation != None and annotation != "":
                                                 print("Annotation : ", annotation)
                                         
                                            
                                              print("State      : ", Powerstate)
                                         
                                              if summary.guest != None:
                                                 ip_vm_vmware = summary.guest.ipAddress
                                                 if ip_vm_vmware != None and ip_vm_vmware != "":
                                                    print("IP         : ", ip_vm_vmware)
                                             
                                              if  Question != None:
                                                 print("Question  : ",  Question.text)
                                              print("")
                                         
                                         
                                        class TimeoutHTTPAdapter(HTTPAdapter):
                                            def __init__(self, *args, **kwargs):
                                                self.timeout = kwargs.get("timeout", 5)
                                                super().__init__(*args, **kwargs)
                                         
                                            def send(self, request, **kwargs):
                                                kwargs['timeout'] = self.timeout
                                                return super().send(request, **kwargs)
                                         
                                        adapter = TimeoutHTTPAdapter()
                                        session = requests.Session()
                                        session.mount("http://", adapter)
                                        session.mount("https://", adapter)
                                        session = requests.Session()
                                        session.headers = {"mycustomheader": "test"}
                                        session.verify = False
                                         
                                         
                                        def PrintVMInfoNetbox():
                                         
                                            nb = pynetbox.api(url='https://netbox.intranet.local/', token='1ffc8ed8429ae956201f9efa22ae7ee9e450de98')
                                            nb.http_session = session
                                         
                                            print("--------------------affichage des informations des vms de Netbox--------------------------\n")
                                            i=None
                                            list_vmNetbox = []
                                            for i in range(1,1200):
                                                try:
                                                    nb_vm=nb.virtualization.virtual_machines.get(i)
                                                    # a mettre si besoin : ici on inclut le test sur le statut et on fait l'affichage (ou le stockage)
                                                    vm_netbox=dict(nb_vm)
                                                    list_vmNetbox.append(vm_netbox)
                                                except:
                                                    pass # pass= ne fait rien #print(f"Erreur à l'itération {i}")
                                        def main():
                                           """
                                           Simple command-line program for listing the virtual machines on a system.
                                         
                                           before run the programme enter this commande with your username and the host like this :
                                           python your folder destination/your file.py --user 'username' --host 'host' and after that enter your password
                                           """
                                           
                                         
                                           args = GetArgs()
                                           if args.password:
                                              password = args.password
                                           else:
                                              password = getpass.getpass(prompt='Enter password for host %s and '
                                                                                'user %s: ' % (args.host,args.user))
                                         
                                           context = None
                                           if hasattr(ssl, '_create_unverified_context'):
                                              context = ssl._create_unverified_context()
                                           si = SmartConnect(host=args.host,
                                                             user=args.user,
                                                             pwd=password,
                                                             port=int(args.port),
                                                             sslContext=context)
                                           if not si:
                                               print("Could not connect to the specified host using specified "
                                                     "username and password")
                                               return -1
                                        
                                           atexit.register(Disconnect, si)
                                        
                                        
                                        
                                           nb = pynetbox.api(url='https://netbox.intranet.local/', token='1ffc8ed8429ae956201f9efa22ae7ee9e450de98')
                                           nb.http_session = session
                                        
                                           i=None
                                           list_vmNetbox = []
                                           for i in range(1,1200):
                                               try:
                                                   nb_vm=nb.virtualization.virtual_machines.get(i)
                                                   # a mettre si besoin : ici on inclut le test sur le statut et on fait l'affichage (ou le stockage)
                                                   vm_netbox=json.dumps(nb_vm,indent=4)
                                                   list_vmNetbox.append(vm_netbox)
                                               except:
                                                   pass # pass= ne fait rien #print(f"Erreur à l'itération {i}")
                                        
                                        
                                        
                                        
                                           global cluster_vmware
                                           global vm_VMwareName
                                           global memorysize
                                           global nnumcpu
                                           global Powerstate
                                           global ip_vm_vmware
                                        
                                        
                                           content = si.RetrieveContent()
                                           for child in content.rootFolder.childEntity:
                                              if hasattr(child, 'vmFolder'):
                                                 datacenter = child
                                                 vmFolder = datacenter.vmFolder
                                                 vmList = vmFolder.childEntity
                                                 for vm in vmList:
                                                    trouve=False
                                                    for vm_netbox in list_vmNetbox:
                                                        if vm == vm_netbox:
                                                            trouve=True
                                                    #je mets à jour tous les champs dont je dispose (sans se poser de questions, puisqu'il faut faire la mise à jour de toute façon); par exemple (non fonctionnelle mais pour le principe)
                                                            vm_VMwareName = nb_vm.name
                                                            Powerstate = nb_vm.status
                                                            cluster_vmware = nb_vm.cluster
                                                            ip_vm_vmware = nb_vm.primary_ip.adress
                                                            numcpu = nb_vm.vcpus
                                                            memorysize = nb_vm.memory
                                                      
                                                    #[....]
                                                            break; # on sort de la boucle for (je ne pense pas que 2 vms aient le même nom)
                                                    if not trouve:
                                        
                                                        nb_create_vm = nb.virtualization.virtual_machines.create( name=vm_VMwareName, status=Powerstate, cluster=cluster_vmware, role=8, tenant='',platform='',primary_ip=ip_vm_vmware,primary_ip4='',primaryip6='',vcpus=numcpu,memory=memorysize,disk='',comments="",tags='',custom_fields='',config_context='',created='')
                                         
                                                #j'ajoute la vm_ware sur netbox (avec .create(....)
                                        # Start program
                                        if __name__ == "__main__":
                                           main()


                                        -
                                        Edité par VictorHuguet 26 août 2020 à 7:23:15

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          25 août 2020 à 18:47:25

                                          étonnant qu'il n'y a pas d'erreur sur la ligne 225 summary = vm.summary (à ce moment-là, il me semble que vm n'existe pas; et donc toute la suite ne devrait pas marcher ); à moins que ce ne soit une erreur de copier/coller.

                                          Sinon vm_VMwareName n'est défini que si on rentre dans le if vm= vm_netbox (d'ailleurs dans cette partie, je ne comprends pas pourquoi tu utilises nb_vm qui ne correspond à rien à ce moment du code, il faut que tu mettes à jour les champs de la vm netbox par les valeurs de la vm vmware; donc vm_netbox[parametre]=vm.parametre ; il faut que tu trouves la correspondance des paramètres entre les 2 structures de vm (pour ça regarde les docs des 2 api (pynetbox et vmware) )

                                          et nettoies ton code
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            26 août 2020 à 7:18:38

                                            umfred a écrit:

                                            étonnant qu'il n'y a pas d'erreur sur la ligne 225 summary = vm.summary (à ce moment-là, il me semble que vm n'existe pas; et donc toute la suite ne devrait pas marcher ); à moins que ce ne soit une erreur de copier/coller.

                                            Sinon vm_VMwareName n'est défini que si on rentre dans le if vm= vm_netbox (d'ailleurs dans cette partie, je ne comprends pas pourquoi tu utilises nb_vm qui ne correspond à rien à ce moment du code, il faut que tu mettes à jour les champs de la vm netbox par les valeurs de la vm vmware; donc vm_netbox[parametre]=vm.parametre ; il faut que tu trouves la correspondance des paramètres entre les 2 structures de vm (pour ça regarde les docs des 2 api (pynetbox et vmware) )

                                            et nettoies ton code

                                            bon bin apres modification x) j'ai sa comme erreur : pynetbox.core.query.RequestError: The request failed with code 500 Internal Server Error but more specific details were not returned in json. Check the NetBox Logs or investigate this exception's error attribute.

                                            import requests
                                            import urllib3
                                            import sys
                                            import json
                                            import pynetbox
                                             
                                             
                                            from pyVim.connect import SmartConnect, Disconnect
                                            from pyVmomi import vim
                                            import argparse
                                            import atexit
                                            import getpass
                                            import ssl
                                             
                                            from vmware.vapi.vsphere.client import create_vsphere_client
                                            from com.vmware.vcenter_client import VM, Host
                                            from com.vmware.vcenter_client import Datastore,Cluster
                                             
                                            import requests
                                            requests.packages.urllib3.disable_warnings()
                                            from requests.adapters import HTTPAdapter
                                             
                                            class TimeoutHTTPAdapter(HTTPAdapter):
                                                def __init__(self, *args, **kwargs):
                                                    self.timeout = kwargs.get("timeout", 5)
                                                    super().__init__(*args, **kwargs)
                                             
                                                def send(self, request, **kwargs):
                                                    kwargs['timeout'] = self.timeout
                                                    return super().send(request, **kwargs)
                                             
                                            adapter = TimeoutHTTPAdapter()
                                            session = requests.Session()
                                            session.mount("http://", adapter)
                                            session.mount("https://", adapter)
                                            session = requests.Session()
                                            session.headers = {"mycustomheader": "test"}
                                            session.verify = False
                                            
                                            def GetArgs():
                                               """
                                               Supports the command-line arguments listed below.
                                               """
                                               parser = argparse.ArgumentParser(
                                                   description='Process args for retrieving all the Virtual Machines')
                                               parser.add_argument('-s', '--host', required=True, action='store',
                                                                   help='Remote host to connect to')
                                               parser.add_argument('-o', '--port', type=int, default=443, action='store',
                                                                   help='Port to connect on')
                                               parser.add_argument('-u', '--user', required=True, action='store',
                                                                   help='User name to use when connecting to host')
                                               parser.add_argument('-p', '--password', required=False, action='store',
                                                                   help='Password to use when connecting to host')
                                                                    
                                               args = parser.parse_args()
                                               return args
                                            
                                               
                                            def PrintVmInfo(vm, depth=1):
                                               """
                                               Print information for a particular virtual machine or recurse into a folder
                                               or vApp with depth protection
                                               """
                                               maxdepth = 10
                                             
                                               # if this is a group it will have children. if it does, recurse into them
                                               # and then return
                                               if hasattr(vm, 'childEntity'):
                                                  if depth > maxdepth:
                                                     return
                                                  vmList = vm.childEntity
                                                  for c in vmList:
                                                     PrintVmInfo(c, depth+1)
                                                  return
                                             
                                               # if this is a vApp, it likely contains child VMs
                                               # (vApps can nest vApps, but it is hardly a common usecase, so ignore that)
                                               if isinstance(vm, vim.VirtualApp):
                                                  vmList = vm.vm
                                                  for c in vmList:
                                                     PrintVmInfo(c, depth + 1)
                                                  return
                                             
                                               
                                            
                                               summary = vm.summary
                                               cluster_vmware = summary.runtime.host.parent.name
                                               vm_VMwareName = summary.config.name
                                               Template = summary.config.template
                                               Path = summary.config.vmPathName
                                             
                                               Guest = summary.config.guestFullName
                                               Guestid = summary.config.guestId
                                               cpu_reservation = summary.config.cpuReservation
                                               Fault_Tolerance = summary.config.ftInfo
                                               inforeboot = summary.config.installBootRequired
                                               managedby = summary.config.managedBy
                                               memoryreservation = summary.config.memoryReservation
                                               memorysize = summary.config.memorySizeMB
                                               numcpu = summary.config.numCpu
                                               numethernetcards = summary.config.numEthernetCards
                                               numvirtualdisks = summary.config.numVirtualDisks
                                               product = summary.config.product
                                               instance_uuid = summary.config.instanceUuid
                                               bios_uuid = summary.config.uuid
                                             
                                               annotation = summary.config.annotation
                                               Powerstate = summary.runtime.powerState
                                               Question =  summary.runtime.question
                                            
                                               if Powerstate != "poweredOff" :
                                                  print("Name       : ", vm_VMwareName)
                                                  print("Template   : ", Template)
                                                  print("Path       : ", Path)
                                                  print("Guest      : ", Guest)
                                                  print("GuestId      : ", Guestid)
                                             
                                                  print("CPUReservation      : ", cpu_reservation)
                                                  print("FT      : ", Fault_Tolerance)
                                                  print("infoRebootForInstallVM      : ", inforeboot)
                                                  print("managedBy     : ", managedby)
                                                  print("memoryReservation      : ", memoryreservation)
                                                  print("memorySizeMB      : ", memorysize)
                                                  print("numCPU     : ", numcpu)
                                                  print("numethernetcards      : ", numethernetcards)
                                                  print("numvirtualdisk      : ",  numvirtualdisks)
                                                  print("product      : ",  product)
                                             
                                                  print("Instance UUID : ", instance_uuid)
                                                  print("Bios UUID     : ", bios_uuid)
                                                
                                                  if annotation != None and annotation != "":
                                                     print("Annotation : ", annotation)
                                             
                                                
                                                  print("State      : ", Powerstate)
                                             
                                                  if summary.guest != None:
                                                     ip_vm_vmware = summary.guest.ipAddress
                                                     if ip_vm_vmware != None and ip_vm_vmware != "":
                                                        print("IP         : ", ip_vm_vmware)
                                                 
                                                  if  Question != None:
                                                     print("Question  : ",  Question.text)
                                                  print("")
                                             
                                            def main():
                                               """
                                               Simple command-line program for listing the virtual machines on a system.
                                             
                                               before run the programme enter this commande with your username and the host like this :
                                               python your folder destination/your file.py --user 'username' --host 'host' and after that enter your password
                                               """
                                               
                                             
                                               args = GetArgs()
                                               if args.password:
                                                  password = args.password
                                               else:
                                                  password = getpass.getpass(prompt='Enter password for host %s and '
                                                                                    'user %s: ' % (args.host,args.user))
                                             
                                               context = None
                                               if hasattr(ssl, '_create_unverified_context'):
                                                  context = ssl._create_unverified_context()
                                               si = SmartConnect(host=args.host,
                                                                 user=args.user,
                                                                 pwd=password,
                                                                 port=int(args.port),
                                                                 sslContext=context)
                                               if not si:
                                                   print("Could not connect to the specified host using specified "
                                                         "username and password")
                                                   return -1
                                            
                                               atexit.register(Disconnect, si)
                                            
                                            
                                            
                                               nb = pynetbox.api(url='https://netbox.intranet.local/', token='1ffc8ed8429ae956201f9efa22ae7ee9e450de98')
                                               nb.http_session = session
                                            
                                               i=None
                                               list_vmNetbox = []
                                               for i in range(1,1200):
                                                   try:
                                                       nb_vm=nb.virtualization.virtual_machines.get(i)
                                                       # a mettre si besoin : ici on inclut le test sur le statut et on fait l'affichage (ou le stockage)
                                                       vm_netbox=json.dumps(nb_vm,indent=4)
                                                       list_vmNetbox.append(vm_netbox)
                                                   except:
                                                       pass # pass= ne fait rien #print(f"Erreur à l'itération {i}")
                                            
                                            
                                            
                                              
                                            
                                               content = si.RetrieveContent()
                                               for child in content.rootFolder.childEntity:
                                                  if hasattr(child, 'vmFolder'):
                                                     datacenter = child
                                                     vmFolder = datacenter.vmFolder
                                                     vmList = vmFolder.childEntity
                                                     for vm in vmList:
                                                        trouve=False
                                                        for vm_netbox in list_vmNetbox:
                                                            if vm == vm_netbox:
                                                                trouve=True
                                                        #je mets à jour tous les champs dont je dispose (sans se poser de questions, puisqu'il faut faire la mise à jour de toute façon); par exemple (non fonctionnelle mais pour le principe)
                                                                vm.summary.config.name = nb.virtualization.virtual_machines.get('name')
                                                                vm.summary.runtime.powerState = nb.virtualization.virtual_machines.get('status')
                                                                vm.summary.runtime.host.parent.name = nb.virtualization.virtual_machines.get('cluster')
                                                                vm.summary.guest.ipAddress = nb.virtualization.virtual_machines.get('primary_ip.adress')
                                                                vm.summary.config.numCpu = nb.virtualization.virtual_machines.get('vcpus')
                                                                vm.summary.config.memorySizeMB = nb.virtualization.virtual_machines.get('memory')
                                                          
                                                        #[....]
                                                                break; # on sort de la boucle for (je ne pense pas que 2 vms aient le même nom)
                                                        if not trouve:
                                            
                                                            nb_create_vm = nb.virtualization.virtual_machines.create( name=vm.summary.config.name, status=vm.summary.runtime.powerState, cluster=vm.summary.runtime.host.parent.name, role=8, tenant='',platform='',primary_ip=vm.summary.guest.ipAddress,primary_ip4='',primaryip6='',vcpus=vm.summary.config.numCpu,memory=vm.summary.config.memorySizeMB,disk='',comments="",tags='',custom_fields='',config_context='',created='')
                                             
                                                    #j'ajoute la vm_ware sur netbox (avec .create(....)
                                            # Start program
                                            if __name__ == "__main__":
                                               main()   





                                            -
                                            Edité par VictorHuguet 26 août 2020 à 14:00:09

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              26 août 2020 à 11:04:59

                                              il ne te reste plus qu'à regarder tes fichiers logs de netbox pour voir la raison du message d'erreur (et sans savoir la ligne de code qui génère cette erreur, difficile d'en dire plus).
                                              Bon courage.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                26 août 2020 à 13:04:58

                                                umfred a écrit:

                                                il ne te reste plus qu'à regarder tes fichiers logs de netbox pour voir la raison du message d'erreur (et sans savoir la ligne de code qui génère cette erreur, difficile d'en dire plus).
                                                Bon courage.


                                                j'ai sa :
                                                Internal Server Error: /api/virtualization/virtual-machines/
                                                Traceback (most recent call last):
                                                  File "/usr/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
                                                    response = get_response(request)
                                                  File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
                                                    response = self.process_exception_by_middleware(e, request)
                                                  File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
                                                    response = wrapped_callback(request, *callback_args, **callback_kwargs)
                                                  File "/usr/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
                                                    return view_func(*args, **kwargs)
                                                  File "/usr/lib/python2.7/site-packages/rest_framework/viewsets.py", line 103, in view
                                                    return self.dispatch(request, *args, **kwargs)
                                                  File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 483, in dispatch
                                                    response = self.handle_exception(exc)
                                                  File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 443, in handle_exception
                                                    self.raise_uncaught_exception(exc)
                                                  File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 480, in dispatch
                                                    response = handler(request, *args, **kwargs)
                                                  File "/usr/lib/python2.7/site-packages/rest_framework/mixins.py", line 20, in create
                                                    serializer.is_valid(raise_exception=True)
                                                  File "/usr/lib/python2.7/site-packages/rest_framework/serializers.py", line 236, in is_valid
                                                    self._validated_data = self.run_validation(self.initial_data)
                                                  File "/usr/lib/python2.7/site-packages/rest_framework/serializers.py", line 434, in run_validation
                                                    value = self.to_internal_value(data)
                                                  File "/usr/lib/python2.7/site-packages/rest_framework/serializers.py", line 464, in to_internal_value
                                                    validated_value = field.run_validation(primitive_value)
                                                  File "/usr/lib/python2.7/site-packages/rest_framework/fields.py", line 523, in run_validation
                                                    value = self.to_internal_value(data)
                                                  File "/var/www/html/netbox.intranet.local/netbox/extras/api/customfields.py", line 29, in to_internal_value
                                                    for field_name, value in data.items():
                                                AttributeError: 'unicode' object has no attribute 'items'
                                                
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  26 août 2020 à 15:43:23

                                                  Je pense que c'est à cause de cette ligne là:

                                                  vm.summary.guest.ipAddress = nb.virtualization.virtual_machines.get('primary_ip.adress')
                                                  Je doute qu'on puisse appeler ce paramètre ainsi; j'aurai plutôt fait:

                                                  vm.summary.guest.ipAddress = nb.virtualization.virtual_machines.get('primary_ip').get('adress')
                                                  (il y a peut-être 2 d à address d'ailleurs ? )

                                                  -
                                                  Edité par umfred 26 août 2020 à 15:45:04

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    26 août 2020 à 16:05:58

                                                    umfred a écrit:

                                                    Je pense que c'est à cause de cette ligne là:

                                                    vm.summary.guest.ipAddress = nb.virtualization.virtual_machines.get('primary_ip.adress')

                                                    Je doute qu'on puisse appeler ce paramètre ainsi; j'aurai plutôt fait:

                                                    vm.summary.guest.ipAddress = nb.virtualization.virtual_machines.get('primary_ip').get('adress')

                                                    (il y a peut-être 2 d à address d'ailleurs ? )

                                                    -
                                                    Edité par umfred il y a 19 minutes

                                                     re avec se code ci dessous j'ai zero erreur mais rien ne se passe dans netbox 

                                                    code :

                                                    import requests
                                                    import urllib3
                                                    import sys
                                                    import json
                                                    import pynetbox
                                                     
                                                     
                                                    from pyVim.connect import SmartConnect, Disconnect
                                                    from pyVmomi import vim
                                                    import argparse
                                                    import atexit
                                                    import getpass
                                                    import ssl
                                                     
                                                    from vmware.vapi.vsphere.client import create_vsphere_client
                                                    from com.vmware.vcenter_client import VM, Host
                                                    from com.vmware.vcenter_client import Datastore,Cluster
                                                     
                                                    import requests
                                                    requests.packages.urllib3.disable_warnings()
                                                    from requests.adapters import HTTPAdapter
                                                     
                                                    class TimeoutHTTPAdapter(HTTPAdapter):
                                                        def __init__(self, *args, **kwargs):
                                                            self.timeout = kwargs.get("timeout", 5)
                                                            super().__init__(*args, **kwargs)
                                                     
                                                        def send(self, request, **kwargs):
                                                            kwargs['timeout'] = self.timeout
                                                            return super().send(request, **kwargs)
                                                     
                                                    adapter = TimeoutHTTPAdapter()
                                                    session = requests.Session()
                                                    session.mount("http://", adapter)
                                                    session.mount("https://", adapter)
                                                    session = requests.Session()
                                                    session.headers = {"mycustomheader": "test"}
                                                    session.verify = False
                                                    
                                                    def GetArgs():
                                                       """
                                                       Supports the command-line arguments listed below.
                                                       """
                                                       parser = argparse.ArgumentParser(
                                                           description='Process args for retrieving all the Virtual Machines')
                                                       parser.add_argument('-s', '--host', required=True, action='store',
                                                                           help='Remote host to connect to')
                                                       parser.add_argument('-o', '--port', type=int, default=443, action='store',
                                                                           help='Port to connect on')
                                                       parser.add_argument('-u', '--user', required=True, action='store',
                                                                           help='User name to use when connecting to host')
                                                       parser.add_argument('-p', '--password', required=False, action='store',
                                                                           help='Password to use when connecting to host')
                                                                            
                                                       args = parser.parse_args()
                                                       return args
                                                    
                                                    def createConnection():
                                                        session = requests.session()
                                                        session.verify = False
                                                        urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
                                                     
                                                        vsphere_client = create_vsphere_client(
                                                            server='10.92.41.30',
                                                            username='v.huguet@corp.omt.lcl',
                                                            password='9F#XB5kJ',
                                                            session=session
                                                        )
                                                     
                                                        return vsphere_client
                                                     
                                                        vsphere_client = createConnection()
                                                    
                                                        vm_cluster_list = []
                                                        clusters = vsphere_client.vcenter.Cluster.list()
                                                        for cluster_summary in clusters:
                                                            hosts = vsphere_client.vcenter.Host.list(Host.FilterSpec(clusters={cluster_summary.cluster}))
                                                            for host_summary in hosts:
                                                                vms = vsphere_client.vcenter.VM.list(VM.FilterSpec(hosts={host_summary.host}))
                                                                for vm in vms:
                                                                    vm_cluster_list.append([cluster_summary.name])
                                                        
                                                        return vm_cluster_list
                                                    
                                                    def PrintVmInfo(vm, depth=1):
                                                       """
                                                       Print information for a particular virtual machine or recurse into a folder
                                                       or vApp with depth protection
                                                       """
                                                       maxdepth = 10
                                                     
                                                       # if this is a group it will have children. if it does, recurse into them
                                                       # and then return
                                                       if hasattr(vm, 'childEntity'):
                                                          if depth > maxdepth:
                                                             return
                                                          vmList = vm.childEntity
                                                          for c in vmList:
                                                             PrintVmInfo(c, depth+1)
                                                          return
                                                     
                                                       # if this is a vApp, it likely contains child VMs
                                                       # (vApps can nest vApps, but it is hardly a common usecase, so ignore that)
                                                       if isinstance(vm, vim.VirtualApp):
                                                          vmList = vm.vm
                                                          for c in vmList:
                                                             PrintVmInfo(c, depth + 1)
                                                          return
                                                     
                                                       
                                                    
                                                       summary = vm.summary
                                                       cluster_vmware = summary.runtime.host.parent.name
                                                       vm_VMwareName = summary.config.name
                                                       Template = summary.config.template
                                                       Path = summary.config.vmPathName
                                                     
                                                       Guest = summary.config.guestFullName
                                                       Guestid = summary.config.guestId
                                                       cpu_reservation = summary.config.cpuReservation
                                                       Fault_Tolerance = summary.config.ftInfo
                                                       inforeboot = summary.config.installBootRequired
                                                       managedby = summary.config.managedBy
                                                       memoryreservation = summary.config.memoryReservation
                                                       memorysize = summary.config.memorySizeMB
                                                       numcpu = summary.config.numCpu
                                                       numethernetcards = summary.config.numEthernetCards
                                                       numvirtualdisks = summary.config.numVirtualDisks
                                                       product = summary.config.product
                                                       instance_uuid = summary.config.instanceUuid
                                                       bios_uuid = summary.config.uuid
                                                     
                                                       annotation = summary.config.annotation
                                                       Powerstate = summary.runtime.powerState
                                                       Question =  summary.runtime.question
                                                    
                                                       if Powerstate != "poweredOff" :
                                                          print("Name       : ", vm_VMwareName)
                                                          print("Template   : ", Template)
                                                          print("Path       : ", Path)
                                                          print("Guest      : ", Guest)
                                                          print("GuestId      : ", Guestid)
                                                     
                                                          print("CPUReservation      : ", cpu_reservation)
                                                          print("FT      : ", Fault_Tolerance)
                                                          print("infoRebootForInstallVM      : ", inforeboot)
                                                          print("managedBy     : ", managedby)
                                                          print("memoryReservation      : ", memoryreservation)
                                                          print("memorySizeMB      : ", memorysize)
                                                          print("numCPU     : ", numcpu)
                                                          print("numethernetcards      : ", numethernetcards)
                                                          print("numvirtualdisk      : ",  numvirtualdisks)
                                                          print("product      : ",  product)
                                                     
                                                          print("Instance UUID : ", instance_uuid)
                                                          print("Bios UUID     : ", bios_uuid)
                                                        
                                                          if annotation != None and annotation != "":
                                                             print("Annotation : ", annotation)
                                                     
                                                        
                                                          print("State      : ", Powerstate)
                                                     
                                                          if summary.guest != None:
                                                             ip_vm_vmware = summary.guest.ipAddress
                                                             if ip_vm_vmware != None and ip_vm_vmware != "":
                                                                print("IP         : ", ip_vm_vmware)
                                                         
                                                          if  Question != None:
                                                             print("Question  : ",  Question.text)
                                                          print("")
                                                     
                                                    def main():
                                                       """
                                                       Simple command-line program for listing the virtual machines on a system.
                                                     
                                                       before run the programme enter this commande with your username and the host like this :
                                                       python your folder destination/your file.py --user 'username' --host 'host' and after that enter your password
                                                       """
                                                       
                                                     
                                                       args = GetArgs()
                                                       if args.password:
                                                          password = args.password
                                                       else:
                                                          password = getpass.getpass(prompt='Enter password for host %s and '
                                                                                            'user %s: ' % (args.host,args.user))
                                                     
                                                       context = None
                                                       if hasattr(ssl, '_create_unverified_context'):
                                                          context = ssl._create_unverified_context()
                                                       si = SmartConnect(host=args.host,
                                                                         user=args.user,
                                                                         pwd=password,
                                                                         port=int(args.port),
                                                                         sslContext=context)
                                                       if not si:
                                                           print("Could not connect to the specified host using specified "
                                                                 "username and password")
                                                           return -1
                                                    
                                                       atexit.register(Disconnect, si)
                                                    
                                                    
                                                    
                                                       nb = pynetbox.api(url='https://netbox.intranet.local/', token='1ffc8ed8429ae956201f9efa22ae7ee9e450de98')
                                                       nb.http_session = session
                                                    
                                                       i=None
                                                       list_vmNetbox = []
                                                       for i in range(1,1001):
                                                           try:
                                                               nb_vm=nb.virtualization.virtual_machines.get(i)
                                                               # a mettre si besoin : ici on inclut le test sur le statut et on fait l'affichage (ou le stockage)
                                                               vm_netbox=json.dumps(nb_vm,indent=4)
                                                               list_vmNetbox.append(vm_netbox)
                                                           except:
                                                               pass # pass= ne fait rien #print(f"Erreur à l'itération {i}")
                                                    
                                                            
                                                    
                                                       vsphere_client = createConnection()
                                                       vm_cluster_list = []
                                                       clusters = vsphere_client.vcenter.Cluster.list()
                                                       for cluster_summary in clusters:
                                                           hosts = vsphere_client.vcenter.Host.list(Host.FilterSpec(clusters={cluster_summary.cluster}))
                                                           for host_summary in hosts:
                                                               vms = vsphere_client.vcenter.VM.list(VM.FilterSpec(hosts={host_summary.host}))
                                                               for vm in vms:
                                                                   vm_cluster_list.append([cluster_summary.name])
                                                        
                                                       return vm_cluster_list
                                                    
                                                       content = si.RetrieveContent()
                                                       for child in content.rootFolder.childEntity:
                                                          if hasattr(child, 'vmFolder'):
                                                             datacenter = child
                                                             vmFolder = datacenter.vmFolder
                                                             vmList = vmFolder.childEntity
                                                             for vm in vmList:
                                                                trouve=False
                                                                for vm_netbox in list_vmNetbox:
                                                                    if vm == vm_netbox:
                                                                        trouve=True
                                                                #je mets à jour tous les champs dont je dispose (sans se poser de questions, puisqu'il faut faire la mise à jour de toute façon); par exemple (non fonctionnelle mais pour le principe)
                                                                        vm.summary.config.name = nb.virtualization.virtual_machines.name
                                                                        vm.summary.runtime.powerState = nb.virtualization.virtual_machines.status
                                                                        cluster_summary.name = nb.virtualization.virtual_machines.cluster
                                                                        vm.summary.guest.ipAddress = nb.virtualization.virtual_machines.primary_ip.address
                                                                        vm.summary.config.numCpu = nb.virtualization.virtual_machines.vcpus
                                                                        vm.summary.config.memorySizeMB = nb.virtualization.virtual_machines.memory
                                                                  
                                                                #[....]
                                                                        break; # on sort de la boucle for (je ne pense pas que 2 vms aient le même nom)
                                                                if not trouve:
                                                    
                                                                    nb_create_vm = nb.virtualization.virtual_machines.create( name=vm.summary.config.name, status=vm.summary.runtime.powerState, cluster= cluster_summary.name, role=8, tenant='',platform='',primary_ip=vm.summary.guest.ipAddress,primary_ip4='',primaryip6='',vcpus=vm.summary.config.numCpu,memory=vm.summary.config.memorySizeMB,disk='',comments="",tags='',custom_fields='',config_context='',created='')
                                                     
                                                            #j'ajoute la vm_ware sur netbox (avec .create(....)
                                                    # Start program
                                                    if __name__ == "__main__":
                                                       main()   

                                                    -
                                                    Edité par VictorHuguet 26 août 2020 à 16:29:32

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      26 août 2020 à 18:00:02

                                                      peut être rajouter un print() dans chacun de tes tests, pour voir si tu y rentres

                                                      (un print("vm=vm_netbox ") et un print ("not trouve") par exemple)

                                                      si tu ne rentres dans aucun, c'est que soit une de tes listes (ou les deux) est vide, soit que tu ne rentres pas dans le 1er if à savoir if hasattr(child,'vmFolder') (tu peut mettre un print() aussi à la suite pour le vérifier)

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        27 août 2020 à 7:44:34

                                                        umfred a écrit:

                                                        peut être rajouter un print() dans chacun de tes tests, pour voir si tu y rentres

                                                        (un print("vm=vm_netbox ") et un print ("not trouve") par exemple)

                                                        si tu ne rentres dans aucun, c'est que soit une de tes listes (ou les deux) est vide, soit que tu ne rentres pas dans le 1er if à savoir if hasattr(child,'vmFolder') (tu peut mettre un print() aussi à la suite pour le vérifier)

                                                        sa veut dire quoi ces erreur la ? 

                                                        erreur : 

                                                        Internal Server Error: /api/virtualization/virtual-machines/689/
                                                        Traceback (most recent call last):
                                                          File "/usr/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
                                                            response = get_response(request)
                                                          File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
                                                            response = self.process_exception_by_middleware(e, request)
                                                          File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
                                                            response = wrapped_callback(request, *callback_args, **callback_kwargs)
                                                          File "/usr/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
                                                            return view_func(*args, **kwargs)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/viewsets.py", line 103, in view
                                                            return self.dispatch(request, *args, **kwargs)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 483, in dispatch
                                                            response = self.handle_exception(exc)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 443, in handle_exception
                                                            self.raise_uncaught_exception(exc)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 480, in dispatch
                                                            response = handler(request, *args, **kwargs)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/mixins.py", line 58, in retrieve
                                                            return Response(serializer.data)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/serializers.py", line 536, in data
                                                            ret = super(Serializer, self).data
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/serializers.py", line 262, in data
                                                            self._data = self.to_representation(self.instance)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/serializers.py", line 503, in to_representation
                                                            ret[field.field_name] = field.to_representation(attribute)
                                                          File "/var/www/html/netbox.intranet.local/netbox/utilities/api.py", line 74, in to_representation
                                                            return {'value': obj, 'label': self._choices[obj]}
                                                        KeyError: 2
                                                        
                                                        Internal Server Error: /api/virtualization/virtual-machines/528/
                                                        Traceback (most recent call last):
                                                          File "/usr/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
                                                            response = get_response(request)
                                                          File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
                                                            response = self.process_exception_by_middleware(e, request)
                                                          File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
                                                            response = wrapped_callback(request, *callback_args, **callback_kwargs)
                                                          File "/usr/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
                                                            return view_func(*args, **kwargs)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/viewsets.py", line 103, in view
                                                            return self.dispatch(request, *args, **kwargs)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 483, in dispatch
                                                            response = self.handle_exception(exc)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 443, in handle_exception
                                                            self.raise_uncaught_exception(exc)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 480, in dispatch
                                                            response = handler(request, *args, **kwargs)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/mixins.py", line 57, in retrieve
                                                            serializer = self.get_serializer(instance)
                                                          File "/var/www/html/netbox.intranet.local/netbox/utilities/api.py", line 193, in get_serializer
                                                            return super(ModelViewSet, self).get_serializer(*args, **kwargs)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/generics.py", line 112, in get_serializer
                                                            return serializer_class(*args, **kwargs)
                                                          File "/var/www/html/netbox.intranet.local/netbox/extras/api/customfields.py", line 123, in __init__
                                                            _populate_custom_fields(self.instance, fields)
                                                          File "/var/www/html/netbox.intranet.local/netbox/extras/api/customfields.py", line 105, in _populate_custom_fields
                                                            custom_fields[cfv.field.name] = CustomFieldChoiceSerializer(cfv.value).data
                                                          File "/var/www/html/netbox.intranet.local/netbox/extras/models.py", line 260, in value
                                                            return self.field.deserialize_value(self.serialized_value)
                                                          File "/var/www/html/netbox.intranet.local/netbox/extras/models.py", line 226, in deserialize_value
                                                            return self.choices.get(pk=int(serialized_value))
                                                        ValueError: invalid literal for int() with base 10: 'AVAYA'
                                                        
                                                        Internal Server Error: /api/virtualization/virtual-machines/520/
                                                        Traceback (most recent call last):
                                                          File "/usr/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
                                                            response = get_response(request)
                                                          File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
                                                            response = self.process_exception_by_middleware(e, request)
                                                          File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
                                                            response = wrapped_callback(request, *callback_args, **callback_kwargs)
                                                          File "/usr/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
                                                            return view_func(*args, **kwargs)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/viewsets.py", line 103, in view
                                                            return self.dispatch(request, *args, **kwargs)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 483, in dispatch
                                                            response = self.handle_exception(exc)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 443, in handle_exception
                                                            self.raise_uncaught_exception(exc)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 480, in dispatch
                                                            response = handler(request, *args, **kwargs)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/mixins.py", line 57, in retrieve
                                                            serializer = self.get_serializer(instance)
                                                          File "/var/www/html/netbox.intranet.local/netbox/utilities/api.py", line 193, in get_serializer
                                                            return super(ModelViewSet, self).get_serializer(*args, **kwargs)
                                                          File "/usr/lib/python2.7/site-packages/rest_framework/generics.py", line 112, in get_serializer
                                                            return serializer_class(*args, **kwargs)
                                                          File "/var/www/html/netbox.intranet.local/netbox/extras/api/customfields.py", line 123, in __init__
                                                            _populate_custom_fields(self.instance, fields)
                                                          File "/var/www/html/netbox.intranet.local/netbox/extras/api/customfields.py", line 105, in _populate_custom_fields
                                                            custom_fields[cfv.field.name] = CustomFieldChoiceSerializer(cfv.value).data
                                                          File "/var/www/html/netbox.intranet.local/netbox/extras/models.py", line 260, in value
                                                            return self.field.deserialize_value(self.serialized_value)
                                                          File "/var/www/html/netbox.intranet.local/netbox/extras/models.py", line 226, in deserialize_value
                                                            return self.choices.get(pk=int(serialized_value))
                                                        ValueError: invalid literal for int() with base 10: 'AVAYA'
                                                        



                                                        -
                                                        Edité par VictorHuguet 27 août 2020 à 14:31:16

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          4 septembre 2020 à 12:45:22

                                                          KeyError 2 veut dire qu'une clé n'est pas présente dans le dictionnaire (en l'occurence, la clé label dans le retour ("return {'value': obj, 'label': self._choices[obj]}) de la fonction "to_representation" du fichier "/var/www/html/netbox.intranet.local/netbox/utilities/api.py" en ligne 74) et ça concerne ici la vm 689

                                                          et ValueError: invalid literal for int() with base 10: 'AVAYA': c'est la même que la dernière fois (enfin une des fois précédentes): c'est que la fonction cherche à convertir en entier le texte 'AVAYA' (qui doit être une valeur de champ pour les vm 520 et 528

                                                          Tu as mis à jour pynetbox depuis ? il y a eu des bugs de corriger

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            12 septembre 2020 à 15:35:44

                                                            nan j'ai pas mis a jour netbox et pour les erreur j'avais compris ce que tu expliquer mais avaya n'est pas une valeur de champs et label est present donc je suis bloquer x)

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            importer les vm de vmware sur netbox

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown