XCP-ng
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Python help

    Scheduled Pinned Locked Moved REST API
    28 Posts 5 Posters 1.0k Views 4 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S Offline
      Studmuffn1134 @TheNorthernLight
      last edited by

      @TheNorthernLight Finally someone gets the reference But what do u think I am doing wrong

      TheNorthernLightT 1 Reply Last reply Reply Quote 0
      • TheNorthernLightT Offline
        TheNorthernLight @Studmuffn1134
        last edited by

        @Studmuffn1134 Sadly, I dont know squat about python, sorry!

        S 1 Reply Last reply Reply Quote 0
        • S Offline
          Studmuffn1134 @TheNorthernLight
          last edited by

          @TheNorthernLight Well could you do it in a language you know and maybe i would be able to convert it>?

          1 Reply Last reply Reply Quote 0
          • G Offline
            Gurve
            last edited by

            Did some "kicking" around in python, I don't python that much so "readers beware"

            How did i figure it out, the french blog from here was useful, but only showed listing methods. I was still very confused as to how to call the vm.stop and which parameters it took.

            Enter xo-cli ❤

            xo-cli uses jsonrpc but is CLi only, but you can get very nice info from it just have to register and call "list-methods". should be available on your xo VM

            xo-cli register http://[yourXO].example.com [yourusername]
            #after registering/authenticating
            xo-cli list-commands | egrep 'vm\.' --color=always
            

            here you will get a nice list of all "methods" in jsonrpc related to vm and a line about vm.stop:

            vm.stop id=<string> [force=<boolean>] [forceShutdownDelay=<number>] [bypassBlockedOperation=<boolean>]

            which was enough information to alter the french guy's (Baron) example into this:

            import aiohttp
            import asyncio
            
            from jsonrpc_websocket import Server
            
            async def routine():
                async with aiohttp.ClientSession() as client:
                    server = Server('ws://[yourXO]/api/', client)
            
                    await server.ws_connect()
            
                    # signIn required
                    result = await server.session.signIn(username='[xoAdmin]', password='[xoAdmin]') # email attribute is working in place of username
                    
                    #hard shutdown
                    #result = await server.vm.stop(id='3f32beeb-ab3f-a8ac-087d-fdc7ed061b58', force=(bool(1)))
                    
                    #clean Shutdown
                    result = await server.vm.stop(id='3f32beeb-ab3f-a8ac-087d-fdc7ed061b58', force=(bool(0)))
                    
                    print (result)
            
            asyncio.get_event_loop().run_until_complete(routine())
            
            
            
            S 1 Reply Last reply Reply Quote 0
            • S Offline
              Studmuffn1134 @Gurve
              last edited by

              @Gurve Is this for the vm's on the server or the host itself i need the host itself

              G 1 Reply Last reply Reply Quote 0
              • G Offline
                Gurve @Studmuffn1134
                last edited by

                @Studmuffn1134 Sorry, must have somehow read another reply about vm and mixed them. But pretty sure you should be able to utilise the steps I did for host shutdown

                xo-cli to get relevant api endpoints, xo-cli to get parameters for said endpoint and then press play

                S 1 Reply Last reply Reply Quote 0
                • S Offline
                  Studmuffn1134 @Gurve
                  last edited by

                  @Gurve Do i have to enable the xo-cli?

                  G 1 Reply Last reply Reply Quote 0
                  • G Offline
                    Gurve @Studmuffn1134
                    last edited by Gurve

                    @Studmuffn1134 should be available in XO vm, it was atleast for me, I just used the XO installer script from github.

                    I did a quick search with xo cli now

                    xo-cli list-commands | egrep 'host.'

                    in case it looks weird "\." is just to escape the "." which just tells regex I am looking for an actual "."

                    import aiohttp
                    import asyncio
                    
                    from jsonrpc_websocket import Server
                    
                    async def routine():
                        async with aiohttp.ClientSession() as client:
                            server = Server('ws://[yourXO]/api/', client)
                    
                            await server.ws_connect()
                    
                            # signIn required
                            result = await server.session.signIn(username='[yourXOusername]', password='[yourXOPassword]') # email attribute is working in place of username
                            
                            #hard shutdown VM
                            #result = await server.vm.stop(id='3f32beeb-ab3f-a8ac-087d-fdc7ed061b58', force=(bool(1)))
                            
                            #clean Shutdown VM
                            #result = await server.vm.stop(id='3f32beeb-ab3f-a8ac-087d-fdc7ed061b58', force=(bool(0)))
                    
                            #bypassbackup and bypassevacuate set off by default but include for wholeness of parameters
                            result = await server.host.stop(id=[hostUUID],bypassBackupCheck=(bool(0)),bypassEvacuate=bool(0))
                            
                            print (result)
                    
                    asyncio.get_event_loop().run_until_complete(routine())
                    

                    I just built all examples into one, here in the end is the host.stop example also

                    S 1 Reply Last reply Reply Quote 0
                    • S Offline
                      Studmuffn1134 @Gurve
                      last edited by

                      @Gurve '''def shutdown_vm_hosts(host_id,xo_url,auth_token,use_force):

                      async def routine():
                          async with aiohttp.ClientSession() as client:
                              server = Server('ws://192.168.100.30:2223/api/', client)
                              await server.ws_connect()
                              # signIn required
                              result = await server.session.signIn(username='ThePlague', password='No') # email attribute is working in place of username
                              hostUUID ="d2f1374c-728d-4905-85cc-e0d7166a3fbf"
                              #hard shutdown VM
                              #result = await server.vm.stop(id='3f32beeb-ab3f-a8ac-087d-fdc7ed061b58', force=(bool(1)))
                              #clean Shutdown VM
                              #result = await server.vm.stop(id='3f32beeb-ab3f-a8ac-087d-fdc7ed061b58', force=(bool(0)))
                              #bypassbackup and bypassevacuate set off by default but include for wholeness of parameters
                              result = await server.host.stop(id=[hostUUID],bypassBackupCheck=(bool(0)),bypassEvacuate=bool(0))
                              print (result)''' Traceback (most recent call last):
                              
                                File "z:\Valera\School\Lakeland University\Finished\Programming 2\Python Programs\StudsPrograms\Shutdowntest.py", line 72, in <module>
                              
                                  main() # second part of calling the main function
                              
                                  ~~~~^^
                              
                                File "z:\Valera\School\Lakeland University\Finished\Programming 2\Python Programs\StudsPrograms\Shutdowntest.py", line 70, in main
                              
                                  shutdown_vm_hosts(l,XO_URL,AUTH_TOKEN,use_force=False)
                              
                                  ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                              
                                File "z:\Valera\School\Lakeland University\Finished\Programming 2\Python Programs\StudsPrograms\Shutdowntest.py", line 29, in shutdown_vm_hosts
                              
                                  asyncio.get_event_loop().run_until_complete(routine())
                              
                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
                              
                                File "C:\Users\ThePlague\AppData\Local\Programs\Python\Python313\Lib\asyncio\base_events.py", line 725, in run_until_complete
                              
                                  return future.result()
                              
                                         ~~~~~~~~~~~~~^^
                              
                                File "z:\Valera\School\Lakeland University\Finished\Programming 2\Python Programs\StudsPrograms\Shutdowntest.py", line 13, in routine
                              
                                  await server.ws_connect()
                              
                                File "Z:\Valera\School\Lakeland University\Finished\Programming 2\Python Programs\StudsPrograms\.venv\Lib\site-packages\jsonrpc_websocket\jsonrpc.py", line 68, in ws_connect
                              
                                  raise TransportError('Error connecting to server', None, exc)
                              
                              jsonrpc_base.jsonrpc.TransportError: ('Error connecting to server', ServerDisconnectedError('Server disconnected'))
                      

                      I tried that and that is the error code I get

                      S 1 Reply Last reply Reply Quote 0
                      • S Offline
                        Studmuffn1134 @Studmuffn1134
                        last edited by

                        @Studmuffn1134 I changed my link from ws:// to https:// and it now gives me this error File "Z:\Valera\School\Lakeland University\Finished\Programming 2\Python Programs\StudsPrograms.venv\Lib\site-packages\jsonrpc_base\jsonrpc.py", line 213, in parse_response
                        raise ProtocolError(code, message, data)
                        jsonrpc_base.jsonrpc.ProtocolError: (10, 'invalid parameters', {'error': {'message': 'invalid parameters', 'code': 10, 'data': {'errors': [{'instancePath': '/id', 'schemaPath': '#/properties/id/type', 'keyword': 'type', 'params': {'type': 'string'}, 'message': 'must be string'}]}}, 'id': '0a11ec72-9300-4030-a5d2-a5c0286f3811', 'jsonrpc': '2.0'})

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post