도메인 주소에 따라 환경을 자동으로 설정하기

  • Post author:
  • Post category:칼럼
  • Post comments:0 Comments
  • Post last modified:June 28, 2015

뭘 하고 싶었냐면…

환경 도메인 Puppet Master AWS VPC
Staging *.si.test.com puppet.si.test.com staging
Production *.pi.test.com puppet.pi.test.com production

이런 식으로 각 환경(Environment)을 구성했다고 치자. 이때 특정 VPC에 노드를 추가하면 해당 노드가 자신이 어느 환경에 속했는지 스스로 판단하게 하려는 것이다. puppet.conf에 environment 값을 적어넣지 않더라도 말이다.

참고

이를 구현하기는 그리 어렵지 않은데 삽질하느라 시간은 꽤 걸렸다. 우선, 적당한 경로에 getenv라는 Bash 스크립트를 작성해 넣는다. 여기서는 /etc/puppetlabs/code/bin/getenv을 경로로 잡았다.

#!/bin/bash

hostname="$(/opt/puppetlabs/bin/facter fqdn)"
if [[ $hostname =~ .*\.si\..* ]];
then
   echo "environment: staging"
   exit 0
fi

echo "environment production"

getenv 파일에 실행권한을 부여하는 걸 잊지 말자.

chown +x /etc/puppetlabs/code/bin/getenv

이제 Puppet 서버의 /etc/puppetlabs/puppet/puppet.conf을 수정해서 [master] 섹션에 두 줄을 써 넣는다.

[master]

node_terminus  = exec
external_nodes = /etc/puppetlabs/code/bin/getenv

이제 *.si.* 도메인을 가진 VPC에 속한 노드는 자신이 Staging 환경에 있음을 자동으로 파악한다. 그 외의 VPC의 경우에는 Production이라고 판단할 것이다.

참고 자료

AWS Rest API

getenv를 보면 Puppet의 facter를 이용해 노드의 FQDN을 알아낸다.

hostname="$(/opt/puppetlabs/bin/facter fqdn)"

똑같은 일을 AWS가 제공하는 기능으로도 해낼 수 있다.

hostname="$(/usr/bin/curl --silent http://169.254.169.254/latest/meta-data/local-hostname)"

Puppet이 없는 곳에서는 이 방법이 유용하다.

Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted