OpenStack 用 Packer 來 build AMI

2019-07-01 HashiCorp, OpenStack

HashiCorp 的產品可以說是 DevOps 的好幫手,之前其實有寫過相關 Packer 工具的用法「AWS 用 packer 來 build AMI」、「HashiCorp Packer 用 AWS spot instance 來 build AMI」,然後這篇的主角是 OpenStack

由於公司的 OpenStack 準備要更新,相關的自動化工作就要開始準備,而 AMI 的部份就由 Packer 來代勞,由於之前有在 AWS 上使用 Packer 的經驗,身為 DevOps 怎麼能不用這麼好的自動化工具呢?

OKAY,Packer 的介紹就不再贅述,想看介紹可以看之前寫過的文章,Packer 的主體是以 Builder、Provisioner 更換平台只需要修改 Builder 就好。

Builder 需要至少先收集以下 OpenStack 資訊:

  • region 該 OpenStack 設定的 Region,預設為 RegionOne
  • ssh_username 用於登入 source image 的 ssh username。
  • image_name 建立出來的 image 名稱,可以用 timestamp 變數來產生不同的 image name。
  • source_image 在 OpenStack 必須要有一個來源的 image 作為底,請填入該 image 的 UUID。
  • flavor 在 OpenStack 定義的 instance type name。
  • networks 在 OpenStack 的 tenant network ID。
  • floating_ip_network 如果你的 OpenStack 架構必須要有 floating IP 才能連到 instance 就必須指定 floating IP 的所在 network ID。
# template-puppet-agent.json
{
  "builders": [
    {
      "type": "openstack",
      "region": "RegionOne",
      "ssh_username": "ubuntu",
      "image_name": "template-ubuntu-1604-x64-lts--puppet-{{timestamp}}",
      "source_image": "420c1121-aa31-4347-8b4e-e32f89e3e74c",
      "flavor": "t2.nano",
      "networks": "867ba4eb-db42-43e2-ab26-9c566a54ee6e",
      "floating_ip_network": "bad1960c-c564-43b7-84cc-8795c89974a9"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "scripts": ["provision-puppetagent.sh"]
    }
  ]
}

Provisioner 是你要在這個 image 做的事情,我先簡單拿 puppet agent 的 shell script 做範例:

#!/bin/bash
# provision-puppetagent.sh

cd /tmp; wget https://apt.puppetlabs.com/puppet5-release-xenial.deb
sudo dpkg -i puppet5-release-xenial.deb
sudo DEBIAN_FRONTEND=noninteractive apt-get update && sudo apt-get install -y ruby rubygems-integration puppet-agent

準備好 template-puppet-agent.json 和 provision-puppetagent.sh 兩隻檔案後就可以用 Packer 來 build image。

$ packer build template-puppet-agent.json

Packer 會自動幫你建立 instance、key pair、跑 shell script … 然後做成 image 後把原來建立的 instance、key pair 清的乾淨溜溜。

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱