refactor: rewrite packer config in Jsonnet
This will allow us to write the configuration for multiple images without the need to duplicate most of the source.
This commit is contained in:
parent
d7d0e8c4e9
commit
9dc8490404
6 changed files with 115 additions and 80 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
build/*
|
||||||
|
!build/.gitkeep
|
0
build/.gitkeep
Normal file
0
build/.gitkeep
Normal file
|
@ -1,67 +0,0 @@
|
||||||
{
|
|
||||||
"source": {
|
|
||||||
"lxd": {
|
|
||||||
"flow_infra": {
|
|
||||||
"container_name": "${var.lxd_container_name}",
|
|
||||||
"image": "${var.lxd_base_image}",
|
|
||||||
"publish_properties": {
|
|
||||||
"description": "LXD image for Flow Infra Dev"
|
|
||||||
},
|
|
||||||
"virtual_machine": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"build": {
|
|
||||||
"source": {
|
|
||||||
"lxd.flow_infra": {
|
|
||||||
"name": "flow-infra",
|
|
||||||
"output_image": "${var.lxd_output_image_name}"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"provisioner": {
|
|
||||||
"shell": {
|
|
||||||
"inline": ["apk add bash"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"provisioner": {
|
|
||||||
"shell": {
|
|
||||||
"environment_vars": [
|
|
||||||
"FLOW_USERNAME=${var.flow_username}",
|
|
||||||
"FLOW_GID=${var.flow_gid}",
|
|
||||||
"FLOW_UID=${var.flow_uid}",
|
|
||||||
"ROOT_SETUP_DIRECTORY=${var.root_setup_directory}"
|
|
||||||
],
|
|
||||||
"script": "${path.root}/../../provisioners/shell/setup.sh"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"provisioner": {
|
|
||||||
"file": {
|
|
||||||
"source": "${path.root}/../../files/compose/docker-compose.yaml",
|
|
||||||
"destination": "${var.root_setup_directory}/template/compose/"
|
|
||||||
},
|
|
||||||
"file": {
|
|
||||||
"source": "${path.root}/../../files/scripts/bootstrap.sh",
|
|
||||||
"destination": "${var.root_setup_directory}/bootstrap.sh"
|
|
||||||
},
|
|
||||||
"file": {
|
|
||||||
"sources": [
|
|
||||||
"${path.root}/../../files/traefik/Dockerfile",
|
|
||||||
"${path.root}/../../files/traefik/dynamic_dashboard.yaml",
|
|
||||||
"${path.root}/../../files/traefik/entrypoint.sh",
|
|
||||||
"${path.root}/../../files/traefik/traefik.yaml"
|
|
||||||
],
|
|
||||||
"destination": "${var.root_setup_directory}/template/traefik/"
|
|
||||||
},
|
|
||||||
"file": {
|
|
||||||
"sources": [
|
|
||||||
"${path.root}/../../files/gitea/app.ini",
|
|
||||||
"${path.root}/../../files/gitea/Dockerfile",
|
|
||||||
"${path.root}/../../files/gitea/dynamic_git.yaml",
|
|
||||||
"${path.root}/../../files/gitea/entrypoint.sh"
|
|
||||||
],
|
|
||||||
"destination": "${var.root_setup_directory}/template/gitea/"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
{
|
|
||||||
"variables": {
|
|
||||||
"lxd_base_image": "images:alpine/3.15",
|
|
||||||
"lxd_container_name": "flow-infra-lxd-packer-builder",
|
|
||||||
"lxd_output_image_name": "flow-infra",
|
|
||||||
|
|
||||||
"flow_username": "flow",
|
|
||||||
"flow_gid": 22379,
|
|
||||||
"flow_uid": 22379,
|
|
||||||
|
|
||||||
"root_setup_directory": "/etc/flow/setup"
|
|
||||||
}
|
|
||||||
}
|
|
57
jsonnet/lib/provisioners.libsonnet
Normal file
57
jsonnet/lib/provisioners.libsonnet
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
{
|
||||||
|
installBash: {
|
||||||
|
shell: {
|
||||||
|
inline: ['apk add bash'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
uploadDockerCompose(root_setup_directory): {
|
||||||
|
file: {
|
||||||
|
source: '${path.root}/../files/compose/docker-compose.yaml',
|
||||||
|
destination: std.format('%s/template/compose/', root_setup_directory),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
uploadBootstrapScript(root_setup_directory): {
|
||||||
|
file: {
|
||||||
|
source: '${path.root}/../files/scripts/bootstrap.sh',
|
||||||
|
destination: std.format('%s/bootstrap.sh', root_setup_directory),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
uploadTraefikTemplates(root_setup_directory): {
|
||||||
|
file: {
|
||||||
|
sources: [
|
||||||
|
'${path.root}/../files/traefik/Dockerfile',
|
||||||
|
'${path.root}/../files/traefik/dynamic_dashboard.yaml',
|
||||||
|
'${path.root}/../files/traefik/entrypoint.sh',
|
||||||
|
'${path.root}/../files/traefik/traefik.yaml',
|
||||||
|
],
|
||||||
|
destination: std.format('%s/template/traefik/', root_setup_directory),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
uploadGiteaTemplates(root_setup_directory): {
|
||||||
|
file: {
|
||||||
|
sources: [
|
||||||
|
'${path.root}/../files/gitea/app.ini',
|
||||||
|
'${path.root}/../files/gitea/Dockerfile',
|
||||||
|
'${path.root}/../files/gitea/dynamic_git.yaml',
|
||||||
|
'${path.root}/../files/gitea/entrypoint.sh',
|
||||||
|
],
|
||||||
|
destination: std.format('%s/template/gitea/', root_setup_directory),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
runSetup(username, gid, uid, root_setup_directory): {
|
||||||
|
shell: {
|
||||||
|
environment_vars: [
|
||||||
|
std.format('FLOW_USERNAME=%s', username),
|
||||||
|
std.format('FLOW_GID=%d', gid),
|
||||||
|
std.format('FLOW_UID=%d', uid),
|
||||||
|
std.format('ROOT_SETUP_DIRECTORY=%s', root_setup_directory),
|
||||||
|
],
|
||||||
|
script: '${path.root}/../provisioners/shell/setup.sh',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
56
main.jsonnet
Normal file
56
main.jsonnet
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
local provisioners = import 'jsonnet/lib/provisioners.libsonnet';
|
||||||
|
local type = std.extVar('type');
|
||||||
|
|
||||||
|
{
|
||||||
|
local images = {
|
||||||
|
lxd: {
|
||||||
|
local lxd_base_image = 'images:alpine/3.15',
|
||||||
|
local lxd_container_name = 'flow-infra-lxd-packer-builder',
|
||||||
|
local lxd_image_name = 'flow-infra-local',
|
||||||
|
source: {
|
||||||
|
lxd: {
|
||||||
|
flow_infra: {
|
||||||
|
container_name: lxd_container_name,
|
||||||
|
image: lxd_base_image,
|
||||||
|
publish_properties: {
|
||||||
|
description: 'LXD image for Flow Infrastructure Development',
|
||||||
|
},
|
||||||
|
virtual_machine: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
build_source_ref: {
|
||||||
|
'lxd.flow_infra': {
|
||||||
|
name: lxd_image_name,
|
||||||
|
output_image: lxd_image_name,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
linode: {
|
||||||
|
source: {},
|
||||||
|
build_source_ref: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
source: images[type].source,
|
||||||
|
|
||||||
|
build: {
|
||||||
|
local flow_username = 'flow',
|
||||||
|
local flow_gid = 22379,
|
||||||
|
local flow_uid = 22379,
|
||||||
|
local root_setup_directory = '/etc/flow/setup',
|
||||||
|
|
||||||
|
source: images[type].build_source_ref,
|
||||||
|
|
||||||
|
provisioner: [
|
||||||
|
provisioners.installBash,
|
||||||
|
provisioners.runSetup(flow_username, flow_gid, flow_uid, root_setup_directory),
|
||||||
|
provisioners.uploadDockerCompose(root_setup_directory),
|
||||||
|
provisioners.uploadBootstrapScript(root_setup_directory),
|
||||||
|
provisioners.uploadTraefikTemplates(root_setup_directory),
|
||||||
|
provisioners.uploadGiteaTemplates(root_setup_directory),
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
Reference in a new issue