Get VM data
openstack server show -c name -c id -c addresses -c OS-EXT-SRV-ATTR:host ${SERVER_ID}
nova interface-list ${SERVER_ID}
nova migration-list --instance-uuid ${SERVER_ID} | grep -v "2019-"
openstack server create u2204-vm1 \
--image "Ubuntu 22.04" \
--flavor m1.small \
--key-name foo-key \
--network foo-net \
--security-group default \
--availability-zone=eu1-az1CLI
# Delete instance
openstack server delete ${SERVER_ID}
# list all servers from all projects
openstack server list --all-projects
# search VM by IP wildcard
openstack server list --ip 10.0.10 [--all-projects]
# get IDs only from server
openstack server list -c ID -f value
# get all servers using windows images
for IMAGE in $(openstack image list --long --os-cloud=prod-admin -c ID -c Name -f value | grep -i "Windows" | cut -d" " -f 1); do
openstack server list --long --all-projects --os-cloud=prod-admin --image ${IMAGE}
done
# Add floating IP
openstack server add floating ip ${SERVER_ID} \
$(openstack floating ip create public -c floating_ip_address -f value)
# resize
openstack server resize ...
openstack server resize --confirm ${SERVER_ID}
# attach port to VM
openstack server add port VM1 NET1-PORT1
# list instances / server
openstack server list
openstack console log show foo-vm1
# get hypervisor
openstack server list
ssh compute1 ps axf | grep ${SERVER_ID}
# Show console URL
openstack console url show ${SERVER_ID}
# Reboot
openstack server reboot --hard ${SERVER_ID}
# get server ports
nova interface-list ${SERVER_ID}
# set VM properties
openstack server set --property "sysadmin=foo" --property "os=Ubuntu" ${SERVER_ID}
# remove VM property
openstack server unset --property os ${SERVER_ID}
# Update / fix server status
openstack server set --state active ${SEVER_ID}
openstack server show -c id -c name -c status -c OS-EXT-SRV-ATTR:hypervisor_hostname ${SEVER_ID}
# allow SSH incomming access
SECURITY_GROUP_ID=$(openstack server show -c security_groups -f value ${SERVER_ID} | cut -d "'" -f2)
openstack security group rule create --protocol tcp --dst-port 22:22 --remote-ip 0.0.0.0/0 ${SECURITY_GROUP_ID}
# allow HTTP(s) incomming access
SERVER_NAME=vm1
PROJECT_ID=$(openstack server show ${SERVER_NAME} -c project_id -f value)
SECURITY_GROUP_ID=$(openstack security group list --project ${PROJECT_ID} -c ID -f value)
openstack security group rule create --protocol tcp --dst-port 80:80 --remote-ip 0.0.0.0/0 ${SECURITY_GROUP_ID}
openstack security group rule create --protocol tcp --dst-port 443:443 --remote-ip 0.0.0.0/0 ${SECURITY_GROUP_ID}
# rename VM
openstack server set --name vm1-old ${SERVER_ID}
# connect to SSH (by floating IP)
openstack server ssh --login ubuntu --public ${SERVER_ID}
Snapshot and restore
https://clouddocs.web.cern.ch/using_openstack/backups.html
# backup
openstack server image create --name vm1-snap1 vm1
openstack image list
openstack server rebuild --image vm1-snap1 vm1
openstack server show vm1 -c name -c status
# restore
openstack server rebuild --image ab317678-638d-481e-9249-831d68d854d5 vm1
Install qemu-guest-agent (run inside of a VM)
https://www.sebastien-han.fr/blog/2015/02/09/openstack-perform-consistent-snapshots-with-qemu-guest-agent/
apt install -y qemu-guest-agent
# hw_qemu_guest_agent=yes
Get instance meta data
https://docs.openstack.org/nova/latest/user/metadata.html
curl http://169.254.169.254/openstack/latest/meta_data.json | jq
curl http://169.254.169.254/openstack/latest/network_data.json | jq
# IPv6
NIC=$(ls /sys/class/net/ | grep -v lo)
curl -s http://[fe80::a9fe:a9fe%25${NIC}]/openstack/latest/meta_data.json | jq
# get flavor
curl http://169.254.169.254/latest/meta-data/instance-type
# get security-groups
curl http://169.254.169.254/latest/meta-data/security-groups
# get availability-zone
curl http://169.254.169.254/latest/meta-data/placement/availability-zoneList VMs
# list VMs and tenants
nova list --all-tenants
nova list --all-tenants --fields tenant_id
openstack server list --all --long --sort-column Name -f json
openstack server list --all --long --sort-column Name --name foo
# show all deleted VMs
openstack server list --deleted --allFix task_state "powering-on"
for SERVER_ID in $(openstack server list --all -c ID -f value); do
openstack server show ${SERVER_ID} -c id -c OS-EXT-STS:task_state -f value | paste - - | grep -v None
done
openstack server set --state active ${SERVER_ID}
openstack server reboot ${SERVER_ID} [--hard]https://docs.openstack.org/cinder/latest/cli/cli-manage-volumes.html
openstack console url show ${SERVER_ID}search for VM on all compute nodes
SERVER_ID=xxxx-xxxx-xxxx-xxxx
for NODE in $(openstack compute service list --service nova-compute -c Host -f value); do
echo ${NODE}
ssh ${NODE} ps axf | grep ${SERVER_ID}
ssh ${NODE} docker exec -i nova_libvirt virsh dominfo ${SERVER_ID}
doneEvent
# list events
openstack server event list ${SERVER_ID}
# server event show
openstack server event show ${SERVER_ID} ${REQUEST_ID}Get server / tanent data
SERVER_IDS="
07111f96-c752-4faa-b9dd-1ec962c7b6dc
b41c7bfb-0411-48c9-b133-6ee95c4dc20e
894abf55-2257-469f-b102-987a90342abe
"
for SERVER_ID in ${SERVER_IDS}; do
SERVER_JSON=$(openstack server show ${SERVER_ID} -f json)
SERVER_NAME=$(echo ${SERVER_JSON} | jq -r .name)
PROJECT_ID=$(echo ${SERVER_JSON} | jq -r .project_id)
PROJECT_JSON=$(openstack project show ${PROJECT_ID} -f json)
PROJECT_NAME=$(echo ${PROJECT_JSON} | jq -r .name)
DOMAIN_ID=$(echo ${PROJECT_JSON} | jq -r .domain_id)
DOMAIN_JSON=$(openstack domain show ${DOMAIN_ID} -f json)
DOMAIN_NAME=$(echo ${DOMAIN_JSON} | jq -r .name)
echo "${SERVER_ID} ${SERVER_NAME} ${DOMAIN_NAME} ${PROJECT_NAME}"
done
Transfer VM
https://docs.openstack.org/cinder/latest/cli/cli-manage-volumes.html
openstack volume list --all-projects --name docs1-dev
openstack volume transfer request create 4aef794d-9f79-4d24-a220-211dc4863424Fix "Cannot 'start' instance while it is in vm_state resized" / "Instance has not been resized."
openstack server list --all --status VERIFY_RESIZE
# openstack server start ${SERVER_ID}
Cannot 'start' instance af46d773-841f-4774-8bdd-29face6a3757 while it is in vm_state resized (HTTP 409) (Request-ID: req-ccb5d5a8-8a1a-427e-a55a-8f72e3d9216d)
# openstack server resize confirm ${SERVER_ID}
Instance has not been resized. (HTTP 400) (Request-ID: req-ccf5b1c4-c0bd-4778-b8e4-bd17845c4355)
openstack server set --state active ${SERVER_ID}
openstack server stop ${SERVER_ID}Snippets
openstack server list --all-projects --name dummy -c ID -f value | xargs -L1 openstack server show -c project_id -f value | sort -u
List all soft-deleted VMs
https://raymii.org/s/articles/Openstack_Soft_Delete_-_recover_deleted_instances.html
# find SOFT_DELETED server as admin
openstack server list --deleted --all-projects --status SOFT_DELETED
# find SOFT_DELETED server (as unprivileged user)
PORT_IDS=$(openstack port list --long -f json | jq -r '.[] | select(."Device Owner" | contains("compute")) .ID')
for PORT_ID in ${PORT_IDS}; do
SERVER_ID=$(openstack port show ${PORT_ID} -c device_id -f value)
SOFT_DELETED_SERVER_ID=$(openstack server show ${SERVER_ID} -f json | jq -r '. | select(.status == "SOFT_DELETED") .id')
echo ${SOFT_DELETED_SERVER_ID}
echo openstack server delete --force ${SOFT_DELETED_SERVER_ID}
doneForce remove volume attachment from nova
select * from nova.block_device_mapping where deleted_at is NULL and attachment_id is NOT NULL and volume_id = '${VOLUME_ID}'\G
BEGIN;
UPDATE nova.block_device_mapping SET deleted=id, deleted_at=NOW() WHERE id='${ID}' LIMIT 1;
COMMIT;
select * from cinder.volume_attachment where deleted <> '1' and volume_id = '${VOLUME_ID}'\GList server volumes
SERVER_IDS="
bd23500a-494d-4916-87a6-4124b34f91d3
54aa5d05-d1fa-46c7-bd3d-885e5aaf3bd8
3b61c090-6ffd-4eb0-b7ba-f9b9a9629613
"
for SERVER_ID in ${SERVER_IDS}; do
echo "SERVER_ID: ${SERVER_ID}"
FLAVOR_ID=$(openstack server show ${SERVER_ID} -c flavor -f value | cut -d "(" -f2 | cut -d")" -f1)
FLAVOR_DISK=$(openstack flavor show ${FLAVOR_ID} -c disk -f value)
echo "FLAVOR_DISK: ${FLAVOR_DISK}"
VOLUME_IDS=$(openstack server show ${SERVER_ID} -c volumes_attached -f json | jq -r .volumes_attached[].id)
for VOLUME_IDS in ${VOLUME_IDS}; do
VOLUME_SIZE=$(openstack volume show ${VOLUME_IDS} -c size -f value)
echo "VOLUME_SIZE: ${VOLUME_SIZE}"
done
echo
doneDelete / cleanup VM from DB
UPDATE instances SET deleted=1, deleted_at=NOW() WHERE uuid = '1e7878b4-2cc1-465d-9d77-268f4ea53586';
Links
https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/server.html