Przebudowa instancji z poziomu CLI ==================================== W niektórych przypadkach nie jest możliwe wprowadzenie zmian na istniejącej instancji i musi być ona przebudowana. Przykładowo, przebudowa jest wymagana jeśli chcemy zmienić typ dysku instancji (Standard 2.000 IOPS, Fast 8.000 IOPS, Ultra 15.000 IOPS), który jest dyskiem głównym ``root``. Innym przypadkiem, dość powszechnym, jest chęć odzyskania dostępu do instancji po uprzedniej utracie *hasła/klucza. (_*możliwe w przypadku, gdy proces **cloud-init** nie został uprzednio wyłączony_) Tworzenie backupu z wykorzystaniem snaphostu ============================================= **UWAGA**: Snapshot jest objęty limitem dla danego typu storage i jest liczony jako wolumen. Dla ułatwienia rachunku, należy przyjąć regułę: `wolumen + snapshot + nowy_wolumen = skonsumowane zasoby`. Na czas tworzenia snapshotu oraz odtworzenia instancji, należy zarezerwować odpowiednią ilość zasobów. **Przykład**: - chcemy wykonać operację zmiany: 1 wolumen 100 GB 2.000 IOPS -> 1 wolumen 100 GB 8.000 IOPS: - wykorzystane: 100 GB 2.000 IOPS - potrzebujemy: min. dodatkowe 100 GB dla typu 2.000 IOPS + 100 GB dla typu 8.000 IOPS Aby zweryfikować dostępne zasoby, możemy użyć polecenia: ``openstack quota show --volume --usage | grep -vE "\-1"`` ``` (python-3.10) [2025-06-30 11:41][WAW_1B]root@NB-374:~$openstack quota show --volume --usage | grep -vE "\-1" +--------------------------------------+-------+--------+----------+ | Resource | Limit | In Use | Reserved | +--------------------------------------+-------+--------+----------+ | volumes | 30 | 11 | 0 | | snapshots | 10 | 3 | 0 | | gigabytes | 1000 | 168 | 0 | | backups | 0 | 0 | 0 | | gigabytes_LUKS_25000iops | 0 | 0 | 0 | | gigabytes_LUKS_2000iops | 0 | 0 | 0 | | gigabytes_LUKS_8000iops | 0 | 0 | 0 | | gigabytes_LUKS_15000iops | 0 | 0 | 0 | | gigabytes_25000iops | 0 | 0 | 0 | | gigabytes_15000iops | 0 | 0 | 0 | | gigabytes_8000iops | 500 | 5 | 0 | | gigabytes_2000iops | 500 | 163 | 0 | | groups | 10 | 0 | 0 | | backup-gigabytes | 1000 | 0 | 0 | +--------------------------------------+-------+--------+----------+ ``` W pierwszym kroku tworzymy snapshot instancji lub wolumenu, który nas interesuje. Istnieje różnica podczas tworzenia snapshotów, o której należy pamiętać. - ``openstack server image create`` tworzy zrzut całej instancji - spowoduje to stworzenie snapshotów dla wszystkich podpiętych wolumenów oraz zostanie stworzony gotowy **image** - ``openstack volume snapshot create`` tworzy tylko snapshota wskazanego wolumenu, np. roota/systemowy Lista instancji w naszym projekcie: ``` (python-3.10) [2025-06-30 11:41][WAW_1B]root@NB-374:~$openstack server list +--------------------------------------+----------------+---------+-----------------------------------------------+--------------------------+----------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+----------------+---------+-----------------------------------------------+--------------------------+----------+ | c78b97a7-be95-4753-b747-208a59c3ed1a | pb-vdi-03 | SHUTOFF | pb-network=192.168.100.192 | N/A (booted from volume) | m4.c4 | | 77fcfdc1-bee4-468d-8f22-feba77bd09bd | pb-testy-disk | ACTIVE | pb-network=192.168.100.228, 77.79.247.219 | N/A (booted from volume) | m1.c2-hc | | 44eb8dcd-0209-49e4-af6d-0610fc3e46f0 | pb-test-hc | ACTIVE | pb-network=192.168.100.220 | N/A (booted from volume) | m1.c2-hc | | 9027776c-9e03-40c0-892d-4a5ee2924e54 | pb-custom-test | ACTIVE | | N/A (booted from volume) | m2.c1 | | 81c323d4-cef4-48d7-8a90-cff8809942ee | pb-nginx-lab | ACTIVE | pb-network=192.168.100.102 | N/A (booted from volume) | m2.c2 | | 458450b1-1469-40ac-a002-a4282a704ecf | pb-lab-ssh | ACTIVE | pb-network=192.168.100.237 | N/A (booted from volume) | m2.c1 | +--------------------------------------+----------------+---------+-----------------------------------------------+--------------------------+----------+ ``` Za pomocą ``openstack server volume list `` sprawdzamy podpięte wolumeny: ``` (python-3.10) [2025-06-30 12:22][WAW_1B]root@NB-374:~$openstack server volume list 77fcfdc1-bee4-468d-8f22-feba77bd09bd +----------+--------------------------------------+--------------------------------------+------+------------------------+--------------------------------------+--------------------------------------+ | Device | Server ID | Volume ID | Tag | Delete On Termination? | Attachment ID | BlockDeviceMapping UUID | +----------+--------------------------------------+--------------------------------------+------+------------------------+--------------------------------------+--------------------------------------+ | /dev/sda | 77fcfdc1-bee4-468d-8f22-feba77bd09bd | 87514286-2cd4-464f-ad26-5e57c4878c84 | None | False | be9e0296-fa70-40df-a8ee-d93cd3002b23 | f2b23870-567f-4866-83ca-f20ae71abc37 | | /dev/sdb | 77fcfdc1-bee4-468d-8f22-feba77bd09bd | 244f4db3-0e77-4543-9148-06061685d6df | None | False | 8e13f3c2-b762-4f39-a0bd-87a5d5fb5f57 | 315fa31d-b8d3-4db4-8842-3b97c2033163 | | /dev/sdc | 77fcfdc1-bee4-468d-8f22-feba77bd09bd | 05ddbcd6-ee07-4f3e-93c4-fb5e2a7e58d7 | None | False | f2de4529-cdd9-46ca-a5c5-8d41af26b5e1 | 747459b8-f25c-454b-807f-d10e4e395a33 | +----------+--------------------------------------+--------------------------------------+------+------------------------+--------------------------------------+--------------------------------------+ ``` Podczas tworzenia snapshotu, dla zachowania integralności oraz synchronizacji danych, zaleca się zatrzymanie instancji. Jeśli jednak zdecydujemy się na zrobienie **migawki** w trakcie pracy instancji, bądź nie możemy sobie pozwolić na przestój, możemy wykonać **snapshot-live**. **A) Tworzenie snapshotu całej instancji:** ``` (python-3.10) [2025-06-30 13:18][WAW_1B]root@NB-374:~$openstack server image create 77fcfdc1-bee4-468d-8f22-feba77bd09bd --wait --name copy-1-all-disk ``` Utworzony snapshot powędrował jako **image** oraz mamy gotowe snapshoty wszystkich podpiętych wolumenów. Na tym etapie możemy odtworzyć instancję, zachować jako kopia przed planowanymi testami bądź pobrać do siebie na lokalny dysk. Aby zweryfikować **snapshoty** oraz **image**, użyj poleceń: ``` (python-3.10) [2025-06-30 13:21][WAW_1B]root@NB-374:~$openstack volume snapshot list +--------------------------------------+--------------------------------+-------------+-----------+------+ | ID | Name | Description | Status | Size | +--------------------------------------+--------------------------------+-------------+-----------+------+ | e955b876-14eb-4785-ad7f-b88bb09ee0a2 | snapshot for copy-1-all-disk | | available | 5 | | 6b482112-bbfd-4ad9-9978-a67e02194371 | snapshot for copy-1-all-disk | | available | 7 | | 43fe2c49-3485-4d84-9126-99abb75a7d27 | snapshot for copy-1-all-disk | | available | 10 | +--------------------------------------+--------------------------------+-------------+-----------+------+ (python-3.10) [2025-06-30 13:19][WAW_1B]root@NB-374:~$openstack image list +--------------------------------------+--------------------------------------------+--------+ | ID | Name | Status | +--------------------------------------+--------------------------------------------+--------+ | 88b8c26f-38d3-43a4-9d5c-9415a0529f67 | copy-1-all-disk | active | +--------------------------------------+--------------------------------------------+--------+ ``` **B) Tworzenie snapshotu pojedyńczego dysku (np. systemowy):** Listujemy podpięte dyski do instancji i szukamy ``root disk`` ('/dev/sda', flaga **boot**): ``` (python-3.10) [2025-06-30 13:28][WAW_1B]root@NB-374:~$openstack server volume list 77fcfdc1-bee4-468d-8f22-feba77bd09bd +----------+--------------------------------------+--------------------------------------+------+------------------------+--------------------------------------+--------------------------------------+ | Device | Server ID | Volume ID | Tag | Delete On Termination? | Attachment ID | BlockDeviceMapping UUID | +----------+--------------------------------------+--------------------------------------+------+------------------------+--------------------------------------+--------------------------------------+ | /dev/sda | 77fcfdc1-bee4-468d-8f22-feba77bd09bd | 87514286-2cd4-464f-ad26-5e57c4878c84 | None | False | be9e0296-fa70-40df-a8ee-d93cd3002b23 | f2b23870-567f-4866-83ca-f20ae71abc37 | | /dev/sdb | 77fcfdc1-bee4-468d-8f22-feba77bd09bd | 244f4db3-0e77-4543-9148-06061685d6df | None | False | 8e13f3c2-b762-4f39-a0bd-87a5d5fb5f57 | 315fa31d-b8d3-4db4-8842-3b97c2033163 | | /dev/sdc | 77fcfdc1-bee4-468d-8f22-feba77bd09bd | 05ddbcd6-ee07-4f3e-93c4-fb5e2a7e58d7 | None | False | f2de4529-cdd9-46ca-a5c5-8d41af26b5e1 | 747459b8-f25c-454b-807f-d10e4e395a33 | +----------+--------------------------------------+--------------------------------------+------+------------------------+--------------------------------------+--------------------------------------+ ``` Tworzymy snapshota, korzystamy z flagi ``--force`` aby wymusić tryb live: ``` (python-3.10) [2025-06-30 13:31][WAW_1B]root@NB-374:~$openstack volume snapshot create --description "root disk" --volume 87514286-2cd4-464f-ad26-5e57c4878c84 root-disk-snap Invalid volume: Volume 87514286-2cd4-464f-ad26-5e57c4878c84 status must be available, but current status is: in-use. (HTTP 400) (Request-ID: req-8805d541-49fd-45a2-acfd-73d787bf1e47) (python-3.10) [2025-06-30 13:33][WAW_1B]root@NB-374:~$openstack volume snapshot create --description "root disk" --volume 87514286-2cd4-464f-ad26-5e57c4878c84 root-disk-snap --force +-------------+--------------------------------------+ | Field | Value | +-------------+--------------------------------------+ | created_at | 2025-06-30T11:34:38.843577 | | description | root disk | | id | 80509bd7-d742-49a5-a6cd-bdf50ac0a06e | | name | root-disk-snap | | properties | | | size | 10 | | status | creating | | updated_at | None | | volume_id | 87514286-2cd4-464f-ad26-5e57c4878c84 | +-------------+--------------------------------------+ ``` Weryfikujemy: ``` (python-3.10) [2025-06-30 13:34][WAW_1B]root@NB-374:~$openstack volume snapshot list +--------------------------------------+--------------------------------+-------------+-----------+------+ | ID | Name | Description | Status | Size | +--------------------------------------+--------------------------------+-------------+-----------+------+ | 80509bd7-d742-49a5-a6cd-bdf50ac0a06e | root-disk-snap | root disk | available | 10 | | e955b876-14eb-4785-ad7f-b88bb09ee0a2 | snapshot for copy-1-all-disk | | available | 5 | | 6b482112-bbfd-4ad9-9978-a67e02194371 | snapshot for copy-1-all-disk | | available | 7 | | 43fe2c49-3485-4d84-9126-99abb75a7d27 | snapshot for copy-1-all-disk | | available | 10 | +--------------------------------------+--------------------------------+-------------+-----------+------+ ``` Odtworzenie instancji z wykorzystanie snapshotu ================================================= W poprzednim rozdziale stworzyliśmy snapshoty niezbędne do odtworzenia instancji. Na tym etapie możemy: - odtworzyć instancję z innym typem dysku (np. zmiana 2.000 IOPS -> 8.000 IOPS etc.) - odtworzyć instancję i uzyskać dostęp np. po utracie hasła/klucza (_*wymagany aktywny cloud-init_) - stworzyć kopię instancji produkcyjnej A) Odtworzenie instancji z wcześniej utworzonego snapshota **całej instancji** 1) Weryfikujemy nasz wcześniej utworzony image: ``` (python-3.10) [2025-06-30 13:19][WAW_1B]root@NB-374:~$openstack image list +--------------------------------------+--------------------------------------------+--------+ | ID | Name | Status | +--------------------------------------+--------------------------------------------+--------+ | 88b8c26f-38d3-43a4-9d5c-9415a0529f67 | copy-1-all-disk | active | +--------------------------------------+--------------------------------------------+--------+ (python-3.10) [2025-06-30 13:34][WAW_1B]root@NB-374:~$openstack image show 88b8c26f-38d3-43a4-9d5c-9415a0529f67 +------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | checksum | d41d8cd98f00b204e9800998ecf8427e | | container_format | bare | | created_at | 2025-06-30T11:19:11Z | | disk_format | qcow2 | | file | /v2/images/88b8c26f-38d3-43a4-9d5c-9415a0529f67/file | | id | 88b8c26f-38d3-43a4-9d5c-9415a0529f67 | | min_disk | 0 | | min_ram | 0 | | name | copy-1-all-disk | | owner | 14c8ad7ba1734841a8a05609e3925570 | | properties | base_image_ref='', bdm_v2='True', block_device_mapping='[{"volume_type": null, "destination_type": "volume", "encryption_options": null, "no_device": null, "device_name": "/dev/sda", | | | "delete_on_termination": false, "guest_format": null, "source_type": "snapshot", "volume_id": null, "encrypted": null, "encryption_format": null, "image_id": null, "disk_bus": "scsi", "tag": null, | | | "boot_index": 0, "snapshot_id": "43fe2c49-3485-4d84-9126-99abb75a7d27", "volume_size": 10, "device_type": "disk", "encryption_secret_uuid": null}, {"volume_type": null, "destination_type": "volume", | | | "encryption_options": null, "no_device": null, "device_name": "/dev/sdb", "delete_on_termination": false, "guest_format": null, "source_type": "snapshot", "volume_id": null, "encrypted": null, | | | "encryption_format": null, "image_id": null, "disk_bus": null, "tag": null, "boot_index": null, "snapshot_id": "e955b876-14eb-4785-ad7f-b88bb09ee0a2", "volume_size": 5, "device_type": null, | | | "encryption_secret_uuid": null}, {"volume_type": null, "destination_type": "volume", "encryption_options": null, "no_device": null, "device_name": "/dev/sdc", "delete_on_termination": false, "guest_format": | | | null, "source_type": "snapshot", "volume_id": null, "encrypted": null, "encryption_format": null, "image_id": null, "disk_bus": null, "tag": null, "boot_index": null, "snapshot_id": | | | "6b482112-bbfd-4ad9-9978-a67e02194371", "volume_size": 7, "device_type": null, "encryption_secret_uuid": null}]', boot_roles='member,creator,reader,load-balancer_member', hw_cdrom_bus='sata', | | | hw_disk_bus='scsi', hw_input_bus='usb', hw_machine_type='q35', hw_pointer_model='usbtablet', hw_qemu_guest_agent='yes', hw_scsi_model='virtio-scsi', hw_video_model='virtio', hw_vif_model='virtio', | | | locations='[{'url': 'file:///var/lib/glance/images/88b8c26f-38d3-43a4-9d5c-9415a0529f67', 'metadata': {'store': 'file'}}]', os_hash_algo='sha512', | | | os_hash_value='cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e', os_hidden='False', os_require_quiesce='True', | | | os_type='linux', owner_project_name='project-pb', owner_specified.openstack.md5='', owner_specified.openstack.object='images/Ubuntu-24.04-amd64-20240426', owner_specified.openstack.sha256='', | | | owner_user_name='pb', password_0='AR7F93HTgY4xFV79Xy6Lp1fYcIdbd/sKWzdnEz6Tcc6QAVNQmG8ZWUKpxm6LNxQ2TZngTWdM9l2OEAhm7T05Z6ebb3BFasU5KXtjxh2mLMRe9Zt/On4Cnh/GxvK59LdJUJbplGFTE8pjGaPclxlFA3WISR8X2NkCaCZlLn3H | | | nn8/sOiD1dhBz66c0GHvN3CtJlg/jePgREOj1wMHDuu8zNINU1WDjVyTDDRhUSy4DWCk4cFcm9uZN+epLCcARD+', password_1='pFubeaLzaXGiI96OixVBPpRtBfhYDtjkaDHZ18PGCCaS1xSbU+XY6VlDOq/tR64zIG9JrQ4A1Ls4Vc36u3948Z/QFPKDwxdjEDoh5VWP | | | /UCagkL4WgmJWHSCswRzQvOz+swRms5YcQB9UVN3RiiO/kmr4HKT+gGOdlbL0nMWzu62z528iDghaMXmm2oxVyMC5B918UsqBZPIhUkcN3LYD9ddv+PvVeSSy6tgMYWgR/lzgs4RUyNWgNFdH0SKwqK', | | | password_2='cWPYqptoyBQ4CBUZVr+HxGPHBFn0UiKLDBjQ8B/kD+2g42ZZIATS3WSXMD0G0xqnSQscgoMKJvReEtE4FeAuB9HRYQh32OX7acu3JDhi6+5iMokHO010TRMhMtWW5o15MGVEZaKpJMs47/V58eUBfG5bjfuTuan2pwtczyHiZ31SEo', password_3='', | | | root_device_name='/dev/sda', stores='file' | | protected | False | | schema | /v2/schemas/image | | size | 0 | | status | active | | tags | | | updated_at | 2025-06-30T11:19:11Z | | visibility | private | +------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ ``` 2) Tworzymy naszą instancję wskazując jako ``--image`` naszą wcześniej utworzoną migawkę. W tej sytuacji został zmieniony **flavor** ``` openstack server create \ --image 88b8c26f-38d3-43a4-9d5c-9415a0529f67 \ --flavor m4.c4 \ --network pb-network \ --security-group pb-sec-group \ --security-group default \ --wait \ pb-testy-disk-from-snapshot ``` Flaga ``--wait`` czeka na potwierdzenie realizacji requestu, inaczej mówiąc, po ukończonym zadaniu dostaniemy podsumowanie wykonanej realizacji. ``` +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-AZ:availability_zone | AZ1 | | OS-EXT-SRV-ATTR:host | None | | OS-EXT-SRV-ATTR:hostname | pb-testy-disk-from-snapshot | | OS-EXT-SRV-ATTR:hypervisor_hostname | None | | OS-EXT-SRV-ATTR:instance_name | None | | OS-EXT-SRV-ATTR:kernel_id | None | | OS-EXT-SRV-ATTR:launch_index | None | | OS-EXT-SRV-ATTR:ramdisk_id | None | | OS-EXT-SRV-ATTR:reservation_id | None | | OS-EXT-SRV-ATTR:root_device_name | None | | OS-EXT-SRV-ATTR:user_data | None | | OS-EXT-STS:power_state | Running | | OS-EXT-STS:task_state | None | | OS-EXT-STS:vm_state | active | | OS-SRV-USG:launched_at | 2025-06-30T12:04:50.000000 | | OS-SRV-USG:terminated_at | None | | accessIPv4 | None | | accessIPv6 | None | | addresses | pb-network=192.168.100.4 | | adminPass | 96sAF9SZq8aF | | config_drive | None | | created | 2025-06-30T12:00:47Z | | description | None | | flavor | description=, disk='0', ephemeral='0', extra_specs.aggregate_instance_extra_specs:cpu_type='regular', extra_specs.quota:disk_total_iops_sec='200', id='m4.c4', is_disabled=, | | | is_public='True', location=, name='m4.c4', original_name='m4.c4', ram='4096', rxtx_factor=, swap='0', vcpus='4' | | hostId | e5e4bff645a240c159548a6f39ce589750c45301ddb8494a0549910f | | host_status | None | | id | db859883-b7df-4c81-913c-64d631528040 | | image | copy-1-all-disk (88b8c26f-38d3-43a4-9d5c-9415a0529f67) | | key_name | None | | locked | None | | locked_reason | None | | name | pb-testy-disk-from-snapshot | | pinned_availability_zone | None | | progress | None | | project_id | 14c8ad7ba1734841a8a05609e3925570 | | properties | None | | security_groups | name='pb-sec-group' | | | name='default' | | server_groups | None | | status | ACTIVE | | tags | | | trusted_image_certificates | None | | updated | 2025-06-30T12:04:50Z | | user_id | cc0b2429f0ea446f857de292784462cc | | volumes_attached | delete_on_termination='False', id='16fec94c-84a6-4bca-88bb-900a149d343e' | | | delete_on_termination='False', id='0b2a8238-c0df-4ebd-9bf0-004e4265787c' | | | delete_on_termination='False', id='ca2f9a6d-1657-4ea5-8e6f-def85f342b22' | +-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ ``` **B) Odtworzenie instancji ze zmienionym typem wolumenu root (np. zmiana IOPS):** Do tej operacji potrzebujemy snapshota wolumenu root/systemowego. 1) Weryfikujemy snapshoty: ![pic1](images/Przebudowa_VM_przez_CLI_1.png) 2) Tworzymy nowy wolumen z wcześniej utworzonego snapshota oraz weryfikujemy: ``` (python-3.10) [2025-06-30 14:50][WAW_1B]root@NB-374:~$openstack volume create --snapshot 80509bd7-d742-49a5-a6cd-bdf50ac0a06e --type 8000iops --bootable root-disk-retyped (...) (python-3.10) [2025-06-30 14:50][WAW_1B]root@NB-374:~$openstack volume list --long | grep root-disk | 726a603b-4917-4bfa-bb4a-b905d14b6589 | root-disk-retyped | available | 10 | 8000iops | true | | | ``` 3) Rekreujemy instancję wskazując jako źródło nasz nowy wolumen, dodatkowo zmieniamy interesujące nas parametry (np. flavor, klucze ssh): ``` (python-3.10) [2025-06-30 14:50][WAW_1B]root@NB-374:~$openstack server create \ --volume 726a603b-4917-4bfa-bb4a-b905d14b6589 \ --flavor m4.c4 \ --network pb-network \ --security-group pb-sec-group \ --security-group default \ --key-name pb-ssh-test-rsa \ --wait \ pb-testy-disk-volume-retyped ``` 4) Instancja została utworzona. Weryfikujemy parametry: ``` +--------------------------------------+------------------------------+---------+-----------------------------------------------+--------------------------+----------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+------------------------------+---------+-----------------------------------------------+--------------------------+----------+ | d929cd77-5978-4de3-854e-92e7a286ed13 | pb-testy-disk-volume-retyped | ACTIVE | pb-network=192.168.100.210 | N/A (booted from volume) | m4.c4 | | 77fcfdc1-bee4-468d-8f22-feba77bd09bd | pb-testy-disk | ACTIVE | pb-network=192.168.100.228 | N/A (booted from volume) | m1.c2-hc | +--------------------------------------+------------------------------+---------+-----------------------------------------------+--------------------------+----------+ ``` Zmiana flavora instancji ========================== W przypadku, gdy chcemy **zmniejszyć ilość CPU/RAM lub zwiększyć**, konieczne jest przebudowanie instancji do docelowego **typu flavora**. 1) Weryfikujemy dostępne zasoby oraz flavory - ``openstack flavor list`` - ``openstack quota show --compute --usage | grep -Ev "\-1"`` ``` (python-3.10) [2025-06-30 15:20][WAW_1B]root@NB-374:~$openstack flavor list +--------------------------------------+---------------+------+------+-----------+-------+-----------+ | ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public | +--------------------------------------+---------------+------+------+-----------+-------+-----------+ | 18d5a1c2-4ab4-47e1-af39-40b94cf7fdfd | m4.c1.d50 | 4096 | 50 | 0 | 1 | False | | 2ee37eb7-a7a9-42d2-bd88-bba6d396d727 | m1.c2-hc | 1024 | 0 | 0 | 2 | False | | 493f12da-9b86-4704-97cd-1d4bc5976d24 | m8.c1.d50-hc | 8192 | 50 | 0 | 1 | False | | 53c7ef5d-a0a6-4215-a4a0-ea49bff43008 | local-storage | 1024 | 10 | 0 | 1 | False | | 75e3732b-cfe0-493a-a3ba-7d28e07adbf2 | m2.c1 | 2048 | 0 | 0 | 1 | False | | 85416389-769e-4f59-a3a4-536a814005e5 | m2.c2 | 2048 | 0 | 0 | 2 | False | | a2abe272-2517-4a02-9820-00e656a1de6f | m2.c4 | 2048 | 0 | 0 | 4 | False | | fcb4cbc1-535e-47a0-8fa2-e1cc20791b8d | m4.c4 | 4096 | 0 | 0 | 4 | False | +--------------------------------------+---------------+------+------+-----------+-------+-----------+ (..) (python-3.10) [2025-06-30 15:20][WAW_1B]root@NB-374:~$openstack quota show --compute --usage | grep -Ev "\-1" +----------------------+-------+--------+----------+ | Resource | Limit | In Use | Reserved | +----------------------+-------+--------+----------+ | cores | 20 | 16 | 0 | | instances | 30 | 7 | 0 | | ram | 51200 | 16384 | 0 | | fixed_ips | 0 | 0 | 0 | | floating_ips | 0 | 0 | 0 | | networks | 0 | 0 | 0 | | security_group_rules | 0 | 0 | 0 | | security_groups | 0 | 0 | 0 | | injected-file-size | 10240 | 0 | 0 | | injected-path-size | 255 | 0 | 0 | | injected-files | 5 | 0 | 0 | | key-pairs | 100 | 0 | 0 | | properties | 128 | 0 | 0 | | server-group-members | 10 | 0 | 0 | | server-groups | 10 | 0 | 0 | +----------------------+-------+--------+----------+ ``` 2) Zmieniamy instancję ``pb-testy-disk-volume-retyped`` z flavora **4.4** na **2.2**. - ``openstack server list`` - ``openstack server resize --flavor m2.c2 pb-testy-disk-volume-retyped`` - ``openstack server show pb-testy-disk-volume-retyped -c status -c flavor`` - ``openstack server resize confirm pb-testy-disk-volume-retyped`` - ``openstack server show pb-testy-disk-volume-retyped -c status -c flavor`` ``` (python-3.10) [2025-06-30 15:17][WAW_1B]root@NB-374:~$openstack server list +--------------------------------------+------------------------------+---------+-----------------------------------------------+--------------------------+----------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+------------------------------+---------+-----------------------------------------------+--------------------------+----------+ | d929cd77-5978-4de3-854e-92e7a286ed13 | pb-testy-disk-volume-retyped | ACTIVE | pb-network=192.168.100.210 | N/A (booted from volume) | m4.c4 | (..) (python-3.10) [2025-06-30 15:22][WAW_1B]root@NB-374:~$openstack server resize --flavor m2.c2 pb-testy-disk-volume-retyped (python-3.10) [2025-06-30 15:28][WAW_1B]root@NB-374:~$openstack server show pb-testy-disk-volume-retyped -c status -c flavor +--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | flavor | description=, disk='0', ephemeral='0', extra_specs.aggregate_instance_extra_specs:cpu_type='regular', extra_specs.quota:disk_total_iops_sec='200', id='m2.c2', is_disabled=, is_public='True', location=, name='m2.c2', | | | original_name='m2.c2', ram='2048', rxtx_factor=, swap='0', vcpus='2' | | status | VERIFY_RESIZE | +--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ (python-3.10) [2025-06-30 15:30][WAW_1B]root@NB-374:~$openstack server resize confirm pb-testy-disk-volume-retyped (python-3.10) [2025-06-30 15:30][WAW_1B]root@NB-374:~$openstack server show pb-testy-disk-volume-retyped -c status -c flavor +--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | flavor | description=, disk='0', ephemeral='0', extra_specs.aggregate_instance_extra_specs:cpu_type='regular', extra_specs.quota:disk_total_iops_sec='200', id='m2.c2', is_disabled=, is_public='True', location=, name='m2.c2', | | | original_name='m2.c2', ram='2048', rxtx_factor=, swap='0', vcpus='2' | | status | ACTIVE | +--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ (..) ```