[2025_OSC] 로컬에서 여러 개의 openstack을 손쉽게 context switch하기 (mac, linux 기준)

지난 화요일 모임시간에 잠시 설명드렸던.. 로컬에서 여러개의 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 명령어 적용해보기

  1. 위 명령어를 로컬에서 사용하는 커맨드 설정 파일에 저장합니다.
    일반적으로 .bashrc 만약 zshell을 사용하고 있다면 .zshrc 가 됩니다.
    저장 후에는 반드시 설정 파일을 적용해 줍시다!
source .bashrc
또는
source .zshrc
  1. clouds.yaml은 ~/.config/openstack/clouds.yaml에 저장합니다.
    명령어를 실행하는 현재 디렉토리에 또 다른 clouds.yaml이 없는지도 확인합니다.

  2. 실행하는 명령어는 다음과 같습니다.

1) os
2) cloud 이름 검색
3) <enter>

위 설정을 해놓으면 이후 추가적으로 제어해야 하는 cloud가 생길때마다 ~/.config/openstack/clouds.yaml에 추가하여 사용하면 됩니다

그러면 happy contributing~ :cherry_blossom:


그리고 제가 window 환경이 없어서 혹시 fzf나 bash를 사용하여 위 방법에 성공하신 분이 있다면 댓글로 방법을 업데이트 해주시면 대단히 감사하겠습니다!

4개의 좋아요