def prepare_volume(self): self.SNAPSHOT_NAME = self.getUniqueString() self.SNAPSHOT_ID = None self.VOLUME_NAME = self.getUniqueString() self.VOLUME_ID = None volume = self.conn.block_storage.create_volume(name=self.VOLUME_NAME, size=1) resource.wait_for_status(session=self.conn.block_storage, resource=volume, status='available', failures=['error'], interval=2, wait=120) # assert isinstance(volume, _volume.Volume) self.assertEqual(self.VOLUME_NAME, volume.name) self.VOLUME_ID = volume.id snapshot = self.conn.block_storage.create_snapshot( name=self.SNAPSHOT_NAME, volume_id=self.VOLUME_ID) resource.wait_for_status(session=self.conn.block_storage, resource=snapshot, status='available', failures=['error'], interval=2, wait=120) # assert isinstance(snapshot, _snapshot.Snapshot) self.assertEqual(self.SNAPSHOT_NAME, snapshot.name) self.SNAPSHOT_ID = snapshot.id
def test_wait_for_status(self): self.sess.get = mock.MagicMock() self.sess.get.side_effect = [self.build, self.active] sot = FakeResource.new(**fake_data) self.assertEqual(sot, resource.wait_for_status( self.sess, sot, 'ACTIVE', [], 1, 2))
def wait_for_recordset(self, recordset, status='ACTIVE', failures=None, interval=2, wait=180, attribute='status'): """Wait for an recordset to be in a particular status. :param zone: The :class:`~otcextensions.sdk.dns.v2.recordset.Recordset` or recordset ID to wait on to reach the specified status. :param status: Desired status. :param failures: Statuses that would be interpreted as failures. :type failures: :py:class:`list` :param int interval: Number of seconds to wait before to consecutive checks. Default to 2. :param int wait: Maximum number of seconds to wait before the change. Default to 180 :return: The resource is returned on success. :raises: :class:`~openstack.exceptions.ResourceTimeout` if transition to the desired status failed to occur in specified seconds. :raises: :class:`~openstack.exceptions.ResourceFailure` if the resource has transited to one of the failure statuses. """ failures = ['ERROR'] if failures is None else failures return resource.wait_for_status(self, recordset, status, failures, interval, wait)
def wait_for_status(self, value, status, failures=None, interval=2, wait=120): """Wait for a resource to be in a particular status. :param value: The resource to wait on to reach the status. The resource must have a status attribute. :type value: :class:`~openstack.resource.Resource` :param status: Desired status of the resource. :param list failures: Statuses that would indicate the transition failed such as 'ERROR'. :param interval: Number of seconds to wait between checks. :param wait: Maximum number of seconds to wait for the change. :return: Method returns resource on success. :raises: :class:`~openstack.exceptions.ResourceTimeout` transition to status failed to occur in wait seconds. :raises: :class:`~openstack.exceptions.ResourceFailure` resource transitioned to one of the failure states. :raises: :class:`~AttributeError` if the resource does not have a status attribute """ failures = [] if failures is None else failures return resource.wait_for_status(self, value, status, failures, interval, wait)
def wait_for_status(self, res, status, failures=None, interval=2, wait=120): """Wait for a resource to be in a particular status. :param res: The resource to wait on to reach the specified status. The resource must have a ``status`` attribute. :type resource: A :class:`~openstack.resource.Resource` object. :param status: Desired status. :param failures: Statuses that would be interpreted as failures. :type failures: :py:class:`list` :param interval: Number of seconds to wait before to consecutive checks. Default to 2. :param wait: Maximum number of seconds to wait before the change. Default to 120. :returns: The resource is returned on success. :raises: :class:`~openstack.exceptions.ResourceTimeout` if transition to the desired status failed to occur in specified seconds. :raises: :class:`~openstack.exceptions.ResourceFailure` if the resource has transited to one of the failure statuses. :raises: :class:`~AttributeError` if the resource does not have a ``status`` attribute. """ failures = [] if failures is None else failures return resource.wait_for_status( self, res, status, failures, interval, wait)
def wait_for_status(self, res, status='ACTIVE', failures=None, interval=2, wait=120): """Wait for a resource to be in a particular status. :param res: The resource to wait on to reach the specified status. The resource must have a ``status`` attribute. :type resource: A :class:`~openstack.resource.Resource` object. :param status: Desired status. :param failures: Statuses that would be interpreted as failures. :type failures: :py:class:`list` :param interval: Number of seconds to wait before to consecutive checks. Default to 2. :param wait: Maximum number of seconds to wait before the change. Default to 120. :returns: The resource is returned on success. :raises: :class:`~openstack.exceptions.ResourceTimeout` if transition to the desired status failed to occur in specified seconds. :raises: :class:`~openstack.exceptions.ResourceFailure` if the resource has transited to one of the failure statuses. :raises: :class:`~AttributeError` if the resource does not have a ``status`` attribute. """ failures = ['Error'] if failures is None else failures return resource.wait_for_status( self, res, status, failures, interval, wait)
def wait_for_group(self, group, status='INSERVICE', failures=None, interval=2, wait=180): """Wait for a group to be in a particular status. :param group: The value can be the ID of a group or a :class:`~otcextensions.sdk.auto_scaling.v1.group.Group` instance :param status: Desired status. :param failures: Statuses that would be interpreted as failures. :type failures: :py:class:`list` :param int interval: Number of seconds to wait before to consecutive checks. Default to 2. :param int wait: Maximum number of seconds to wait before the change. Default to 180 :return: The resource is returned on success. :raises: :class:`~openstack.exceptions.ResourceTimeout` if transition to the desired status failed to occur in specified seconds. :raises: :class:`~openstack.exceptions.ResourceFailure` if the resource has transited to one of the failure statuses. """ group = self._get_resource(_group.Group, group) failures = ['ERROR'] if failures is None else failures return resource.wait_for_status(self, group, status, failures, interval, wait)
def wait_for_cluster(self, cluster, status='Available', failures=None, interval=2, wait=960): """Wait for a server to be in a particular status. :param cluster: The :class:`~otcextensions.sdk.cce.v3.cluster.Cluster` to wait on to reach the specified status. :param status: Desired status. :param failures: Statuses that would be interpreted as failures. :type failures: :py:class:`list` :param int interval: Number of seconds to wait before to consecutive checks. Default to 2. :param int wait: Maximum number of seconds to wait before the change. Default to 960. :returns: The resource is returned on success. :raises: :class:`~openstack.exceptions.ResourceTimeout` if transition to the desired status failed to occur in specified seconds. :raises: :class:`~openstack.exceptions.ResourceFailure` if the resource has transited to one of the failure statuses. """ failures = ['ERROR'] if failures is None else failures return resource.wait_for_status(self, cluster, status, failures, interval, wait, attribute='status.status')
def test_wait_for_status_nothing(self): self.sess.get = mock.MagicMock() sot = FakeResource.new(**fake_data) sot.status = 'ACTIVE' self.assertEqual(sot, resource.wait_for_status( self.sess, sot, 'ACTIVE', [], 1, 2)) self.assertEqual([], self.sess.get.call_args_list)
def wait_for_stack(self, value, status='CREATE_COMPLETE', failures=['CREATE_FAILED'], interval=2, wait=120): return resource.wait_for_status(self.session, value, status, failures, interval, wait)
def wait_for_server(self, server, status='ACTIVE', failures=['ERROR'], interval=2, wait=120): return resource.wait_for_status(self, server, status, failures, interval, wait)
def wait_for_backup(self, backup, status='COMPLETED', failures=None, interval=2, wait=300, attribute='status'): failures = ['FAILED'] if failures is None else failures return resource.wait_for_status(self, backup, status, failures, interval, wait)
def setUp(self): super(TestInstance, self).setUp() self._initialize_network() products = list(self.conn.dms.products()) products_ids = [product.product_id for product in products] product_id = random.choice(products_ids) availability_zone_names = [ product.availability_zones for product in products if product_id == product.product_id ] availability_zone_name = random.choice( sum(availability_zone_names, []) ) availability_zone_id = [ availability_zone.id for availability_zone in self.conn.dms.availability_zones() if availability_zone_name == availability_zone.code ] try: self.instance = self.conn.dms.create_instance( name=self.INSTANCE_NAME, engine="kafka", engine_version="2.3.0", storage=4800, router_id=self.ROUTER_ID, network_id=self.NET_ID, security_group_id=self.SG_ID, availability_zones=availability_zone_id, product_id=product_id, storage_spec_code="dms.physical.storage.ultra" ) except exceptions.DuplicateResource: self.instance = self.conn.dms.find_instance( alias=self.INSTANCE_NAME ) resource.wait_for_status( session=self.conn.dms, resource=self.instance, status='RUNNING', failures=['CREATEFAILED'], interval=5, wait=900) self.assertIn('instance_id', self.instance) self.instances.append(self.instance)
def _create_subnet(self, remove=True): cidr: str = self.vpc.cidr gateway, _ = cidr.split("/") gateway = gateway[:-2] + ".1" # .0 -> .1 attrs = { 'vpc_id': self.vpc.id, 'name': 'test-subnet-' + self.seed, 'cidr': cidr, 'gateway_ip': gateway, 'dns_list': [ "100.125.4.25", "100.125.129.199", ], } subnet = self.conn.vpc.create_subnet(**attrs) resource.wait_for_status(self.conn.vpc, subnet, "ACTIVE", None, 2, 20) if remove: self.addCleanup(self._delete_subnet, subnet) return subnet
def wait_for_load_balancer(self, name_or_id, status='ACTIVE', failures=['ERROR'], interval=2, wait=300): lb = self._find(_lb.LoadBalancer, name_or_id, ignore_missing=False) return resource.wait_for_status(self, lb, status, failures, interval, wait, attribute='provisioning_status')
def wait_for_job(self, job_id, status='success', failures=None, interval=5, wait=3600, attribute='status.status'): failures = ['FAILED'] if failures is None else failures job = self.get_job(job_id) return resource.wait_for_status(self, job, status, failures, interval, wait, attribute='status.status')
def wait_for_job(self, job_id, status='success', failures=None, interval=5, wait=3600, attribute='status'): if self.service_type == 'rdsv3': status = 'completed' failures = ['failed'] else: failures = ['FAIL'] if failures is None else failures job = Job.existing(id=job_id).fetch(self) return resource.wait_for_status(self, job, status, failures, interval, wait, attribute='status')
def wait_for_status(self, value, status, failures=[], interval=2, wait=120): """Wait for a resource to be in a particular status. :param value: The resource to wait on to reach the status. The resource must have a status attribute. :type value: :class:`~openstack.resource.Resource` :param status: Desired status of the resource. :param list failures: Statuses that would indicate the transition failed such as 'ERROR'. :param interval: Number of seconds to wait between checks. :param wait: Maximum number of seconds to wait for the change. :return: Method returns resource on success. :raises: :class:`~openstack.exceptions.ResourceTimeout` transition to status failed to occur in wait seconds. :raises: :class:`~openstack.exceptions.ResourceFailure` resource transitioned to one of the failure states. :raises: :class:`~AttributeError` if the resource does not have a status attribute """ return resource.wait_for_status(self.session, value, status, failures, interval, wait)
def _delete_subnet(self, subnet): resource.wait_for_status(self.conn.vpc, subnet, "ACTIVE", None, 2, 20) self.conn.vpc.delete_subnet(subnet, ignore_missing=False) resource.wait_for_delete(self.conn.vpc, subnet, 2, 60)
def wait_for_server(self, server, status='ACTIVE', failures=['ERROR'], interval=2, wait=120): return resource.wait_for_status(self.session, server, status, failures, interval, wait)