Site icon Mr. 沙先生

OpenStack 用 Packer 來 build AMI

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 資訊:

# 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 清的乾淨溜溜。

Exit mobile version