diff --git a/README.md b/README.md index fd19e50..468c7a2 100644 --- a/README.md +++ b/README.md @@ -33,4 +33,62 @@ ip rule 을 확인하여 정책 기반 라우팅이 설정되었는지 확인할 ```bash ip rule ls -``` \ No newline at end of file +``` + +## packer 를 사용하여 이미지 배포 + +openstack 에 자동으로 PBR 시스템을 구성하는 packer template 을 제공합니다. + +### Packer 설치 + +https://developer.hashicorp.com/packer/tutorials/docker-get-started/get-started-install-cli + +### Packer OpenStack plugin 설치 + +openstack 에서 사용할 수 있게 하려면 Packer OpenStack 플러그인을 설치해야 합니다. 아래 명령어를 사용하여 설치할 수 있습니다. + +```bash +packer plugins install github.com/hashicorp/openstack +``` + +### Packer OpenStack 템플릿 설정 + +packer 를 사용하기 전에 openrc를 설정해야합니다 + +```bash +vi admin-openrc +``` + +설정 파일 내용은 아래 내용들을 채워야합니다. + +```bash +export OS_USER_DOMAIN_NAME=Default +export OS_PROJECT_NAME=admin +export OS_TENANT_NAME=$OS_PROJECT_NAME +export OS_USERNAME=admin +export OS_PASSWORD=ADMIN_PASSWORD +export OS_AUTH_URL=http://OPENSTACK_KEYSTONE_HOST/v3 +export OS_IDENTITY_API_VERSION=3 +export OS_IMAGE_API_VERSION=2 +export OS_SOURCE_IMAGE_ID=원본_이미지_ID +export OS_NETWORK_NAME=이미지_빌드에_사용할_네트워크_ID +export OS_FLOATING_IP_POOL=플로팅_IP_풀_이름 +``` + +위 환경 변수들은 실제 환경에 맞게 수정해야 합니다. 예를 들어, `ADMIN_PASSWORD`는 OpenStack 관리자의 비밀번호로 설정해야 하며, `OPENSTACK_KEYSTONE_HOST`는 OpenStack Keystone 서비스의 호스트 주소로 설정해야 합니다. + +```bash +source admin-openrc +``` + +packer 를 실행할 수 있는지 확인합니다. + +```bash +packer validate packer-openstack-ubuntu.json +``` + +### Packer OpenStack 템플릿 실행 + +```bash +packer build packer-openstack-ubuntu.json +``` diff --git a/admin-openrc.sample b/admin-openrc.sample new file mode 100644 index 0000000..0e5228a --- /dev/null +++ b/admin-openrc.sample @@ -0,0 +1,11 @@ +export OS_USER_DOMAIN_NAME=Default +export OS_PROJECT_NAME=admin +export OS_TENANT_NAME=$OS_PROJECT_NAME +export OS_USERNAME=admin +export OS_PASSWORD=ADMIN_PASSWORD +export OS_AUTH_URL=http://OPENSTACK_KEYSTONE_HOST/v3 +export OS_IDENTITY_API_VERSION=3 +export OS_IMAGE_API_VERSION=2 +export OS_SOURCE_IMAGE_ID=원본_이미지_ID +export OS_NETWORK_NAME=이미지_빌드에_사용할_네트워크_ID +export OS_FLOATING_IP_POOL=플로팅_IP_풀_이름 \ No newline at end of file diff --git a/packer-openstack-ubuntu.json b/packer-openstack-ubuntu.json index 4c37010..8d69c2c 100644 --- a/packer-openstack-ubuntu.json +++ b/packer-openstack-ubuntu.json @@ -9,7 +9,7 @@ "source_image_id": "{{env `OS_SOURCE_IMAGE_ID`}}", "flavor_name": "cpu.2c_2g", "network_name": "{{env `OS_NETWORK_NAME`}}", - "image_name": "ubuntu 22.04-{{timestamp}} server", + "image_name": "ubuntu 24.04 server-{{timestamp}}", "floating_ip_pool": "{{env `OS_FLOATING_IP_POOL`}}", "ssh_username": "ubuntu" }, @@ -36,6 +36,7 @@ "use_floating_ip": true, "ssh_timeout": "10m", "image_disk_format": "raw", + "image_visibility": "public", "use_blockstorage_volume": true } ], diff --git a/pbr-script-cloud-init.yaml b/pbr-script-cloud-init.yaml index 95f8ebb..b713c47 100644 --- a/pbr-script-cloud-init.yaml +++ b/pbr-script-cloud-init.yaml @@ -2,11 +2,11 @@ write_files: - path: /tmp/pbr-script-cloud-init.sh - permissions: '0755' + permissions: "0755" owner: root:root content: | #!/bin/bash - + # GitLab 스크립트 URL (공개 저장소 또는 접근 가능한 URL) # 예시: GitLab Pages, Raw 파일 URL 등 # private repository인 경우 인증 관련 부분을 추가해야 합니다. (아래 설명) @@ -15,7 +15,7 @@ write_files: # 스크립트 저장될 디렉토리 생성 (필요하다면) mkdir -p $(dirname "${DEST_PATH}") - + echo "Downloading script from ${SCRIPT_URL}..." # wget 또는 curl 사용 # wget이 일반적으로 더 많이 사용됨 @@ -29,17 +29,17 @@ write_files: echo "Error: Neither wget nor curl found. Cannot download script." exit 1 fi - + if [ $? -eq 0 ]; then echo "Script downloaded successfully to ${DEST_PATH}. Executing..." chmod +x "${DEST_PATH}" # 실행 권한 부여 - "${DEST_PATH}" install # 스크립트 실행 + "${DEST_PATH}" setup --force # 스크립트 실행 else echo "Error: Failed to download script from ${SCRIPT_URL}." exit 1 fi - + echo "Script execution finished." runcmd: - - /tmp/pbr-script-cloud-init.sh \ No newline at end of file + - /tmp/pbr-script-cloud-init.sh