1. Add more filter option of columns for server list -c COLUMN

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 을 올린 상태입니다.


2. Fix bug that readonly option doesn’t setup with volume create.

PR 링크: **https://review.opendev.org/c/openstack/python-openstackclient/+/811006**

요약

‘openstack volume create --size 1 --read-only <volume name> 명령어 수행 시 ‘--read-only’ option 적용되지 않은 volume 이 생성되는 버그를 수정했습니다.

상세내용

스크린샷 2022-05-04 오전 12.12.49.png

다음과 같이 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 가 발생되었습니다.