지난 화요일 모임시간에 잠시 설명드렸던.. 로컬에서 여러개의 openstack cloud를 동시에 관리하거나 접속할때 손쉽게 context switch할 수 있는 명령어입니다.
Openstack Client의 Clouds.yaml을 찾는 우선순위
먼저, openstackClient는 아래의 순서대로 clouds.yaml 파일을 찾습니다.
1. 현재 디렉토리의 clouds.yaml
2. ~/.config/openstack/clouds.yaml
3. /etc/openstack/clouds.yaml
가장 먼저 발견된 파일이 configuration으로 적용됩니다.
출처: OpenStack Docs: Configuration
만약 현재 적용된 configuration이 어떤 것인지 확인하고 싶으면 아래의 명령어를 사용하면 됩니다.
openstack configuration show
다음과 같이 현재 사용중인 configuration이 표시됩니다. (--mask 옵션으로 password를 가린 모습입니다)
Clouds.yaml
clouds.yaml은 아래와 같은 형식으로 구성되어 있습니다. 가장 상위 레이어인 clouds 밑에 devstack, ds-admin, infra 와 같은 개별 클라우드가 설정된 모습입니다. (yaml 파일이기 때문에 파일 구성시 반드시 indent를 맞춰주어야 합니다)
clouds:
devstack:
auth:
auth_url: http://192.168.122.10:35357/
project_name: demo
username: demo
password: 0penstack
region_name: RegionOne
ds-admin:
auth:
auth_url: http://192.168.122.10:35357/
project_name: admin
username: admin
password: 0penstack
region_name: RegionOne
infra:
cloud: rackspace
auth:
project_id: 275610
username: openstack
password: xyzpdq!lazydog
region_name: DFW,ORD,IAD
interface: internal
만약 위의 clouds.yaml을 이용해 환경변수를 통해 devstack 클라우드를 호출하고 싶으면 다음과 같이 사용합니다.
export OS_CLOUD=devstack
이러한 방식으로 전체 clouds.yaml 파일 중 특정 원하는 클라우드로 바꾸는 방식을 commandline finder 오픈소스인 fzf 와 결합하면 다음과 같이 bash 명령어를 작성할 수 있습니다.
os () {
local context
context=$(cat "$HOME/.config/openstack/clouds.yaml" | fzf -x -m -e +s --reverse --bind=left:page-up,right:page-down --no-mouse | awk '/^ [a-z]/{print $1}' | cut -d':' -f1)
if [[ "$context" != "" ]]
then
export OS_CLOUD=$context
else
echo "ERROR: Can not recognize os cloud string: $context"
fi
}
alias op=openstack
fzf github: GitHub - junegunn/fzf: 🌸 A command-line fuzzy finder
OS 명령어 적용해보기
- 위 명령어를 로컬에서 사용하는 커맨드 설정 파일에 저장합니다.
일반적으로 .bashrc 만약 zshell을 사용하고 있다면 .zshrc 가 됩니다.
저장 후에는 반드시 설정 파일을 적용해 줍시다!
source .bashrc
또는
source .zshrc
-
clouds.yaml은
~/.config/openstack/clouds.yaml에 저장합니다.
명령어를 실행하는 현재 디렉토리에 또 다른 clouds.yaml이 없는지도 확인합니다. -
실행하는 명령어는 다음과 같습니다.
1) os
2) cloud 이름 검색
3) <enter>
위 설정을 해놓으면 이후 추가적으로 제어해야 하는 cloud가 생길때마다 ~/.config/openstack/clouds.yaml에 추가하여 사용하면 됩니다
그러면 happy contributing~ ![]()
그리고 제가 window 환경이 없어서 혹시 fzf나 bash를 사용하여 위 방법에 성공하신 분이 있다면 댓글로 방법을 업데이트 해주시면 대단히 감사하겠습니다!

