본문으로 바로가기

오픈스택에서 VM 생성시 특정 가용성 존에서 생성이 안되는 문제가 발생했습니다. 그래서 nova 로그를 확인해보니 아래와 같은 에러가 발생하며 생성이 안되었습니다.
ResourceProviderCreationFailed: Failed to create resource provider
해결 방법이 좀 복잡합니다. 복잡한 과정은 버리고 좀 간략하게 정리합니다. 전체 과정은 https://bugzilla.redhat.com/show_bug.cgi?id=1774243#c2 에서 확인바랍니다.

원인

  • evacuate나 migration 과정에서 오류가 발생해 진행되지 못한 VM을 따로 처리하지 않고 삭제하여 발생

해결 방안 - 1

  • 현재 할당된 내용을 복원할 필요가 없는 경우
openstack resource provider list --name $host_name
openstack resource provider show --allocations $rp_uuid # 이전 명령어에서 나온 uuid
openstack resource provider allocation delete $server_uuid  # 해당 rp에 할당된 서버 삭제
openstack resource provider delete $rp_uuid
systemctl restart nova-compute
  • 위의 명령어를 차례로 실행하시면 됩니다.

해결 방안 - 2

  • 현재 할당된 내용을 복원할 경우
  • 이건 시도하진 않았지만 일단 최대한 간략하게 명령어 위주로만 정리
openstack resource provider list --name $host_name
openstack resource provider show --allocations $rp_uuid # 이전 명령어에서 나온 uuid
openstack --os-placement-api-version 1.12 resource provider allocation show $server_uuid   # 복원을 위한 저장, step 4a
# 위 단계에서 allocation에 resource provider가 하나만 있는 경우 모든 호스트에서 삭제
openstack resource provider allocation delete $server_uuid
# 위 단계에서 여러 할당이 있는 경우 $rp_uuid를 생략하여 서버에 대한 host 할당만 삭제
openstack --os-placement-api-version 1.12 resource provider allocation set $server_uuid \
  --project-id <project uuid from step 4a> \
  --user-id <user uuid from step 4a> \
  --allocation rp=<other rp uuid than compute host>,<resource class from step 4a>=<value from step 4a> \
  repeat --allocation for all the rest of the allocations for resource providers other than compute host
openstack resource provider delete $rp_uuid
systemctl restart nova-compute
openstack resource provider list --name $host_name  # new_rp_uuid
openstack --os-placement-api-version 1.12 resource provider allocation set $server_uuid \
  --project-id <project uuid from step 4a> \
  --user-id <user uuid from step 4a> \
  --allocation rp=$new_rp_uuid,<resource class from step 4a>=<value from step 4a> \
  repeat --allocation for all allocations you saved from step 4a