GitHub user InAnimaTe opened a pull request:

    https://github.com/apache/libcloud/pull/905

    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 
linting](http://libcloud.readthedocs.org/en/latest/development.html#code-style-guide)
 (required, can be done after the PR checks)
    - [x] [Tests](http://libcloud.readthedocs.org/en/latest/testing.html)
    


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

    $ git pull https://github.com/ArroyoNetworks/libcloud return_changes

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

    https://github.com/apache/libcloud/pull/905.patch

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 <ma...@arroyonetworks.com>
Date:   2016-10-13T18:47:37Z

    return actual action object

commit 5ff1805da19da24627b4d7b4e511bb2294b06fdf
Author: Mario Loria <ma...@arroyonetworks.com>
Date:   2016-10-13T18:54:09Z

    modify tests, flake8

commit 3ec0fe30705ee5bde0ef47a684691569cb341725
Author: Mario Loria <ma...@arroyonetworks.com>
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 infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to