Best Python code snippet using tempest_python
test_attach_volume.py
Source:test_attach_volume.py  
...251    def skip_checks(cls):252        super(AttachVolumeMultiAttachTest, cls).skip_checks()253        if not CONF.compute_feature_enabled.volume_multiattach:254            raise cls.skipException('Volume multi-attach is not available.')255    def _attach_volume_to_servers(self, volume, servers):256        """Attaches the given volume to the list of servers.257        :param volume: The multiattach volume to use.258        :param servers: list of server instances on which the volume will be259                        attached260        :returns: dict of server ID to volumeAttachment dict entries261        """262        attachments = {}263        for server in servers:264            # map the server id to the volume attachment265            attachments[server['id']] = self.attach_volume(server, volume)266            # NOTE(mriedem): In the case of multi-attach, after the first267            # attach the volume will be in-use. On the second attach, nova will268            # 'reserve' the volume which puts it back into 'attaching' status269            # and then the volume shouldn't go back to in-use until the compute270            # actually attaches the server to the volume.271        return attachments272    def _detach_multiattach_volume(self, volume_id, server_id):273        """Detaches a multiattach volume from the given server.274        Depending on the number of attachments the volume has, this method275        will wait for the volume to go to back to 'in-use' status if there are276        more attachments or 'available' state if there are no more attachments.277        """278        # Count the number of attachments before starting the detach.279        volume = self.volumes_client.show_volume(volume_id)['volume']280        attachments = volume['attachments']281        wait_status = 'in-use' if len(attachments) > 1 else 'available'282        # Now detach the volume from the given server.283        self.servers_client.detach_volume(server_id, volume_id)284        # Now wait for the volume status to change.285        waiters.wait_for_volume_resource_status(286            self.volumes_client, volume_id, wait_status)287    def _create_multiattach_volume(self, bootable=False):288        kwargs = {}289        if bootable:290            kwargs['image_ref'] = CONF.compute.image_ref291        return self.create_volume(multiattach=True, **kwargs)292    def _create_and_multiattach(self):293        """Creates two server instances and a volume and attaches to both.294        :returns: A three-item tuple of the list of created servers,295                  the created volume, and dict of server ID to volumeAttachment296                  dict entries297        """298        servers = []299        for x in range(2):300            name = 'multiattach-server-%i' % x301            servers.append(self.create_test_server(name=name))302        # Now wait for the servers to be ACTIVE.303        for server in servers:304            waiters.wait_for_server_status(self.servers_client, server['id'],305                                           'ACTIVE')306        volume = self._create_multiattach_volume()307        # Attach the volume to the servers308        attachments = self._attach_volume_to_servers(volume, servers)309        return servers, volume, attachments310    @decorators.idempotent_id('8d5853f7-56e7-4988-9b0c-48cea3c7049a')311    def test_list_get_volume_attachments_multiattach(self):312        # Attach a single volume to two servers.313        servers, volume, attachments = self._create_and_multiattach()314        # List attachments from the volume and make sure the server uuids315        # are in that list.316        vol_attachments = self.volumes_client.show_volume(317            volume['id'])['volume']['attachments']318        attached_server_ids = [attachment['server_id']319                               for attachment in vol_attachments]320        self.assertEqual(2, len(attached_server_ids))321        # List Volume attachment of the servers322        for server in servers:...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
