PR 링크: **https://review.opendev.org/c/openstack/python-openstackclient/+/80742**
openstack server ‘--long’ option 만으로 확인 가능한 column 들을 openstack server list ‘-c’ option 명령어로도 이를 확인할 수 있도록 기능 개선
컨트리뷰톤 Challenges 기간 중 openstack command 동작 원리를 코드 레벨에서 분석 중 ‘--long’ option 에 해당하는 column 을 확인하고자 ‘openstack server list -c <column명>’ 명령어를 사용했지만 다음과 같은 Error 처리가 된 것을 볼 수 있었습니다.
stack@jho-wallaby:~/devstack$ openstack server list -c "Host"
No recognized column names in ['Host']. Recognized columns are ('ID', 'Name', 'Status', 'Networks', 'Image', 'Flavor').
Error 분석 결과 python-openstackcli.compute.v2.server.py 에서 해당 명령어가 수행되었으며 ‘--long' option 이 없으면 관련 column 들을 처리할 수 없다는 것을 확인할 수 있었습니다.
‘-c’ option 만으로 ‘--long’ option 내에 있는 column 들을 처리할 수 있도록 코드를 수정했습니다. 또한, 이를 위한 test case 가 필요하여 해당 명령어 관련 test code 를 수정 후 PR 을 올렸으며 Merge 되었습니다.
PR 링크: **https://review.opendev.org/c/openstack/python-openstackclient/+/811006**
‘openstack volume create --size 1 --read-only <volume name>’ 명령어 수행 시 ‘--read-only’ option 적용되지 않은 volume 이 생성되는 버그를 수정했습니다.
다음과 같이 properties 에 ‘read-only’ option 이 설정되지 않은 것을 확인할 수 있습니다.
해당 명령어가 python-openstackcli.openstackclient.volume.v2.volume.py 에서 수행되는 것을 확인 후 버그가 나타나는 이유를 다음과 같이 찾았습니다.
def update_readonly_flag(self, context, volume, flag):
context.authorize(vol_action_policy.UPDATE_READONLY_POLICY, target_obj=volume)
**if volume["status"] != "available":**
msg = _(
"Volume %(vol_id)s status must be available "
"to update readonly flag, but current status is: "
"%(vol_status)s."
) % {"vol_id": volume["id"], "vol_status": volume["status"]}
raise exception.InvalidVolume(reason=msg)
self.update_volume_admin_metadata(
context.elevated(), volume, {"readonly": str(flag)}
)
LOG.info(
"Update readonly setting on volume " "completed successfully.", resource=volume
)
if volume["status"] != "available": volume의 status가 ‘available’ 이 아니라면 예외를 처리하게 되어있습니다. volume_client.volumes.create 으로 생성된 volumne 의 status 는 ‘creating’ 상태를 거친 후 ‘available’ 되는데 ‘creating’ 상태에 ‘read-only’ option 을 처리하려해서 Error 가 발생되었습니다.