You can also configure event bus (Kafka perhaps) and use that to get events.

Alternately you can also use below API -

(local) 🐵 > list events type="MAINT.PREPARE" listall=true
{
  "count": 6,
  "event": [
    {
      "account": "system",
      "created": "2019-08-08T17:06:23+0530",
      "description": "completed maintenance for host 1",
      "domain": "ROOT",
      "domainid": "712762c6-b2b0-11e9-831d-34e12d5f623e",
      "id": "41c27f1b-ecbf-4e77-8489-6aaaaa5d0456",
      "level": "INFO",
      "state": "Completed",
      "type": "MAINT.PREPARE",
      "username": "system"
    },
    {
      "account": "admin",
      "created": "2019-08-08T17:03:47+0530",
      "description": "preparing host: 1 for maintenance",
      "domain": "ROOT",
      "domainid": "712762c6-b2b0-11e9-831d-34e12d5f623e",
      "id": "8d70cf65-f0ba-4b4c-95de-13612e925cfc",
      "level": "INFO",
      "state": "Scheduled",
      "type": "MAINT.PREPARE",
      "username": "admin"
    },
    {
      "account": "admin",
      "created": "2019-08-08T17:03:47+0530",
      "description": "starting maintenance for host 1",
      "domain": "ROOT",
      "domainid": "712762c6-b2b0-11e9-831d-34e12d5f623e",
      "id": "3e305f6f-d91f-47d3-be74-bcc37c1d6995",
      "level": "INFO",
      "state": "Started",
      "type": "MAINT.PREPARE",
      "username": "admin"
    },
    {
...

The part in red with completed state is published when maintenance mode is 
completed. Ofcourse filter for the host id you want to track.

Regards,
Anurag

________________________________
From: Rakesh v <www.rakeshv....@gmail.com>
Sent: Thursday, August 8, 2019 4:31 PM
To: us...@cloudstack.apache.org <us...@cloudstack.apache.org>
Cc: dev@cloudstack.apache.org <dev@cloudstack.apache.org>
Subject: Re: Querying async job result

So then I guess the correct way to check if host is in maintenance is through 
querying DB.

Sent from my iPhone


anurag.awas...@shapeblue.com 
www.shapeblue.com
Amadeus House, Floral Street, London  WC2E 9DPUK
@shapeblue
  
 

> On 08-Aug-2019, at 12:03 PM, Anurag Awasthi <anurag.awas...@shapeblue.com> 
> wrote:
>
> Hi Rakesh,
>
> Andrija is correct. Internally, all the API call does is move the host to a 
> different state. Periodically (ping.interval duration apart) MS would attempt 
> migration of VMs. Once the host has zero running VMs and no VM in 
> failure/error state it would be marked in maintenance mode.
>
> Regarding your 2nd question - how to track if maintenance state, one option 
> is that you query DB to see the state. The other option could be to see on 
> event bus for "MAINT.PREPARE" in completed state. I haven't seen this in 
> practice but perhaps you can dig in a bit to explore.
>
> Regards,
> Anurag
>
> On 8/8/19, 3:17 PM, "Andrija Panic" <andrija.pa...@gmail.com> wrote:
>
>    Rakesh,
>
>    I'm not quite sure if this is a bug/misbehaviour, but it is indeed a
>    confusing one.
>
>    When you ask a host to go to maintenance mode, , you are using
>    prepareHostForMaintenance as you said, and this will trigger the host to go
>    into the "PrepareForMaintenance" state... so the job does indeed completes
>    within 2-3sec usually, as you can actually see in the GUI, after a 2-3 secs
>    of spinning circle and confirmation that it has been done.
>
>    Now, after the host has reached the PrepareForMaintenance state, ACS will
>    migrate away VMs, and I can only assume that the mgmt server will mark it
>    as in "Maintenance" state once it has zero VMs.
>    So you can query for the status of the host for the "resourcestate" and
>    observe when it goes into "Maintenance" state.
>
>    Regards
>    Andrija
>
>
> anurag.awas...@shapeblue.com
> www.shapeblue.com<http://www.shapeblue.com>
> Amadeus House, Floral Street, London  WC2E 9DPUK
> @shapeblue
>
>
>
>> On Thu, 8 Aug 2019 at 11:18, Rakesh v 
>> <www.rakeshv....@gmail.com<http://www.rakeshv....@gmail.com>> wrote:
>>
>> Hello Anurag
>>
>>
>> Thanks for the reply. The host does transit to  maintenance mode
>> eventually but the asynchronous job status never changes. Right now I'm
>> periodically fetching the resource_state from DB to see if it changes to
>> "Maintenance". Is there any better way to do it like using triggers or
>> events instead of periodic polling?
>>
>> Sent from my iPhone
>>
>>> On 08-Aug-2019, at 10:52 AM, Anurag Awasthi <
>> anurag.awas...@shapeblue.com> wrote:
>>>
>>> Hi Rakesh,
>>>
>>> You seem to be doing the right thing. I think what you have encoutered
>> is a bug in prepareForMaintenance API. The host tends to be stuck in that
>> state in some scenarios. Perhaps, when a VM enters an error state. I would
>> advise canceling maintenance mode and examining what states the VMs are in.
>> Ensure there are no unexpected errors on VMs, clean them up manually if
>> needed. Then retry prepare for maintenance mode.
>>>
>>> There is an open PR for fixing this issue as well -
>> https://github.com/apache/cloudstack/pull/3425 . While this got
>> sidetracked as we worked on 4.13.0, this will make it in 4.13.1.
>>>
>>> Kind Regards,
>>> Anurag
>>> ________________________________
>>> From: Rakesh Venkatesh 
>>> <www.rakeshv....@gmail.com<http://www.rakeshv....@gmail.com>>
>>> Sent: Thursday, August 8, 2019 2:09 PM
>>> To: us...@cloudstack.apache.org <us...@cloudstack.apache.org>;
>> dev@cloudstack.apache.org <dev@cloudstack.apache.org>
>>> Subject: Querying async job result
>>>
>>> Hello
>>>
>>>
>>> I want to know what is the best way to query the async job result using
>>> queryAsyncJobResult api. According to the documentation in
>>>
>> http://docs.cloudstack.apache.org/projects/archived-cloudstack-getting-started/en/latest/dev.html
>>> ,
>>> the "jobstatus" of 1 means the command completed but im facing an issue
>>> where even though the command is still running, the "jobstatus" is
>> always 1.
>>>
>>> Im running "prepareHostForMaintenance" command which returns the jobid.
>>> When I run queryAsyncJobResult for this jobid, the jobstatus will always
>> be
>>> 1 even though the hypervisor is still not in maintenance mode.
>>>
>>> So can anyone tell me what is the best way to check if the hypervisor is
>> in
>>> maintenance mode or not? Im using 4.11 version
>>>
>>>
>>> Below are the result which I get
>>>
>>>
>>> "resourcestate": "PrepareForMaintenance",
>>> "jobresultcode": 0,
>>> "jobresulttype": "object",
>>> "jobstatus": 1,
>>>
>>> --
>>> Thanks and regards
>>> Rakesh venkatesh
>>>
>>> anurag.awas...@shapeblue.com
>>> www.shapeblue.com<http://www.shapeblue.com>
>>> Amadeus House, Floral Street, London  WC2E 9DPUK
>>> @shapeblue
>>>
>>>
>>>
>>
>
>
>    --
>
>    Andrija Panić
>
>

Reply via email to