[python26-boto/el5: 7/21] Fixed parsing of current/previous instance state data

gholms gholms at fedoraproject.org
Mon Feb 10 23:19:41 UTC 2014


commit d67d4eca21314992bb80d550018738ec8166b1c3
Author: Garrett Holmstrom <gholms at fedoraproject.org>
Date:   Tue Jan 8 13:18:25 2013 -0800

    Fixed parsing of current/previous instance state data
    
    https://github.com/boto/boto/issues/881

 python-boto-2.5.2-statechg.patch |  197 ++++++++++++++++++++++++++++++++++++++
 python-boto.spec                 |    9 ++-
 2 files changed, 205 insertions(+), 1 deletions(-)
---
diff --git a/python-boto-2.5.2-statechg.patch b/python-boto-2.5.2-statechg.patch
new file mode 100644
index 0000000..cec046e
--- /dev/null
+++ b/python-boto-2.5.2-statechg.patch
@@ -0,0 +1,197 @@
+Index: boto/boto/ec2/instance.py
+===================================================================
+--- boto.orig/boto/ec2/instance.py
++++ boto/boto/ec2/instance.py
+@@ -15,7 +15,7 @@
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
+ # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+-# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
++# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ # IN THE SOFTWARE.
+@@ -33,6 +33,29 @@ from boto.ec2.networkinterface import Ne
+ from boto.ec2.group import Group
+ import base64
+ 
++
++class InstanceState(object):
++    """
++    """
++    def __init__(self, code=0, name=None):
++        self.code = code
++        self.name = name
++
++    def __repr__(self):
++        return '%s(%d)' % (self.name, self.code)
++
++    def startElement(self, name, attrs, connection):
++        pass
++
++    def endElement(self, name, value, connection):
++        if name == 'code':
++            self.code = int(value)
++        elif name == 'name':
++            self.name = value
++        else:
++            setattr(self, name, value)
++
++
+ class Reservation(EC2Object):
+     """
+     Represents a Reservation response object.
+@@ -44,7 +67,6 @@ class Reservation(EC2Object):
+     :ivar instances: A list of Instance objects launched in this
+                      Reservation.
+     """
+-    
+     def __init__(self, connection=None):
+         EC2Object.__init__(self, connection)
+         self.id = None
+@@ -76,7 +98,8 @@ class Reservation(EC2Object):
+     def stop_all(self):
+         for instance in self.instances:
+             instance.stop()
+-            
++
++
+ class Instance(TaggedEC2Object):
+     """
+     Represents an instance.
+@@ -86,8 +109,13 @@ class Instance(TaggedEC2Object):
+                   groups associated with the instance.
+     :ivar public_dns_name: The public dns name of the instance.
+     :ivar private_dns_name: The private dns name of the instance.
+-    :ivar state: The string representation of the instances current state.
+-    :ivar state_code: An integer representation of the instances current state.
++    :ivar state: The string representation of the instance's current state.
++    :ivar state_code: An integer representation of the instance's
++        current state.
++    :ivar previous_state: The string representation of the instance's
++        previous state.
++    :ivar previous_state_code: An integer representation of the
++        instance's current state.
+     :ivar key_name: The name of the SSH key associated with the instance.
+     :ivar instance_type: The type of instance (e.g. m1.small).
+     :ivar launch_time: The time the instance was launched.
+@@ -116,18 +144,14 @@ class Instance(TaggedEC2Object):
+     :ivar interfaces: List of Elastic Network Interfaces associated with
+         this instance.
+     """
+-    
++
+     def __init__(self, connection=None):
+         TaggedEC2Object.__init__(self, connection)
+         self.id = None
+         self.dns_name = None
+         self.public_dns_name = None
+         self.private_dns_name = None
+-        self.state = None
+-        self.state_code = None
+         self.key_name = None
+-        self.shutdown_state = None
+-        self.previous_state = None
+         self.instance_type = None
+         self.launch_time = None
+         self.image_id = None
+@@ -158,10 +182,32 @@ class Instance(TaggedEC2Object):
+         self.hypervisor = None
+         self.virtualization_type = None
+         self.architecture = None
++        self._previous_state = None
++        self._state = InstanceState()
+ 
+     def __repr__(self):
+         return 'Instance:%s' % self.id
+ 
++    @property
++    def state(self):
++        return self._state.name
++
++    @property
++    def state_code(self):
++        return self._state.code
++
++    @property
++    def previous_state(self):
++        if self._previous_state:
++            return self._previous_state.name
++        return None
++
++    @property
++    def previous_state_code(self):
++        if self._previous_state:
++            return self._previous_state.code
++        return 0
++
+     def startElement(self, name, attrs, connection):
+         retval = TaggedEC2Object.startElement(self, name, attrs, connection)
+         if retval is not None:
+@@ -187,6 +233,13 @@ class Instance(TaggedEC2Object):
+         elif name == 'iamInstanceProfile':
+             self.instance_profile = SubParse('iamInstanceProfile')
+             return self.instance_profile
++        elif name == 'currentState':
++            return self._state
++        elif name == 'previousState':
++            self._previous_state = InstanceState()
++            return self._previous_state
++        elif name == 'instanceState':
++            return self._state
+         return None
+ 
+     def endElement(self, name, value, connection):
+@@ -203,8 +256,6 @@ class Instance(TaggedEC2Object):
+             self.key_name = value
+         elif name == 'amiLaunchIndex':
+             self.ami_launch_index = value
+-        elif name == 'shutdownState':
+-            self.shutdown_state = value
+         elif name == 'previousState':
+             self.previous_state = value
+         elif name == 'name':
+@@ -310,7 +361,7 @@ class Instance(TaggedEC2Object):
+ 
+         :type force: bool
+         :param force: Forces the instance to stop
+-        
++
+         :rtype: list
+         :return: A list of the instances stopped
+         """
+@@ -411,6 +462,7 @@ class Instance(TaggedEC2Object):
+         """
+         return self.connection.reset_instance_attribute(self.id, attribute)
+ 
++
+ class ConsoleOutput:
+ 
+     def __init__(self, parent=None):
+@@ -432,10 +484,12 @@ class ConsoleOutput:
+         else:
+             setattr(self, name, value)
+ 
++
+ class InstanceAttribute(dict):
+ 
+     ValidValues = ['instanceType', 'kernel', 'ramdisk', 'userData',
+-                   'disableApiTermination', 'instanceInitiatedShutdownBehavior',
++                   'disableApiTermination',
++                   'instanceInitiatedShutdownBehavior',
+                    'rootDeviceName', 'blockDeviceMapping', 'sourceDestCheck',
+                    'groupSet']
+ 
+@@ -465,6 +519,7 @@ class InstanceAttribute(dict):
+         elif name in self.ValidValues:
+             self[name] = self._current_value
+ 
++
+ class SubParse(dict):
+ 
+     def __init__(self, section, parent=None):
+@@ -477,4 +532,3 @@ class SubParse(dict):
+     def endElement(self, name, value, connection):
+         if name != self.section:
+             self[name] = value
+-            
diff --git a/python-boto.spec b/python-boto.spec
index 0d74703..f59a8e0 100644
--- a/python-boto.spec
+++ b/python-boto.spec
@@ -2,7 +2,7 @@
 Summary:        A simple lightweight interface to Amazon Web Services
 Name:           python-boto
 Version:        2.5.2
-Release:        2%{?dist}
+Release:        3%{?dist}
 License:        MIT
 Group:          Development/Languages
 URL:            https://github.com/boto/boto
@@ -14,6 +14,9 @@ BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 # https://bugzilla.redhat.com/show_bug.cgi?id=838076
 # Fixed with upstream commit 6870daf
 Patch1:         python-boto-2.5.2-emptydata.patch
+# https://github.com/boto/boto/issues/881
+# Fixed with upstream commit a23c379
+Patch2:         python-boto-2.5.2-statechg.patch
 
 %description
 Boto is a Python package that provides interfaces to Amazon Web Services.
@@ -25,6 +28,7 @@ use, lightweight wrapper around the Amazon services.
 %prep
 %setup -q -n boto-%{version}
 %patch1 -p1
+%patch2 -p1
 
 %build
 %{__python} setup.py build
@@ -59,6 +63,9 @@ rm -rf $RPM_BUILD_ROOT
 %{python_sitelib}/*
 
 %changelog
+* Tue Jan  8 2013 Garrett Holmstrom <gholms at fedoraproject.org> - 2.5.2-3
+- Fixed parsing of current/previous instance state data (boto #881)
+
 * Sat Jul 21 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 2.5.2-2
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
 


More information about the scm-commits mailing list