OpenStack2014.04.10 09:33
안녕하세요~~~ 

오늘은 오픈스택을 테스트하면서 불편했던 것을 간단한 쉘 스크립트 하나로 좀 더 편해보고자하는자 하는 제 경험을 한번 올려봅니다.


오픈스택을 테스트하다보면 사용자를 커맨드 창에서 생성해야 할 일이 생깁니다. 그때마다 테넌트를 만들고, 사용자 계정을 다시 생성하고, 계정을 생성한 후 롤을 추가해야 합니다. 처음에는 공부하는 셈치고 한번 해 봅니다. 매번 이과정을 거쳐 사용자를 생성하려니 너무 너무 귀찮습니다. 또한 Swift를 사용한다면 해당 계정으로 로그인했을 경우 해당 사용자가 오브젝트 파일을 읽고 쓸 수 있도록 ACL 권한 또한 주어야 합니다. 


그래서, 생각끝에 아이디와 패스워드만 넣으면 테넌트, 계정, 롤 추가, Swift 컨테이너 생성, 컨테이너에 ACL 추가까지 한번 처리할 수 있는 쉘 스크립트를 짜보자~!! 라는 생각이 들었습니다. 아래 보이는 스크립트가 바로 해당 쉘 스크립트의 내용입니다. 노란 색으로 되어 있는 값들만 변경해 주시면 누구나 가져가서 테스트 해 보실 수 있습니다. 

#!/bin/bash

######################################################

# Created by 2014-04-10 OpenStack Korea Community NaleeJang #

######################################################


# 로그인할 어드민 계정 정보를 환경변수로 등록한다.

export OS_USERNAME=admin

export OS_PASSWORD=admin

export OS_TENANT_NAME=admin

export OS_AUTH_URL=http://{your keystone ip}:5000/v2.0



# 생성할 ID와 PW 입력을 받는다.

echo "input username : "

read USERNAME

echo "input password : "

read PASSWORD


# ROLE ID를 조회한다.

MEMBER_ROLE=$(keystone role-list | awk "/ Member / { print \$2 }")


echo ""

echo "UserName : " $USERNAME

echo "Password : " $PASSWORD

echo "Role Id : " $MEMBER_ROLE


# 테넌트를 생성한 후 테넌트 ID는 따로 저정해 둔다.

echo ""

echo "TENANT CREATE"

TENANT_ID=$(keystone tenant-create --name $USERNAME | awk "/ id / { print \$4 }")

echo "TENANT_ID : " $TENANT_ID


# 사용자를 생성한다.

echo "USER CREATE"

keystone user-create --name $USERNAME \

    --tenant $TENANT_ID \

    --pass $PASSWORD \

    --email $USERNAME@email.com \

    --enabled true


# 사용자 계정에 롤을 추가한다.

echo "USER ROLE ADD"

keystone user-role-add --user $USERNAME \

                       --role $MEMBER_ROLE \

      --tenant $TENANT_ID



# 사용자 계정에 컨테이너와 권한을 추가한다.

echo "Add ACL to Account"

AUTH_TOKEN=ac288beb7bc4496d8d173f9f04b8e0fe #keystone token-get으로 얻은 token을 입력한다.

# 사용자 계정과 같은 이름의 컨테이너를 데이터를 읽을 수 있도록 권한을 추가하여 생성한다.

swift --os-auth-token $AUTH_TOKEN --os-storage-url http://{your swift ip}:8081/v1/AUTH_$TENANT_ID post $USERNAME -r "$USERNAME:$USERNAME"

# 해당 사용자가 컨테이너에 데이터를 쓸 수 있도록 권한을 추가한다.

swift --os-auth-token $AUTH_TOKEN --os-storage-url http://{your swift ip}:8081/v1/AUTH_$TENANT_ID post $USERNAME -w "$USERNAME:$USERNAME"

# 생성된 컨테이너에 권한 설정이 잘 되었는지 확인한다.

swift --os-auth-token $AUTH_TOKEN --os-storage-url http://{your swift ip}:8081/v1/AUTH_$TENANT_ID stat $USERNAME



자 그럼, 방금 만든 쉘 스크립트를 한번 실행해 볼까요? 실행하면 아래와 같이 사용자가 생성되는 것을 확인 하실수 있습니다. 아래 노란 색으로 칠해져 있는 글씨는 제가 직접 입력해 준 값이예요~ 

swift@proxynode:~$ sh create-user.sh 

input username : 

user01

input password : 

user01


UserName :  user01

Password :  user01

Role Id :  c51e7802219a49608871a84e62b3bfb0


TENANT CREATE

TENANT_ID :  b837c8e9edcd43e8a244745b78106182

USER CREATE

+----------+----------------------------------+

| Property |              Value               |

+----------+----------------------------------+

|  email   |         user01@email.com         |

| enabled  |               True               |

|    id    | 2a5731944e1c4e039e6ab014f7d1b0c3 |

|   name   |              user01              |

| tenantId | b837c8e9edcd43e8a244745b78106182 |

+----------+----------------------------------+

USER ROLE ADD

Add ACL to Account

  Account: AUTH_b837c8e9edcd43e8a244745b78106182

Container: user01

  Objects: 0

    Bytes: 0

 Read ACL: user01:user01

Write ACL: user01:user01

  Sync To: 

 Sync Key: 

Accept-Ranges: bytes

X-Timestamp: 1397008546.32200

Content-Type: text/plain; charset=utf-8


위에 제가 생성한 컨테이너와 해당 컨테이너에 ACL 권한을 추가해 준거 보이시나요? 

이제 이 스크립트 하나만 있으면 계정을 추가하기 위해서 긴 명령어들을 일일이 입력하지 않아도 됩니다. 제일 하단의 사용자 컨테이너 추가하는 부분만 제거하면 오픈스택 키스톤에서 사용자를 추가할 때 써도 무방하겠네요~!! 




Posted by 나리 짱!!! naleejang