Merge "Fixes Docker image upload for master/rocky"
authorFeng Pan <fpan@redhat.com>
Thu, 1 Nov 2018 16:22:18 +0000 (16:22 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Thu, 1 Nov 2018 16:22:19 +0000 (16:22 +0000)
12 files changed:
apex/builders/common_builder.py
apex/deploy.py
apex/overcloud/deploy.py
apex/tests/test_apex_common_builder.py
apex/tests/test_apex_deploy.py
apex/tests/test_apex_overcloud_deploy.py
apex/undercloud/undercloud.py
build/containers-prepare-parameter.yaml [new file with mode: 0644]
config/deploy/common-patches.yaml
lib/ansible/playbooks/configure_undercloud.yml
lib/ansible/playbooks/prepare_overcloud_containers.yml
setup.cfg

index b8894ec..e0e7303 100644 (file)
@@ -14,8 +14,11 @@ import git
 import json
 import logging
 import os
+import platform
+import pprint
 import re
 import urllib.parse
+import yaml
 
 import apex.builders.overcloud_builder as oc_builder
 from apex import build_utils
@@ -258,3 +261,39 @@ def create_git_archive(repo_url, repo_name, tmp_dir,
         repo.archive(fh, prefix=prefix)
     logging.debug("Wrote archive file: {}".format(archive_path))
     return archive_path
+
+
+def get_neutron_driver(ds_opts):
+    sdn = ds_opts.get('sdn_controller', None)
+    for controllers in 'opendaylight', 'ovn':
+        if sdn == controllers:
+            return sdn
+
+    if ds_opts.get('vpp', False):
+        return 'vpp'
+
+    return None
+
+
+def prepare_container_images(prep_file, branch='master', neutron_driver=None):
+    if not os.path.isfile(prep_file):
+        raise exc.ApexCommonBuilderException("Prep file does not exist: "
+                                             "{}".format(prep_file))
+    with open(prep_file) as fh:
+        data = yaml.safe_load(fh)
+    try:
+        p_set = data['parameter_defaults']['ContainerImagePrepare'][0]['set']
+        if neutron_driver:
+            p_set['neutron_driver'] = neutron_driver
+        p_set['namespace'] = "docker.io/tripleo{}".format(branch)
+        if platform.machine() == 'aarch64':
+            p_set['ceph_tag'] = 'master-fafda7d-luminous-centos-7-aarch64'
+
+    except KeyError:
+        logging.error("Invalid prep file format: {}".format(prep_file))
+        raise exc.ApexCommonBuilderException("Invalid format for prep file")
+
+    logging.debug("Writing new container prep file:\n{}".format(
+        pprint.pformat(data)))
+    with open(prep_file, 'w') as fh:
+        yaml.safe_dump(data, fh, default_flow_style=False)
index dab6bd1..f1ab260 100644 (file)
@@ -415,6 +415,15 @@ def main():
         for role in 'compute', 'controller':
             oc_cfg.create_nic_template(net_settings, deploy_settings, role,
                                        args.deploy_dir, APEX_TEMP_DIR)
+        # Prepare/Upload docker images
+        docker_env = 'containers-prepare-parameter.yaml'
+        shutil.copyfile(os.path.join(args.deploy_dir, docker_env),
+                        os.path.join(APEX_TEMP_DIR, docker_env))
+        c_builder.prepare_container_images(
+            os.path.join(APEX_TEMP_DIR, docker_env),
+            branch=branch,
+            neutron_driver=c_builder.get_neutron_driver(ds_opts)
+        )
         # Install Undercloud
         undercloud.configure(net_settings, deploy_settings,
                              os.path.join(args.lib_dir, constants.ANSIBLE_PATH,
index 4deeabf..c526a98 100644 (file)
@@ -194,8 +194,6 @@ def create_deploy_cmd(ds, ns, inv, tmp_dir,
         sdn_docker_files = get_docker_sdn_files(ds_opts)
         for sdn_docker_file in sdn_docker_files:
             deploy_options.append(sdn_docker_file)
-        if sdn_docker_files:
-            deploy_options.append('sdn-images.yaml')
     else:
         deploy_options += build_sdn_env_list(ds_opts, SDN_FILE_MAP)
 
index 09bd254..dede55a 100644 (file)
@@ -24,6 +24,8 @@ DOCKER_YAML = {
     }
 }
 
+a_mock_open = mock_open(read_data=None)
+
 
 class TestCommonBuilder(unittest.TestCase):
     @classmethod
@@ -249,3 +251,53 @@ class TestCommonBuilder(unittest.TestCase):
         self.assertRaises(exceptions.ApexCommonBuilderException,
                           c_builder.project_to_docker_image,
                           'nova')
+
+    def test_get_neutron_driver(self):
+        ds_opts = {'dataplane': 'fdio',
+                   'sdn_controller': 'opendaylight',
+                   'odl_version': 'master',
+                   'vpn': False,
+                   'sriov': False}
+        self.assertEquals(c_builder.get_neutron_driver(ds_opts),
+                          'opendaylight')
+        ds_opts['sdn_controller'] = None
+        ds_opts['vpp'] = True
+        self.assertEquals(c_builder.get_neutron_driver(ds_opts),
+                          'vpp')
+        ds_opts['sdn_controller'] = 'ovn'
+        self.assertEquals(c_builder.get_neutron_driver(ds_opts),
+                          'ovn')
+
+    @patch('apex.builders.common_builder.yaml')
+    @patch('apex.overcloud.deploy.os.path.isfile')
+    @patch('builtins.open', a_mock_open, create=True)
+    def test_prepare_container_images(self, mock_is_file, mock_yaml):
+        mock_yaml.safe_load.return_value = {
+            'parameter_defaults': {
+                'ContainerImagePrepare': [
+                    {'set':
+                        {'namespace': 'blah',
+                         'neutron_driver': 'null',
+                         }
+                     }
+                ]
+            }
+        }
+        expected_output = {
+            'parameter_defaults': {
+                'ContainerImagePrepare': [
+                    {'set':
+                        {'namespace': 'docker.io/tripleoqueens',
+                         'neutron_driver': 'opendaylight',
+                         }
+                     }
+                ]
+            }
+        }
+
+        c_builder.prepare_container_images('dummy.yaml', 'queens',
+                                           'opendaylight')
+        mock_yaml.safe_dump.assert_called_with(
+            expected_output,
+            a_mock_open.return_value,
+            default_flow_style=False)
index be52c27..004c21c 100644 (file)
@@ -118,6 +118,7 @@ class TestDeploy(unittest.TestCase):
         args.snapshot = False
         assert_raises(ApexDeployException, validate_deploy_args, args)
 
+    @patch('apex.deploy.c_builder')
     @patch('apex.deploy.ApexDeployment')
     @patch('apex.deploy.uc_builder')
     @patch('apex.deploy.network_data.create_network_data')
@@ -146,7 +147,7 @@ class TestDeploy(unittest.TestCase):
                   mock_utils, mock_parsers, mock_oc_cfg,
                   mock_virt_utils, mock_inv, mock_build_vms, mock_uc_lib,
                   mock_oc_deploy, mock_shutil, mock_network_data,
-                  mock_uc_builder, mock_deployment):
+                  mock_uc_builder, mock_deployment, mock_c_builder):
         net_sets_dict = {'networks': MagicMock(),
                          'dns_servers': 'test'}
         ds_opts_dict = {'global_params': MagicMock(),
@@ -197,6 +198,7 @@ class TestDeploy(unittest.TestCase):
         main()
         mock_snap_deployment.assert_called()
 
+    @patch('apex.deploy.c_builder')
     @patch('apex.deploy.ApexDeployment')
     @patch('apex.deploy.uc_builder')
     @patch('apex.deploy.network_data.create_network_data')
@@ -225,7 +227,7 @@ class TestDeploy(unittest.TestCase):
                        mock_utils, mock_parsers, mock_oc_cfg,
                        mock_virt_utils, mock_inv, mock_build_vms, mock_uc_lib,
                        mock_oc_deploy, mock_shutil, mock_network_data,
-                       mock_uc_builder, mock_deployment):
+                       mock_uc_builder, mock_deployment, mock_c_builder):
         # didn't work yet line 412
         # net_sets_dict = {'networks': {'admin': {'cidr': MagicMock()}},
         #                 'dns_servers': 'test'}
@@ -329,6 +331,7 @@ class TestDeploy(unittest.TestCase):
         # TODO(trozet) add assertions here with arguments for functions in
         # deploy main
 
+    @patch('apex.deploy.c_builder')
     @patch('apex.deploy.ApexDeployment')
     @patch('apex.deploy.uc_builder')
     @patch('apex.deploy.network_data.create_network_data')
@@ -358,7 +361,8 @@ class TestDeploy(unittest.TestCase):
                       mock_utils, mock_parsers, mock_oc_cfg,
                       mock_virt_utils, mock_inv, mock_build_vms, mock_uc_lib,
                       mock_oc_deploy, mock_git, mock_shutil,
-                      mock_network_data, mock_uc_builder, mock_deployment):
+                      mock_network_data, mock_uc_builder, mock_deployment,
+                      mock_c_builder):
         net_sets_dict = {'networks': MagicMock(),
                          'dns_servers': 'test'}
         ds_opts_dict = {'global_params': MagicMock(),
index a70057b..402eceb 100644 (file)
@@ -156,7 +156,6 @@ class TestOvercloudDeploy(unittest.TestCase):
         assert_in('--control-scale 3', result_cmd)
         assert_in('--compute-scale 2', result_cmd)
         assert_in('docker-images.yaml', result_cmd)
-        assert_in('sdn-images.yaml', result_cmd)
         assert_in('/usr/share/openstack-tripleo-heat-templates/environments'
                   '/docker.yaml', result_cmd)
         assert_in('/usr/share/openstack-tripleo-heat-templates/environments/'
index 1658801..8b6b9d4 100644 (file)
@@ -235,7 +235,9 @@ class Undercloud:
             "local_ip {}/{}".format(str(ns_admin['installer_vm']['ip']),
                                     str(ns_admin['cidr']).split('/')[1]),
             "generate_service_certificate false",
-            "undercloud_ntp_servers {}".format(str(ns['ntp'][0]))
+            "undercloud_ntp_servers {}".format(str(ns['ntp'][0])),
+            "container_images_file "
+            "/home/stack/containers-prepare-parameter.yaml"
         ]
 
         config['undercloud_network_config'] = [
diff --git a/build/containers-prepare-parameter.yaml b/build/containers-prepare-parameter.yaml
new file mode 100644 (file)
index 0000000..d6cfd10
--- /dev/null
@@ -0,0 +1,26 @@
+---
+parameter_defaults:
+  ContainerImagePrepare:
+    - push_destination: true
+      set:
+        ceph_image: daemon
+        ceph_namespace: docker.io/ceph
+        ceph_tag: v3.1.0-stable-3.1-luminous-centos-7-x86_64
+        name_prefix: centos-binary-
+        name_suffix: ''
+        namespace: docker.io/tripleomaster
+        neutron_driver: null
+        tag: current-tripleo-rdo
+      excludes:
+        - sensu
+        - manila
+        - octavia
+        - skydive
+        - drouter
+        - sahara
+        - rsys
+        - fluent
+        - designate
+        - barbican
+        - etcd
+        - ec2
index c217261..bac6812 100644 (file)
@@ -8,6 +8,8 @@ patches:
         project: openstack/tripleo-common
       - change-id: I8d1db69d520da069099f919f286e6a553dd645a5
         project: openstack/tripleo-heat-templates
+      - change-id: Ia51a825d11bd9b94d0110f13cdf2a6bbcedf6194
+        project: openstack/tripleo-common
     overcloud:
       - change-id: Ie988ba6a2d444a614e97c0edf5fce24b23970310
         project: openstack/puppet-tripleo
@@ -23,6 +25,8 @@ patches:
         branch: master
       - change-id: I8d1db69d520da069099f919f286e6a553dd645a5
         project: openstack/tripleo-heat-templates
+      - change-id: Ia51a825d11bd9b94d0110f13cdf2a6bbcedf6194
+        project: openstack/tripleo-common
     overcloud:
       - change-id: Ie988ba6a2d444a614e97c0edf5fce24b23970310
         project: openstack/puppet-tripleo
index 5e11ea9..45d18e4 100644 (file)
       with_items:
         - controller
         - compute
+    - name: Copy container prep env file to undercloud
+      copy:
+        src: "{{ apex_temp_dir }}/containers-prepare-parameter.yaml"
+        dest: "/home/stack/containers-prepare-parameter.yaml"
+        owner: stack
+        group: stack
+        mode: 0644
     - lineinfile:
         path: /etc/sudoers
         regexp: 'Defaults\s*requiretty'
index 54dbe09..e2a4e13 100644 (file)
       when: patched_docker_services|length > 0
     - name: Prepare generic docker registry image file
       shell: >
-        {{ stackrc }} && openstack overcloud container image prepare
-        --namespace docker.io/tripleo{{ os_version }}
-        --tag {{ container_tag }}
-        --push-destination {{ undercloud_ip }}:8787
-        -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml
-        -e /usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml
-        --output-images-file overcloud_containers.yml
+        sudo openstack tripleo container image prepare
+        -e /home/stack/containers-prepare-parameter.yaml
         --output-env-file docker-images.yaml
-      become: yes
-      become_user: stack
-    - name: Prepare SDN docker registry image file
-      shell: >
-        {{ stackrc }} && openstack overcloud container image prepare
-        --namespace docker.io/tripleo{{ os_version }}
-        --tag {{ container_tag }}
-        --push-destination {{ undercloud_ip }}:8787
-        {{ sdn_env_file }}
-        --output-images-file sdn_containers.yml
-        --output-env-file sdn-images.yaml
-      become: yes
-      become_user: stack
-      when: sdn != false
-    - name: Update Ceph tag for aarch64 in container env file
-      lineinfile:
-        path: /home/stack/overcloud_containers.yml
-        regexp: '.*ceph.*'
-        line: '- imagename: docker.io/ceph/daemon:master-fafda7d-luminous-centos-7-aarch64'
-      when: aarch64
-    - name: Update Ceph tag for aarch64 in container image file
-      lineinfile:
-        path: /home/stack/docker-images.yaml
-        regexp: '^DockerCephDaemonImage'
-        line: 'DockerCephDaemonImage: {{ undercloud_ip }}:8787/ceph/daemon/master-fafda7d-luminous-centos-7-aarch64'
-      when: aarch64
-    - name: Upload docker images to local registry
-      shell: >
-        {{ stackrc }} && openstack overcloud container image upload
-        --config-file /home/stack/overcloud_containers.yml
-    - name: Upload SDN docker images to local registry
-      shell: >
-        {{ stackrc }} && openstack overcloud container image upload
-        --config-file /home/stack/sdn_containers.yml
-      when: sdn != false
     - name: Collect docker images in registry
       uri:
         url: http://{{ undercloud_ip }}:8787/v2/_catalog
@@ -84,9 +44,8 @@
       with_items: "{{ patched_docker_services }}"
     - name: Modify Images with Apex tag
       replace:
-        path: "{{ item[0] }}"
+        path: "/home/stack/docker-images.yaml"
         regexp: "(\\s*Docker.*?:.*?centos-binary-{{ item[1] }}):.*"
         replace: '\1:apex'
-      with_nested:
-        - [ '/home/stack/sdn-images.yaml', '/home/stack/docker-images.yaml']
-        - "{{ patched_docker_services }}"
\ No newline at end of file
+      with_items: "{{ patched_docker_services }}"
+      become: yes
index 19657b5..4bb9312 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -32,6 +32,7 @@ packages =
     apex
 data_files =
     share/opnfv-apex/ =
+        build/containers-prepare-parameter.yaml
         build/network-environment.yaml
         build/opnfv-environment.yaml
         build/upstream-environment.yaml