[libvirt] [jenkins-ci POC 2/2] guests: Add Dockerfile generator

Andrea Bolognani abologna at redhat.com
Fri Jun 15 06:53:44 UTC 2018


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 at 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




More information about the libvir-list mailing list