GitHub user InAnimaTe opened a pull request:

    Return Object Changes and State Handling Fixup

    ## Return Object Changes and State Handling Fixup
    ### Description
    > This should hopefully be my last PR for a long-time regarding the Rancher 
driver. At least until `v2` comes out ;)
    This PR changes the way the `start_container`, `stop_container`, and 
`destroy_container` functions work. They still return a container object as 
expected, but that object is now made from the actual response we receive from 
Rancher (which is not just a empty 204, but the full json for the container 
question), not another `get_container` call.
    This is most certainly the better way to handle this:
    In [1]: con = driver.get_container('1i24')
    In [2]: con
    Out[2]: <Container: id=1i24, name=newconbr0,state=running, provider=Rancher 
    In [3]: stopcon = driver.stop_container(con)
    In [4]: stopcon
    Out[4]: <Container: id=1i24, name=newconbr0,state=terminated, 
provider=Rancher ...>
    In [5]: stopcon.extra['state']
    Out[5]: 'stopping'
    In [6]: startcon = driver.start_container(stopcon)
    In [7]: startcon
    Out[7]: <Container: id=1i24, name=newconbr0,state=terminated, 
provider=Rancher ...>
    In [8]: startcon.extra['state']
    Out[8]: 'starting'
    In [9]: destroycon = driver.destroy_container(startcon)
    In [10]: destroycon
    Out[10]: <Container: id=1i24, name=newconbr0,state=terminated, 
provider=Rancher ...>
    In [11]: destroycon.extra['state']
    Out[11]: 'stopping'
    #### State Handling Fix
    While the above output shows that our return objects are much better, it 
shows another issue. For some reason, `state=terminated` when we're in the 
process of a transition (starting, stopping, etc..). Looking deeper, I found my 
`elif` for terminated state doesn't work as expected. I've fixed this by using 
`any`. I've also modified the tests to properly check for this.
    Now it works as expected:
    In [4]: con = driver.get_container('1i31')                                  
    In [5]: con                                                                 
    Out[5]: <Container: id=1i31, name=newcontainer,state=stopped, 
provider=Rancher ...> 
    In [6]: startcon = driver.start_container(con)                              
    In [7]: startcon                                                            
    Out[7]: <Container: id=1i31, name=newcontainer,state=pending, 
provider=Rancher ...> 
    In [8]: startcon.extra['state']        
    Out[8]: 'starting'                     
    In [9]: startcon.extra['transitioning']
    Out[9]: 'yes'                          
    ### Status
    - done, ready for review
    ### Checklist (tick everything that applies)
    - [x] [Code 
 (required, can be done after the PR checks)
    - [x] [Tests](

You can merge this pull request into a Git repository by running:

    $ git pull return_changes

Alternatively you can review and apply these changes as the patch at:

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #905
commit 6e32861f77cc16fc90b599026367b64dad083455
Author: Mario Loria <>
Date:   2016-10-13T18:47:37Z

    return actual action object

commit 5ff1805da19da24627b4d7b4e511bb2294b06fdf
Author: Mario Loria <>
Date:   2016-10-13T18:54:09Z

    modify tests, flake8

commit 3ec0fe30705ee5bde0ef47a684691569cb341725
Author: Mario Loria <>
Date:   2016-10-13T19:34:13Z

    fix state handling


If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at or file a JIRA ticket
with INFRA.

Reply via email to