Added properties to config and added new method to behavior
* Updated config and refernce config with new properties * Added wait_for_image_status() method to Images behavior * Fixed rebase issues and corrected imports Change-Id: I31ee4ba653a66932d3e0cf3ea7c27662069401bd
This commit is contained in:
parent
e57dd5552d
commit
1fcaccbf14
@ -61,6 +61,26 @@ class ImagesConfig(ConfigSectionInterface):
|
|||||||
def region(self):
|
def region(self):
|
||||||
return self.get('region')
|
return self.get('region')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def primary_image(self):
|
||||||
|
"""Default image to be used when building servers in glance test"""
|
||||||
|
return self.get("primary_image")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def secondary_image(self):
|
||||||
|
"""Alternate image to be used in glance test"""
|
||||||
|
return self.get("secondary_image")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def image_status_interval(self):
|
||||||
|
"""Amount of time to wait between polling the status of an image"""
|
||||||
|
return int(self.get("image_status_interval"))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def snapshot_timeout(self):
|
||||||
|
"""Length of time to wait before giving up on reaching a status"""
|
||||||
|
return int(self.get("snapshot_timeout"))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def min_disk(self):
|
def min_disk(self):
|
||||||
return int(self.get('min_disk'))
|
return int(self.get('min_disk'))
|
||||||
|
@ -14,11 +14,14 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import time
|
||||||
|
|
||||||
from cafe.engine.behaviors import BaseBehavior
|
from cafe.engine.behaviors import BaseBehavior
|
||||||
|
from cloudcafe.common.exceptions import BuildErrorException, TimeoutException
|
||||||
from cloudcafe.common.resources import ResourcePool
|
from cloudcafe.common.resources import ResourcePool
|
||||||
from cloudcafe.common.tools.datagen import rand_name
|
from cloudcafe.common.tools.datagen import rand_name
|
||||||
from cloudcafe.images.common.types import ImageContainerFormat, \
|
from cloudcafe.images.common.types import ImageContainerFormat, \
|
||||||
ImageDiskFormat, Schemas
|
ImageDiskFormat, ImageStatus, Schemas
|
||||||
|
|
||||||
|
|
||||||
class ImagesBehaviors(BaseBehavior):
|
class ImagesBehaviors(BaseBehavior):
|
||||||
@ -161,3 +164,46 @@ class ImagesBehaviors(BaseBehavior):
|
|||||||
if image_member.updated_at is None:
|
if image_member.updated_at is None:
|
||||||
errors.append(self.error_msg.format('updated_at', not None, None))
|
errors.append(self.error_msg.format('updated_at', not None, None))
|
||||||
return errors
|
return errors
|
||||||
|
|
||||||
|
def wait_for_image_status(self, image_id, desired_status,
|
||||||
|
interval_time=None, timeout=None):
|
||||||
|
"""
|
||||||
|
@summary: Waits for a image to reach a desired status
|
||||||
|
@param image_id: The uuid of the image
|
||||||
|
@type image_id: String
|
||||||
|
@param desired_status: The desired final status of the image
|
||||||
|
@type desired_status: String
|
||||||
|
@param interval_time: The amount of time in seconds to wait
|
||||||
|
between polling
|
||||||
|
@type interval_time: Integer
|
||||||
|
@param timeout: The amount of time in seconds to wait
|
||||||
|
before aborting
|
||||||
|
@type timeout: Integer
|
||||||
|
@return: Response object containing response and the image
|
||||||
|
domain object
|
||||||
|
@rtype: requests.Response
|
||||||
|
"""
|
||||||
|
|
||||||
|
interval_time = interval_time or self.config.image_status_interval
|
||||||
|
timeout = timeout or self.config.snapshot_timeout
|
||||||
|
end_time = time.time() + timeout
|
||||||
|
|
||||||
|
while time.time() < end_time:
|
||||||
|
resp = self.client.get_image(image_id)
|
||||||
|
image = resp.entity
|
||||||
|
|
||||||
|
if image.status.lower() == ImageStatus.ERROR.lower():
|
||||||
|
raise BuildErrorException(
|
||||||
|
"Build failed. Image with uuid {0} "
|
||||||
|
"entered ERROR status.".format(image.id))
|
||||||
|
|
||||||
|
if image.status == desired_status:
|
||||||
|
break
|
||||||
|
time.sleep(interval_time)
|
||||||
|
else:
|
||||||
|
raise TimeoutException(
|
||||||
|
"wait_for_image_status ran for {0} seconds and did not "
|
||||||
|
"observe image {1} reach the {2} status.".format(
|
||||||
|
timeout, image_id, desired_status))
|
||||||
|
|
||||||
|
return resp
|
||||||
|
@ -32,8 +32,18 @@ username=<username>
|
|||||||
password=<password>
|
password=<password>
|
||||||
tenant_name=<tenant_name>
|
tenant_name=<tenant_name>
|
||||||
|
|
||||||
|
[compute_endpoint]
|
||||||
|
region=<region>
|
||||||
|
compute_endpoint_name=<compute_name>
|
||||||
|
|
||||||
|
[flavors]
|
||||||
|
primary_flavor=<flavor_id>
|
||||||
|
secondary_flavor=<different_flavor_id>
|
||||||
|
|
||||||
[images]
|
[images]
|
||||||
base_url=<http://x.x.x.x:9292>
|
base_url=<http://x.x.x.x:9292>
|
||||||
|
primary_image=<image_id>
|
||||||
|
secondary_image=<different_image_id>
|
||||||
image_status_interval=15
|
image_status_interval=15
|
||||||
snapshot_timeout=900
|
snapshot_timeout=900
|
||||||
created_at_offset=300
|
created_at_offset=300
|
||||||
|
Loading…
Reference in New Issue
Block a user