4주차 과제 :
openstack user [CRUD]
명령어 정리- functional test 구현
openstack user [CRUD]
OpenStack Identity Service(Keystone) 에서 User(사용자) 리소스를 Create / Read / Update / Delete 하는 명령어
- Create :
openstack user create
openstack user create <USER_NAME> \
--domain <DOMAIN_NAME_OR_ID> \
--password <PASSWORD> \
[--email <EMAIL>] \
[--description <TEXT>] \
[--enable | --disable]
<USER_NAME>
: 새로 만들 사용자의 이름--domain
: 사용자 소속 도메인--password
: 계정 비밀번호--email
: 이메일 주소 (선택)--enable
/--disable
: 생성 시 활성/비활성 여부 지정
- Read :
openstack user show
# 개별 사용자 조회
openstack user show <USER_NAME_OR_ID>
# 사용자 목록 조회
openstack user list [--domain <DOMAIN>] [--long]
- Update :
openstack user set
openstack user set <USER_NAME_OR_ID> \
[--name <NEW_NAME>] \
[--email <EMAIL>] \
[--password <PASSWORD>] \
[--enable | --disable]
- 사용자의 이름, 이메일, 비밀번호 변경
- 활성/비활성 상태 변경
- Delete :
openstack user delete
openstack user delete <USER_NAME_OR_ID>
- 해당 사용자를 Keystone에서 삭제
- 삭제 시, 이 사용자가 속한 프로젝트나 역할과의 연결도 함께 제거됨
openstack user list 실행 흐름
# openstackclient/identity/v3/user.py : ListUser.take_action
class ListUser(command.Lister):
def take_action(self, parsed_args):
# 1. Identity SDK 핸들 준비
identity_client = self.app.client_manager.sdk_connection.identity
# 2. 입력 파라미터 확인
domain = find_domain_id_if_given(parsed_args.domain)
group = find_group_id_if_given(parsed_args.group,
domain_hint=parsed_args.domain)
enabled = parsed_args.is_enabled
# 3. 데이터 조회
if parsed_args.project:
# 1) 프로젝트 ID 확인
project = find_project_id(parsed_args.project, domain)
# 2) 할당된 역할 확인
assignments = identity_client.role_assignments_filter(project=project)
# 3) 사용자 ID만 고유 집합으로 수집(여러 롤 중복 제거)
user_ids = {a.user['id'] for a in assignments if a.user}
# 4) 각 사용자 ID를 find_user()로 개체화
data = [identity_client.find_user(uid, ignore_missing=False)
for uid in user_ids]
...
# 4. 출력 컬럼 구성
if parsed_args.long:
columns = [
'ID', 'Name',
'Default Project Id',
'Domain Id',
'Description', 'Email', 'Is Enabled'
]
column_headers = ['ID', 'Name', 'Project', 'Domain',
'Description', 'Email', 'Enabled']
else:
columns = ['ID', 'Name']
column_headers = columns
# 5. 포맷팅하여 반환
return (
column_headers,
(utils.get_item_properties(s, columns, formatters={}) for s in data),
)