From 07d27a573ef1575a69a4f0a552ccf697ed099594 Mon Sep 17 00:00:00 2001
From: Dmitry Tantsur <dtantsur@protonmail.com>
Date: Wed, 23 Oct 2019 16:10:04 +0200
Subject: [PATCH] CLI: add --verbose and --extra-args

The --extra-args argument allows passing arbitrary arguments to DIB.

Change-Id: I26be362263c08ea5cfe3bd265372ff5ab406d85c
---
 ironic_python_agent_builder/__init__.py      | 10 +++++++++-
 roles/ipa-build-dib-image/defaults/main.yaml |  1 +
 roles/ipa-build-dib-image/tasks/main.yaml    |  3 ++-
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/ironic_python_agent_builder/__init__.py b/ironic_python_agent_builder/__init__.py
index 4d55a3b..4de45cb 100644
--- a/ironic_python_agent_builder/__init__.py
+++ b/ironic_python_agent_builder/__init__.py
@@ -12,6 +12,7 @@
 
 import argparse
 import os
+import shlex
 import subprocess
 import sys
 
@@ -50,6 +51,10 @@ def main():
     parser.add_argument("-b", "--branch",
                         help="If set, override the branch that is used for "
                         "ironic-python-agent and requirements")
+    parser.add_argument("-v", "--verbose", action='store_true',
+                        help="Enable verbose logging in diskimage-builder")
+    parser.add_argument("--extra-args",
+                        help="Extra arguments to pass to diskimage-builder")
     # TODO(dtantsur): handle distribution == tinyipa
     os.environ['ELEMENTS_PATH'] = find_elements_path()
     if not os.environ.get('DIB_INSTALLTYPE_pip_and_virtualenv'):
@@ -63,10 +68,13 @@ def main():
     if args.branch:
         os.environ['DIB_REPOREF_ironic_python_agent'] = args.branch
         os.environ['DIB_REPOREF_requirements'] = args.branch
+    extra_args = shlex.split(args.extra_args) if args.extra_args else []
+    if args.verbose:
+        extra_args.append("-x")
     try:
         subprocess.check_call(['disk-image-create', '-o', args.output,
                                'ironic-python-agent-ramdisk',
-                               args.distribution] + args.element)
+                               args.distribution] + args.element + extra_args)
     except (EnvironmentError, subprocess.CalledProcessError) as exc:
         sys.exit(str(exc))
     except KeyboardInterrupt:
diff --git a/roles/ipa-build-dib-image/defaults/main.yaml b/roles/ipa-build-dib-image/defaults/main.yaml
index a6de289..870561e 100644
--- a/roles/ipa-build-dib-image/defaults/main.yaml
+++ b/roles/ipa-build-dib-image/defaults/main.yaml
@@ -5,3 +5,4 @@ ipa_source_path: '{{ ansible_user_dir }}/src/opendev.org/openstack/ironic-python
 requirements_path: '{{ ansible_user_dir }}/src/opendev.org/openstack/requirements'
 ipa_raw_dir: '{{ ansible_user_dir }}/src/opendev.org/openstack/ironic-python-agent/UPLOAD_RAW'
 ipa_tar_dir: '{{ ansible_user_dir }}/src/opendev.org/openstack/ironic-python-agent/UPLOAD_TAR'
+dib_extra_args:
diff --git a/roles/ipa-build-dib-image/tasks/main.yaml b/roles/ipa-build-dib-image/tasks/main.yaml
index 96d0bb6..87a7d39 100644
--- a/roles/ipa-build-dib-image/tasks/main.yaml
+++ b/roles/ipa-build-dib-image/tasks/main.yaml
@@ -4,8 +4,9 @@
 
 - name: Build a DIB image
   command: |
-    ironic-python-agent-builder -o {{ image_name }} -b HEAD
+    ironic-python-agent-builder -o {{ image_name }} -b HEAD -v
         {{ "-r {}".format(image_release) if image_release else '' }}
+        {{ "--extra-args '{}'".format(dib_extra_args) if dib_extra_args else '' }}
         {{ image_distro }}
   environment:
     # Increase from the default value of 30