Прежде всего меня поражает, что так мало информации о openstack и примерах сценариев, но у меня нет вопроса
Я хочу создать снимок и простой способ восстановить снимок. Поскольку наш хостинг-провайдер использует базовое хранилище, я не могу использовать команду rebuild, поэтому мне нужно уничтожить работающий vm и воссоздать его с образом снимка в качестве базы. Создание образа работает только тогда, когда вся информация о работающем vm предоставляется в качестве входных параметров, и здесь возникают проблемы, которые у меня есть.
необходимая информация предоставляется 3 командами
command1: nova show Вывод: + -------------------------------------- + ------------------------------------------------------------------------------------------------------------------------------------------------------------------ + |Недвижимость |Значение |+ -------------------------------------- + ----------------------------------------------------------------------------------------------------------------------------------------------------------------- + |NWFINFRA_1600 сеть |10.0.0.39 ||OS-DCF: diskConfig |РУКОВОДСТВО ||OS-EXT-AZ: доступность_зона |gn3a ||OS-EXT-STS: power_state |1 ||OS-EXT-STS: task_state |- ||OS-EXT-STS: vm_state |активный ||OS-SRV-USG: launch_at |2019-10-02T14: 25: 21.000000 ||OS-SRV-USG: terminated_at |- ||accessIPv4 |||accessIPv6 |||config_drive |||создано |2019-10-02T14: 25: 05Z ||описание |- ||вкус: диск |0 ||вкус: эфемерный |0 ||вкус: extra_specs |{"ostype": "win", "hw: cpu_cores": "1", "hw: cpu_sockets": "2"} ||вкус: оригинальное_имя |win.2large ||вкус: баран |8192 ||вкус: обмен |0 ||вкус: vcpus |2 ||hostId |18aa94c61106a53b2d9e672e93619a6fce76abb1ee6ba9da471491f9 ||id |70941fbf-9143-4f1c-a5e7-979f818ace23 ||изображение |IFW039-InstanceSnapshot (8ee1104d-55e4-4c99-93e5-ceb4a53ce13f) ||имя_ключа |- ||заблокирован |Ложь ||метаданные |{} ||имя |IWF039 ||os-extended-объемы: volume_attached |[{"id": "1134fe12-777b-4c26-ac2b-e6ecb6ad4f70", "delete_on_termination": false}, {"id": "f610a46e-46ad-460f-81b3-e2b34acfbbfc", "delete_on_termination": false}]] ||прогресс |0 ||статус |ACTIVE ||теги |[] ||tenant_id |4c15fd467dde4bd6a25427d6bab64a7f ||trust_image_certificates |- ||обновлено |2019-10-02T14: 25: 21Z ||user_id |ddff2ce854114bef873bac9a1476805e |+ -------------------------------------- + ----------------------------------------------------------------------------------------------------------------------------------------------------------------- +
Команда 2: ./Scripts/openstack port show NWFINFRA_1600_IWF039, где NWFINFRA_1600_IWF039 - это комбинация предыдущего вывода сети NWFINFRA_1600 и имени сервера IWF039 Вывод: + ------------------------- + --------------------------------------------------------------------------------------------------------------------------------------------------------------------- + |Поле |Значение |+ ------------------------- + --------------------------------------------------------------------------------------------------------------------------------------------------------------------- + |admin_state_up |UP ||allow_address_pairs |||binding_host_id |Нет ||binding_profile |Нет ||binding_vif_details |Нет ||binding_vif_type |Нет ||binding_vnic_type |нормальный ||создал_ат |2019-10-02T06: 49: 08Z ||data_plane_status |Нет ||описание |||идентификатор_устройства |70941fbf-9143-4f1c-a5e7-979f818ace23 ||устройство_владелец |вычислить: gn3a ||dns_assignment |fqdn = 'iwf039.rijkscloud.local.', hostname = 'iwf039', ip_address = '10 .0.0.39 '||dns_domain |||dns_name |iwf039 ||extra_dhcp_opts |||fixed_ips |ip_address = '10 .0.0.39 ', subnet_id =' 3298e8d0-b317-465c-8757-c1a4f2cad298 '||id |b49a7d3a-bb0d-49cb-a04b-64c5dbf9df20 ||местоположение |cloud = '', project.domain_id = 'default', project.domain_name =, project.id = '4c15fd467dde4bd6a25427d6bab64a7f', project.name = 'vws-pgb', region_name = 'Groningen3', zone = ||mac_address |fa: 16: 3e: 99: cc: 3c ||имя |NWFINFRA_1600_IWF039 ||network_id |450dcc7a-5e55-4e38-9f4e-de9a9c685502 ||port_security_enabled |Ложь ||идентификатор_проекта |4c15fd467dde4bd6a25427d6bab64a7f ||пропагат_uplink_status |Нет ||qos_policy_id |Нет ||resource_request |Нет ||номер редакции |15 ||security_group_ids |||статус |ACTIVE ||теги |||trunk_details |Нет ||updated_at |2019-10-03T11: 10:00 |+ ------------------------- + --------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
сэти выходные данные я могу создать команду сборки для восстановления снимка: nova boot --poll --flavor win.2large --image IFW039-InstanceSnapshot --security-groups default --availability-zone gn3a --nic net-id = 450dcc7a-5e55-4e38-9f4e-de9a9c685502 IWF039
примечание: изображение - это имя созданного снимка
Я пытаюсь создать сценарий, чтобы у меня был простой снимоксоздать и восстановить процедуру
, но я застрял на макете таблицы вывода. Это действительно хорошо, но я не могу использовать его в своем скрипте для перенаправления вывода во входные переменные.
Я пытался использовать это: {read foo;читать имя ID MAC IP-статус;} <<(./ Сценарии / список портов openstack --server IWF039 | sed 's / + -------------------------------------- + ---------------------- + ------------------- + -------------------------------------------------------------------------- + -------- + // '| sed's / | // '| sed' s / MAC-адрес / MAC / '| sed' s / Фиксированные IP-адреса / IP / ') </p>
Но переменные получают содержимое типа' | 'char и т. д.
Итак, echo $ Name дает '|'
Должен быть более простой способ, но я не могу его увидеть.
Пожалуйста, помогите ...
Мне удалось заставить его почти работать, используя awkвместо grep:
теперь у меня есть этот код: #/bin/bash # # Query needed variables # echo -e "\nQuery needed information" NETWORK=$(nova show IWF039 | awk '/network/ {print $2}') ZONE=$(nova show IWF039 | awk '/OS-EXT-AZ:availability_zone/ {print $4}') FLAVOR=$(nova show IWF039 | awk '/flavor:original_name/ {print $4}') SERVERID=$(nova show IWF039 | awk -F '|' '/id/ {print $3; exit}') NETWORKPORT=$(nova interface-list IWF039 | awk -F '|' '/ACTIVE/ {print $3}') # Print out variables echo "network: $NETWORK" echo "zone: $ZONE" echo "flavor: $FLAVOR" echo "server_id: $SERVERID" echo "network_port_id: $NETWORKPORT" # Remove current instance echo -e "\nRemove current instance" nova delete $SERVERID # Rebuild instance from snapshot image echo -e "\nRebuild instance from snapshot" nova boot --poll --flavor $FLAVOR --image IFW039-InstanceSnapshot2 --security-groups default --availability-zone $ZONE --nic port-id=$NETWORKPORT IWF039
Если я запускаю скрипт, последний элемент, однако, например, IWF039, который является именем экземпляра, который я хочу использовать, выдает мнеошибка: ошибка: нераспознанные аргументы: IWF039
кто-нибудь может сказать мне, почему?
Если я запускаю строку в командной строке, она работает, только не из сценария bash