From 92477974b68c7638a43ffc869e3ea9fb854b3534 Mon Sep 17 00:00:00 2001 From: Denis Kasanic Date: Mon, 11 Nov 2019 15:47:04 +0100 Subject: Fix packaging offline-installer Fix typos in Build and Install documentation Fix using relative paths in args for package.py Fix missing hosts.yml & application_configuration.yml in sw_package Change default build-version of packaging to empty as used in docs Give possibility to specify own inventory file to package in package.py Issue-ID: OOM-1994 Issue-ID: OOM-2197 Issue-ID: OOM-2158 Signed-off-by: Denis Kasanic Change-Id: I76598fb71a42ada1a71c9905ef2d32bc03d8f71c --- ansible/config/application_configuration.yml | 20 +++++++++++++++++ build/package.py | 33 ++++++++++++++++++---------- config/application_configuration.yml | 20 ----------------- docs/BuildGuide.rst | 16 +++++++++----- docs/InstallGuide.rst | 6 ++--- 5 files changed, 55 insertions(+), 40 deletions(-) create mode 100755 ansible/config/application_configuration.yml delete mode 100755 config/application_configuration.yml diff --git a/ansible/config/application_configuration.yml b/ansible/config/application_configuration.yml new file mode 100755 index 00000000..0c082867 --- /dev/null +++ b/ansible/config/application_configuration.yml @@ -0,0 +1,20 @@ +--- + +# +# This is example configuration to install offline ONAP. +# See available variables to configure and used default values +# from ../ansible/group_vars/*.yml files. +# +resources_dir: /data +app_name: onap +resources_filename: "offline-{{ app_name }}-4.0.0-resources.tar" +app_data_path: "/opt/{{ app_name }}" +certificates: + organization_name: Samsung + state_or_province_name: Poland + country_name: PL + locality_name: Krakow +app_helm_build_targets: + - all + - onap +app_helm_chart_name: onap diff --git a/build/package.py b/build/package.py index ad921ed3..f3b42eb0 100755 --- a/build/package.py +++ b/build/package.py @@ -33,7 +33,8 @@ import tarfile import git log = logging.getLogger(__name__) -script_location = os.path.dirname(os.path.realpath(__file__)) +script_location = os.path.abspath(os.path.join(__file__, '..')) +offline_repository_dir = os.path.abspath(os.path.join(script_location, '..')) def prepare_application_repository(directory, url, refspec, patch_path): @@ -73,6 +74,7 @@ def create_package_info_file(output_file, repository_list, tag): Generates text file in json format containing basic information about the build :param output_file: :param repository_list: list of repositories to be included in package info + :param tag: build version of packages :return: """ log.info('Generating package.info file') @@ -100,7 +102,7 @@ def create_package(tar_content, file_name): with tarfile.open(file_name, 'w') as output_tar_file: for src, dst in tar_content.items(): if src != '': - output_tar_file.add(src, dst) + output_tar_file.add(src, dst) def build_offline_deliverables(build_version, @@ -110,6 +112,7 @@ def build_offline_deliverables(build_version, application_charts_dir, application_configuration, application_patch_role, + inventory_file, output_dir, resources_directory, aux_directory, @@ -126,6 +129,7 @@ def build_offline_deliverables(build_version, :param application_charts_dir: path to directory under application repository containing helm charts :param application_configuration: path to application configuration file (helm override configuration) :param application_patch_role: path to application patch role (executed just before helm deploy) + :param inventory_file: path to ansible inventory file :param output_dir: Destination directory for saving packages :param resources_directory: Path to resource directory :param aux_directory: Path to aux binary directory @@ -139,11 +143,10 @@ def build_offline_deliverables(build_version, if os.path.exists(output_dir) and os.listdir(output_dir): if not overwrite: log.error('Output directory is not empty, use overwrite to force build') - raise FileExistsError + raise FileExistsError(output_dir) shutil.rmtree(output_dir) # Git - offline_repository_dir = os.path.join(script_location, '..') offline_repository = git.Repo(offline_repository_dir) application_dir = os.path.join(output_dir, 'application_repository') @@ -161,6 +164,7 @@ def build_offline_deliverables(build_version, os.path.join(offline_repository_dir, 'ansible'): 'ansible', application_configuration: 'ansible/application/application_configuration.yml', application_patch_role: 'ansible/application/onap-patch-role', + inventory_file: 'ansible/application/hosts.yml', os.path.join(application_dir, application_charts_dir): 'ansible/application/helm_charts', info_file: 'package.info' } @@ -173,6 +177,9 @@ def build_offline_deliverables(build_version, info_file: 'package.info' } + # add separator if build version not empty + build_version = "-" + build_version if build_version != "" else "" + if not skip_sw: log.info('Building offline installer') os.chdir(os.path.join(offline_repository_dir, 'ansible', 'docker')) @@ -194,7 +201,7 @@ def build_offline_deliverables(build_version, log.info('Binaries - workaround') download_dir_path = os.path.join(resources_directory, 'downloads') os.chdir(download_dir_path) - for file in os.listdir(): + for file in os.listdir(download_dir_path): if os.path.islink(file): os.unlink(file) @@ -214,7 +221,7 @@ def build_offline_deliverables(build_version, create_package(resources_content, resources_package_tar_path) if not skip_aux: - aux_package_tar_path = os.path.join(output_dir, 'aux_package'+ build_version + '.tar') + aux_package_tar_path = os.path.join(output_dir, 'aux_package' + build_version + '.tar') create_package(aux_content, aux_package_tar_path) shutil.rmtree(application_dir) @@ -226,7 +233,7 @@ def run_cli(): """ parser = argparse.ArgumentParser(description='Create Package For Offline Installer') parser.add_argument('--build-version', - help='version of the build', default='custom') + help='version of the build', default='') parser.add_argument('application_repository_url', metavar='application-repository-url', help='git repository hosting application helm charts') parser.add_argument('--application-repository_reference', default='master', @@ -234,16 +241,19 @@ def run_cli(): parser.add_argument('--application-patch_file', help='git patch file to be applied over application repository', default='') parser.add_argument('--application-charts_dir', - help='path to directory under application repository containing helm charts ', default='kubernetes') + help='path to directory under application repository containing helm charts ', + default='kubernetes') parser.add_argument('--application-configuration', help='path to application configuration file (helm override configuration)', - default='') + default=os.path.join(offline_repository_dir, 'ansible/config/application_configuration.yml')) parser.add_argument('--application-patch-role', help='path to application patch role file (ansible role) to be executed right before installation', default='') - parser.add_argument('--output-dir', '-o', default=os.path.join(script_location, '..', '..'), + parser.add_argument('--inventory-file', help="path to ansible inventory file", + default=os.path.join(offline_repository_dir, 'ansible/inventory/hosts.yml')) + parser.add_argument('--output-dir', '-o', default=os.path.join(offline_repository_dir, '../packages'), help='Destination directory for saving packages') - parser.add_argument('--resources-directory', default='', + parser.add_argument('--resources-directory', default=os.path.join(offline_repository_dir, '../resources'), help='Path to resource directory') parser.add_argument('--aux-directory', help='Path to aux binary directory', default='') @@ -271,6 +281,7 @@ def run_cli(): args.application_charts_dir, args.application_configuration, args.application_patch_role, + args.inventory_file, args.output_dir, args.resources_directory, args.aux_directory, diff --git a/config/application_configuration.yml b/config/application_configuration.yml deleted file mode 100755 index 0c082867..00000000 --- a/config/application_configuration.yml +++ /dev/null @@ -1,20 +0,0 @@ ---- - -# -# This is example configuration to install offline ONAP. -# See available variables to configure and used default values -# from ../ansible/group_vars/*.yml files. -# -resources_dir: /data -app_name: onap -resources_filename: "offline-{{ app_name }}-4.0.0-resources.tar" -app_data_path: "/opt/{{ app_name }}" -certificates: - organization_name: Samsung - state_or_province_name: Poland - country_name: PL - locality_name: Krakow -app_helm_build_targets: - - all - - onap -app_helm_chart_name: onap diff --git a/docs/BuildGuide.rst b/docs/BuildGuide.rst index 27c0835e..d0a558ba 100644 --- a/docs/BuildGuide.rst +++ b/docs/BuildGuide.rst @@ -128,14 +128,18 @@ so one might try following command to download most of the required artifacts in :: # following arguments are provided - # all data lists are taken in ./build/data_lists/ folder + # all data lists are taken from ./build/data_lists/ folder # all resources will be stored in expected folder structure within ../resources folder ./build/download/download.py --docker ./build/data_lists/infra_docker_images.list ../resources/offline_data/docker_images_infra \ - --docker ./build/data_lists/rke_docker_images.list \ + --http ./build/data_lists/infra_bin_utils.list ../resources/downloads + + # following docker images does not neccessary need to be stored under resources as they load into repository in next part + # if second argument for --docker is not present, images are just pulled and cached. + # Warning: script must be run twice separately, for more details run download.py --help + ./build/download/download.py --docker ./build/data_lists/rke_docker_images.list \ --docker ./build/data_lists/k8s_docker_images.list \ --docker ./build/data_lists/onap_docker_images.list \ - --http ./build/data_lists/infra_bin_utils.list ../resources/downloads Alternatively, step-by-step procedure is described in Appendix 1. @@ -148,7 +152,7 @@ Part 3. Populate local nexus Prerequisites: - All data lists and resources which are pushed to local nexus repository are available -- Following ports are not occupied buy another service: 80, 8081, 8082, 10001 +- Following ports are not occupied by another service: 80, 8081, 8082, 10001 - There's no docker container called "nexus" .. note:: In case you skipped the Part 2 for the artifacts download, please ensure that the onap docker images are cached and copy of resources data are untarred in *./onap-offline/../resources/* @@ -185,13 +189,13 @@ From onap-offline directory run: :: - ./build/package.py --build_version "" --application-repository_reference --output-dir --resources-directory + ./build/package.py --build-version --application-repository_reference --output-dir --resources-directory For example: :: - ./build/package.py https://gerrit.onap.org/r/oom --build_version "" --application-repository_reference master --output-dir /tmp/packages --resources-directory /tmp/resources + ./build/package.py https://gerrit.onap.org/r/oom --application-repository_reference master --output-dir /tmp/packages --resources-directory /tmp/resources In the target directory you should find tar files: diff --git a/docs/InstallGuide.rst b/docs/InstallGuide.rst index 9239cad9..947cd727 100644 --- a/docs/InstallGuide.rst +++ b/docs/InstallGuide.rst @@ -233,7 +233,7 @@ After all the changes, the ``'hosts.yml'`` should look similar to this:: infrastructure: hosts: infrastructure-server: - ansible_host: 10.8.8.13 + ansible_host: 10.8.8.100 #IP used for communication between infra and kubernetes nodes, must be specified. cluster_ip: 10.8.8.100 @@ -326,7 +326,7 @@ Second one controls time zone setting on host. It's value should be time zone na Final configuration can resemble the following:: resources_dir: /data - resources_filename: resources-package.tar + resources_filename: resources_package.tar app_data_path: /opt/onap app_name: onap timesync: @@ -432,7 +432,7 @@ Part 4. Post-installation and troubleshooting After all of the playbooks are run successfully, it will still take a lot of time until all pods are up and running. You can monitor your newly created kubernetes cluster for example like this:: - $ ssh -i ~/.ssh/offline_ssh_key root@10.8.8.4 # tailor this command to connect to your infra-node + $ ssh -i ~/.ssh/offline_ssh_key root@10.8.8.100 # tailor this command to connect to your infra-node $ watch -d -n 5 'kubectl get pods --all-namespaces' Alternatively you can monitor progress with ``helm_deployment_status.py`` script located in offline-installer directory. Transfer it to infra-node and run:: -- cgit 1.2.3-korg