]> Frank Brehm's Git Trees - pixelpark/create-vmware-tpl.git/commitdiff
Adding and using lib/cr_vmware_tpl/config.py
authorFrank Brehm <frank.brehm@pixelpark.com>
Tue, 20 Mar 2018 15:35:59 +0000 (16:35 +0100)
committerFrank Brehm <frank.brehm@pixelpark.com>
Tue, 20 Mar 2018 15:35:59 +0000 (16:35 +0100)
lib/cr_vmware_tpl/app.py
lib/cr_vmware_tpl/config.py [new file with mode: 0644]

index 7437498e1eaebd5bf999064dd9139fd40f7e5447..40ddf5e4e5d24d5df1908646bd43e2a1af91adb9 100644 (file)
@@ -16,6 +16,7 @@ import re
 import traceback
 import textwrap
 import argparse
+import getpass
 
 # Third party modules
 
@@ -29,7 +30,9 @@ from .colored import ColoredFormatter, colorstr
 
 from .obj import PpBaseObject
 
-__version__ = '0.1.3'
+from .config import CrTplConfiguration
+
+__version__ = '0.2.1'
 LOG = logging.getLogger(__name__)
 
 
@@ -151,6 +154,9 @@ class CrTplApplication(PpBaseObject):
         self._init_env()
         self._perform_env()
 
+        self.config = CrTplConfiguration(
+            appname=self.appname, verbose=self.verbose, base_dir=self.base_dir)
+
         self.post_init()
 
     # -----------------------------------------------------------
@@ -385,6 +391,11 @@ class CrTplApplication(PpBaseObject):
         self.perform_arg_parser()
         self.init_logging()
 
+        if not self.config.password:
+            prompt = 'Enter password for host {h!r} and user {u!r}: '.format(
+                h=self.config.vsphere_host, u=self.config.vsphere_user)
+            self.config.password = getpass.getpass(prompt=prompt)
+
         self.initialized = True
 
     # -------------------------------------------------------------------------
@@ -556,7 +567,50 @@ class CrTplApplication(PpBaseObject):
 
         """
 
-        pass
+        vmware_group = self.arg_parser.add_argument_group('VMWare options')
+
+        vmware_group.add_argument(
+            '-H', '--host', dest='host',
+            help="Remote vSphere host to connect to (Default: {!r}).".format(
+                CrTplConfiguration.default_vsphere_host)
+        )
+
+        vmware_group.add_argument(
+            '-p', '--port', dest='port', type=int,
+            help="Port on vSphere host to connect on (Default: {}).".format(
+                CrTplConfiguration.default_vsphere_port)
+        )
+
+        vmware_group.add_argument(
+            '-U', '--user', dest='user',
+            help="User name to use when connecting to vSphere host (Default: {!r}).".format(
+                CrTplConfiguration.default_vsphere_user)
+        )
+
+        vmware_group.add_argument(
+            '-P', '--password', dest='password',
+            help="Password to use when connecting to vSphere host.",
+        )
+
+        vmware_group.add_argument(
+            '-F', '--folder', dest='folder',
+            help="Folder in vSphere, where to create the template (Default: {!r}).".format(
+                CrTplConfiguration.default_template_vm)
+        )
+
+        vmware_group.add_argument(
+            '-M', '--vm', dest='vm',
+            help=(
+                "The temporary VM, which will be created and converted into a "
+                "template (Default: {!r}).").format(CrTplConfiguration.default_template_vm)
+        )
+
+        vmware_group.add_argument(
+            '-T', '--template',
+            help=(
+                "The name of the created template as result of this script "
+                "(Default: {!r}).").format(CrTplConfiguration.default_template_name)
+        )
 
     # -------------------------------------------------------------------------
     def _perform_arg_parser(self):
diff --git a/lib/cr_vmware_tpl/config.py b/lib/cr_vmware_tpl/config.py
new file mode 100644 (file)
index 0000000..ee56dc6
--- /dev/null
@@ -0,0 +1,114 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+@author: Frank Brehm
+@contact: frank.brehm@pixelpark.com
+@copyright: © 2018 by Frank Brehm, Berlin
+@summary: A module for providing a configuration
+"""
+from __future__ import absolute_import
+
+# Standard module
+import sys
+import os
+import logging
+
+# Third party modules
+import six
+
+from six import StringIO
+from six.moves import configparser
+
+from configparser import Error as ConfigParseError
+
+# Own modules
+from .errors import FunctionNotImplementedError, PpError
+
+from .obj import PpBaseObject
+
+__version__ = '0.1.0'
+LOG = logging.getLogger(__name__)
+
+
+# =============================================================================
+class ConfigError(PpError):
+    """Base error class for all exceptions happened during
+    execution this configured application"""
+
+    pass
+
+
+# =============================================================================
+class CrTplConfiguration(PpBaseObject):
+    """
+    A class for providing a configuration for the CrTplApplication class
+    and methods to read it from configuration files.
+    """
+
+    default_vsphere_host = 'vcs01.ppbrln.internal'
+    default_vsphere_port = 443
+    default_vsphere_user = 'root'
+    default_folder = 'templates'
+    default_template_vm = 'template.pixelpark.com'
+    default_template_name = 'oracle-linux-7.4-template'
+
+    # -------------------------------------------------------------------------
+    def __init__(
+        self, appname=None, verbose=0, version=__version__, base_dir=None,
+            initialized=False):
+
+        self.vsphere_host = self.default_vsphere_host
+        self.vsphere_port = self.default_vsphere_port
+        self.vsphere_user = self.default_vsphere_user
+        self.password = None
+        self.folder = self.default_folder
+        self.template_vm = self.default_template_vm
+        self.template_name = self.default_template_name
+
+        super(CrTplConfiguration, self).__init__(
+            appname=appname,
+            verbose=verbose,
+            version=version,
+            base_dir=base_dir,
+            initialized=False,
+        )
+
+        # Workaround, bis das Lesen der Config implementiert ist
+        self.vsphere_host = 'test-vcsa01.pixelpark.net'
+        self.vsphere_user = 'Administrator@vsphere.local'
+
+        if initialized:
+            self.initialized = True
+
+    # -------------------------------------------------------------------------
+    def as_dict(self, short=True):
+        """
+        Transforms the elements of the object into a dict
+
+        @param short: don't include local properties in resulting dict.
+        @type short: bool
+
+        @return: structure as dict
+        @rtype:  dict
+        """
+
+        res = super(CrTplConfiguration, self).as_dict(short=short)
+        res['default_vsphere_host'] = self.default_vsphere_host
+        res['default_vsphere_port'] = self.default_vsphere_port
+        res['default_vsphere_user'] = self.default_vsphere_user
+        res['default_folder'] = self.default_folder
+        res['default_template_vm'] = self.default_template_vm
+        res['default_template_name'] = self.default_template_name
+
+        return res
+
+
+# =============================================================================
+
+if __name__ == "__main__":
+
+    pass
+
+# =============================================================================
+
+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 list