This is basically the exact same algorithm used by the
Ansible playbooks to process package mappings, implemented
as a standalone script.
There's little to none error handling, and some information
is hardcoded instead of being configurable at runtime; more
importantly, before it can be considered for merging it
needs to be integrated into lcitool, which in turn requires
lcitool to be significantly reworked.
Signed-off-by: Andrea Bolognani <abologna(a)redhat.com>
---
guests/dockerfile-generator | 72 +++++++++++++++++++
guests/host_vars/libvirt-centos-7/docker.yml | 2 +
guests/host_vars/libvirt-debian-8/docker.yml | 2 +
guests/host_vars/libvirt-debian-9/docker.yml | 2 +
.../host_vars/libvirt-debian-sid/docker.yml | 2 +
guests/host_vars/libvirt-fedora-27/docker.yml | 2 +
guests/host_vars/libvirt-fedora-28/docker.yml | 2 +
.../libvirt-fedora-rawhide/docker.yml | 2 +
guests/host_vars/libvirt-ubuntu-16/docker.yml | 2 +
guests/host_vars/libvirt-ubuntu-18/docker.yml | 2 +
10 files changed, 90 insertions(+)
create mode 100755 guests/dockerfile-generator
create mode 100644 guests/host_vars/libvirt-centos-7/docker.yml
create mode 100644 guests/host_vars/libvirt-debian-8/docker.yml
create mode 100644 guests/host_vars/libvirt-debian-9/docker.yml
create mode 100644 guests/host_vars/libvirt-debian-sid/docker.yml
create mode 100644 guests/host_vars/libvirt-fedora-27/docker.yml
create mode 100644 guests/host_vars/libvirt-fedora-28/docker.yml
create mode 100644 guests/host_vars/libvirt-fedora-rawhide/docker.yml
create mode 100644 guests/host_vars/libvirt-ubuntu-16/docker.yml
create mode 100644 guests/host_vars/libvirt-ubuntu-18/docker.yml
diff --git a/guests/dockerfile-generator b/guests/dockerfile-generator
new file mode 100755
index 0000000..e1212da
--- /dev/null
+++ b/guests/dockerfile-generator
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+
+import sys
+import yaml
+
+if len(sys.argv) < 2:
+ print("Usage: {} GUEST".format(sys.argv[0]))
+ sys.exit(1)
+
+guest = sys.argv[1]
+
+# Load data
+
+with open("vars/mappings.yml", "r") as f:
+ mappings = yaml.load(f)
+ mappings = mappings["mappings"]
+
+with open("host_vars/{}/main.yml".format(guest), "r") as f:
+ main = yaml.load(f)
+ package_format = main["package_format"]
+ os_name = main["os_name"]
+ os_version = main["os_version"]
+ os_full = "{}{}".format(os_name, os_version)
+
+with open("host_vars/{}/docker.yml".format(guest), "r") as f:
+ docker = yaml.load(f)
+ docker_base = docker["docker_base"]
+
+projects = ["base", "libvirt"]
+if os_name == "Fedora" and os_version == "Rawhide":
+ projects += ["libvirt+mingw"]
+
+# Process mappings
+
+temp = {}
+
+for project in projects:
+ with open("vars/projects/{}.yml".format(project), "r") as f:
+ packages = yaml.load(f)
+ packages = packages["packages"]
+ for package in packages:
+ if "default" in mappings[package]:
+ temp[package] = mappings[package]["default"]
+ if package_format in mappings[package]:
+ temp[package] = mappings[package][package_format]
+ if os_name in mappings[package]:
+ temp[package] = mappings[package][os_name]
+ if os_full in mappings[package]:
+ temp[package] = mappings[package][os_full]
+
+flattened = []
+
+for item in temp:
+ if temp[item] != None and temp[item] not in flattened:
+ flattened += [ temp[item] ]
+
+# Output Dockerfile
+
+print("FROM {}".format(docker_base))
+
+sys.stdout.write("ENV PACKAGES ")
+print(" \\\n ".join(sorted(flattened)))
+
+if package_format == "deb":
+ print("RUN apt-get update && \\")
+ print(" apt-get install -y ${PACKAGES} && \\")
+ print(" apt-get autoremove -y && \\")
+ print(" apt-get autoclean -y")
+elif package_format == "rpm":
+ print("RUN yum install -y ${PACKAGES} && \\")
+ print(" yum autoremove -y && \\")
+ print(" yum clean all -y")
diff --git a/guests/host_vars/libvirt-centos-7/docker.yml
b/guests/host_vars/libvirt-centos-7/docker.yml
new file mode 100644
index 0000000..59f7f12
--- /dev/null
+++ b/guests/host_vars/libvirt-centos-7/docker.yml
@@ -0,0 +1,2 @@
+---
+docker_base: centos:centos7
diff --git a/guests/host_vars/libvirt-debian-8/docker.yml
b/guests/host_vars/libvirt-debian-8/docker.yml
new file mode 100644
index 0000000..235f0fd
--- /dev/null
+++ b/guests/host_vars/libvirt-debian-8/docker.yml
@@ -0,0 +1,2 @@
+---
+docker_base: debian:8
diff --git a/guests/host_vars/libvirt-debian-9/docker.yml
b/guests/host_vars/libvirt-debian-9/docker.yml
new file mode 100644
index 0000000..0b4ccee
--- /dev/null
+++ b/guests/host_vars/libvirt-debian-9/docker.yml
@@ -0,0 +1,2 @@
+---
+docker_base: debian:9
diff --git a/guests/host_vars/libvirt-debian-sid/docker.yml
b/guests/host_vars/libvirt-debian-sid/docker.yml
new file mode 100644
index 0000000..e20a37e
--- /dev/null
+++ b/guests/host_vars/libvirt-debian-sid/docker.yml
@@ -0,0 +1,2 @@
+---
+docker_base: debian:sid
diff --git a/guests/host_vars/libvirt-fedora-27/docker.yml
b/guests/host_vars/libvirt-fedora-27/docker.yml
new file mode 100644
index 0000000..dcada18
--- /dev/null
+++ b/guests/host_vars/libvirt-fedora-27/docker.yml
@@ -0,0 +1,2 @@
+---
+docker_base: fedora:27
diff --git a/guests/host_vars/libvirt-fedora-28/docker.yml
b/guests/host_vars/libvirt-fedora-28/docker.yml
new file mode 100644
index 0000000..a874018
--- /dev/null
+++ b/guests/host_vars/libvirt-fedora-28/docker.yml
@@ -0,0 +1,2 @@
+---
+docker_base: fedora:28
diff --git a/guests/host_vars/libvirt-fedora-rawhide/docker.yml
b/guests/host_vars/libvirt-fedora-rawhide/docker.yml
new file mode 100644
index 0000000..39dda1c
--- /dev/null
+++ b/guests/host_vars/libvirt-fedora-rawhide/docker.yml
@@ -0,0 +1,2 @@
+---
+docker_base: fedora:rawhide
diff --git a/guests/host_vars/libvirt-ubuntu-16/docker.yml
b/guests/host_vars/libvirt-ubuntu-16/docker.yml
new file mode 100644
index 0000000..2d4eb25
--- /dev/null
+++ b/guests/host_vars/libvirt-ubuntu-16/docker.yml
@@ -0,0 +1,2 @@
+---
+docker_base: ubuntu:16.04
diff --git a/guests/host_vars/libvirt-ubuntu-18/docker.yml
b/guests/host_vars/libvirt-ubuntu-18/docker.yml
new file mode 100644
index 0000000..13d6cc1
--- /dev/null
+++ b/guests/host_vars/libvirt-ubuntu-18/docker.yml
@@ -0,0 +1,2 @@
+---
+docker_base: ubuntu:18.04
--
2.17.1