From eba3e448202694d048da54fef01e41de471dc517 Mon Sep 17 00:00:00 2001
From: Nicolas KAROLAK <nicolas@karolak.fr>
Date: Mon, 6 Apr 2020 10:08:58 +0000
Subject: [PATCH] document image build | refs #30562

---
 Makefile     |  2 +-
 README.md    |  2 +-
 doc/image.md | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 78 insertions(+), 2 deletions(-)
 create mode 100644 doc/image.md

diff --git a/Makefile b/Makefile
index d61687bb..a7688479 100644
--- a/Makefile
+++ b/Makefile
@@ -83,7 +83,7 @@ endif
 .PHONY: image
 ## image: Run Packer image build : build=<path-to-packer-file>
 image: image-validate
-	packer build -force $(build)
+	packer build -on-error=ask -force $(build)
 
 .PHONY: docker-build
 ## docker-build: Run docker image build for CI and devcontainer
diff --git a/README.md b/README.md
index 604152bb..90669e45 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ How to deploy UbiCast products:
 - [Installation of required tools](/doc/install.md)
 - [Configuration of the controller and inventory](/doc/config.md)
 - [Deployment of UbiCast softwares](/doc/deploy.md)
-- [Build an image]() (TODO)
+- [Build an image](/doc/image.md)
 
 ## Development
 
diff --git a/doc/image.md b/doc/image.md
new file mode 100644
index 00000000..967c86d9
--- /dev/null
+++ b/doc/image.md
@@ -0,0 +1,76 @@
+# Image build
+
+## Requirements
+
+- [Packer](https://packer.io): this is the tool that will automate all the steps of image creation
+- [VMware OVF Tool](https://code.vmware.com/web/tool/4.4.0/ovf): this is required by Packer to export the image from the VMware Hypervisor
+- A running and reachable VMware ESXi Hypervisor
+
+## Prepare Packer file
+
+Copy the example Packer file `packer/example.json`, for example to `packer/mymediaserver.json`, and edit the copied file.
+
+These variable must be configured:
+
+- `variables.name`: used to set the output filename and the machine hostname
+- `variables.esx_*`: VMware hypervisor connection settings
+- `variables.network_*`: used to pre-configure network settings, leave empty to ignore
+- `variables.skyreach_*`: use either `system_key` or `activation_key` and leave the other empty
+
+Then you need the groups that will be applied to the machine, for example for a MediaServer:
+
+```json
+{
+  [...]
+  "provisioners": [
+    [...]
+    {
+      "type": "ansible",
+      [...]
+      "groups": [
+        "monitor",
+        "postgres",
+        "manager",
+        "wowza",
+        "celerity",
+        "server",
+        "import"
+      ]
+    }
+  ]
+}
+```
+
+For a worker:
+
+```json
+{
+  [...]
+  "provisioners": [
+    [...]
+    {
+      "type": "ansible",
+      [...]
+      "groups": [
+        "worker"
+      ]
+    }
+  ]
+}
+```
+
+You can also pass additional variables to ansible in `provisionners['1'].extra_arguments`.
+
+## Build image
+
+Check that the Packer file is valid (the hypervisor must be reachable):
+
+```
+make image-validate build=packer/mymediaserver.json
+```
+
+Build the OVA:
+
+```sh
+make image build=packer/mymediaserver.json
+```
-- 
GitLab