Пример #1
0
    def _create_and_upload_vnf(self, sample_name):
        body = jsonutils.dumps({"userDefinedData": {"foo": "bar"}})
        vnf_package = self._create_vnf_package(body)
        csar_dir = self._get_csar_dir_path(sample_name)
        if os.path.exists(os.path.join(csar_dir, 'TOSCA-Metadata')) and \
                sample_name != 'vnfpkgm2':
            file_path = utils.create_csar_with_unique_artifact(csar_dir)
        else:
            file_path, vnfd_id = utils.create_csar_with_unique_vnfd_id(
                csar_dir)
        self.addCleanup(os.remove, file_path)

        with open(file_path, 'rb') as file_object:
            resp, resp_body = self.http_client.do_request(
                '{base_path}/{id}/package_content'.format(
                    id=vnf_package['id'], base_path=self.base_url),
                "PUT",
                body=file_object,
                content_type='application/zip')

        self.assertEqual(202, resp.status_code)

        self._wait_for_onboard(vnf_package['id'])

        return vnf_package['id']
Пример #2
0
    def test_upload_from_uri_with_auth_and_delete(self):
        csar_dir = self._get_csar_dir_path("sample_vnfpkg_no_meta_single_vnfd")
        file_path, vnfd_id = utils.create_csar_with_unique_vnfd_id(csar_dir)
        self.addCleanup(os.remove, file_path)

        cls_obj = utils.StaticHttpFileHandler(os.path.dirname(file_path))
        self.addCleanup(cls_obj.stop)

        body = jsonutils.dumps({"userDefinedData": {"foo": "bar"}})
        vnf_package = self._create_vnf_package(body)
        csar_file_uri = 'http://localhost:{port}/{filename}'.format(
            port=cls_obj.port, filename=os.path.basename(file_path))
        body = jsonutils.dumps({
            "addressInformation": csar_file_uri,
            "userName": "******",
            "password": "******"
        })
        resp, resp_body = self.http_client.do_request(
            '{base_path}/{id}/package_content/upload_from_uri'.format(
                id=vnf_package['id'], base_path=self.base_url),
            "POST",
            body=body)
        self.assertEqual(202, resp.status_code)

        self._wait_for_onboard(vnf_package['id'])

        self._disable_operational_state(vnf_package['id'])
        self._delete_vnf_package(vnf_package['id'])
        self._wait_for_delete(vnf_package['id'])
Пример #3
0
 def test_load_csar_data(self, mock_extract_csar_zip_file):
     file_path, _ = utils.create_csar_with_unique_vnfd_id(
         './tacker/tests/etc/samples/etsi/nfv/vnfpkgm1')
     self.addCleanup(os.remove, file_path)
     vnf_data, flavours = csar_utils.load_csar_data(
         self.context, constants.UUID, file_path)
     self.assertEqual(vnf_data['descriptor_version'], '1.0')
     self.assertEqual(vnf_data['vnfm_info'], ['Tacker'])
     self.assertEqual(flavours[0]['flavour_id'], 'simple')
     self.assertIsNotNone(flavours[0]['sw_images'])
Пример #4
0
 def test_load_csar_with_artifacts_short_notation_without_sw_image_data(
         self, mock_extract_csar_zip_file):
     file_path = "./tacker/tests/etc/samples/etsi/nfv/" \
                 "csar_short_notation_for_artifacts_without_sw_image_data"
     zip_name, uniqueid = utils.create_csar_with_unique_vnfd_id(file_path)
     exc = self.assertRaises(exceptions.InvalidCSAR,
                             csar_utils.load_csar_data, self.context,
                             constants.UUID, zip_name)
     msg = ('Node property "sw_image_data" is missing for'
            ' artifact sw_image for node VDU1.')
     self.assertEqual(msg, exc.format_message())
     os.remove(zip_name)
Пример #5
0
    def test_patch_in_onboarded_state(self):
        user_data = jsonutils.dumps({
            "userDefinedData": {
                "key1": "val1",
                "key2": "val2",
                "key3": "val3"
            }
        })
        vnf_package = self._create_vnf_package(user_data)

        update_req_body = jsonutils.dumps({
            "operationalState": "DISABLED",
            "userDefinedData": {
                "key1": "changed_val1",
                "key2": "val2",
                "new_key": "new_val"
            }
        })

        expected_result = {
            "operationalState": "DISABLED",
            "userDefinedData": {
                "key1": "changed_val1",
                "new_key": "new_val"
            }
        }

        csar_dir = self._get_csar_dir_path("vnfpkgm1")
        file_path, vnfd_id = utils.create_csar_with_unique_vnfd_id(csar_dir)
        self.addCleanup(os.remove, file_path)
        with open(file_path, 'rb') as file_object:
            resp, resp_body = self.http_client.do_request(
                '{base_path}/{id}/package_content'.format(
                    id=vnf_package['id'], base_path=self.base_url),
                "PUT",
                body=file_object,
                content_type='application/zip')

        self.assertEqual(202, resp.status_code)
        self._wait_for_onboard(vnf_package['id'])

        # Update vnf package which is onboarded
        resp, resp_body = self.http_client.do_request(
            '{base_path}/{id}'.format(id=vnf_package['id'],
                                      base_path=self.base_url),
            "PATCH",
            content_type='application/json',
            body=update_req_body)

        self.assertEqual(200, resp.status_code)
        self.assertEqual(expected_result, resp_body)
        self._delete_vnf_package(vnf_package['id'])
        self._wait_for_delete(vnf_package['id'])
Пример #6
0
    def test_load_csar_data_with_multiple_sw_image_data_with_short_notation(
            self, mock_extract_csar_zip_file):

        file_path = "./tacker/tests/etc/samples/etsi/nfv/" \
                    "csar_multiple_sw_image_data_with_short_notation"
        zip_name, uniqueid = utils.create_csar_with_unique_vnfd_id(file_path)
        exc = self.assertRaises(exceptions.InvalidCSAR,
                                csar_utils.load_csar_data, self.context,
                                constants.UUID, zip_name)
        msg = ('artifacts of type "tosca.artifacts.nfv.SwImage"'
               ' is added more than one time for node VDU1.')
        self.assertEqual(msg, exc.format_message())
        os.remove(zip_name)
Пример #7
0
    def test_load_csar_data_with_artifacts_short_notation(
            self, mock_extract_csar_zip_file):
        file_path = "./tacker/tests/etc/samples/etsi/nfv/" \
                    "csar_with_short_notation_for_artifacts"
        zip_name, uniqueid = utils.create_csar_with_unique_vnfd_id(file_path)

        vnf_data, flavours, vnf_artifacts = csar_utils.load_csar_data(
            self.context, constants.UUID, zip_name)
        self.assertEqual(vnf_data['descriptor_version'], '1.0')
        self.assertEqual(vnf_data['vnfm_info'], ['Tacker'])
        self.assertEqual(flavours[0]['flavour_id'], 'simple')
        self.assertIsNotNone(flavours[0]['sw_images'])
        os.remove(zip_name)
Пример #8
0
 def test_get_vnf_package_vnfd_download_from_glance_store(self,
                                                          mock_load_csar):
     fake_csar = os.path.join(self.temp_dir, self.vnf_package.id)
     cfg.CONF.set_override('vnf_package_csar_path', self.temp_dir,
                           group='vnf_package')
     fake_csar_zip, _ = utils.create_csar_with_unique_vnfd_id(
         './tacker/tests/etc/samples/etsi/nfv/vnfpkgm1')
     mock_load_csar.return_value = fake_csar_zip
     expected_data = fakes.get_expected_vnfd_data(zip_file=fake_csar_zip)
     result = self.conductor.get_vnf_package_vnfd(self.context,
                                                  self.vnf_package)
     self.assertEqual(expected_data, result)
     shutil.rmtree(fake_csar)
     os.remove(fake_csar_zip)
Пример #9
0
def _create_and_upload_vnf_package(tacker_client, csar_package_name,
                                   user_defined_data):
    # create vnf package
    body = jsonutils.dumps({"userDefinedData": user_defined_data})
    resp, vnf_package = tacker_client.do_request('/vnfpkgm/v1/vnf_packages',
                                                 "POST",
                                                 body=body)

    # upload vnf package
    csar_package_path = "../../etc/samples/etsi/nfv/%s" % csar_package_name
    file_path = os.path.abspath(
        os.path.join(os.path.dirname(__file__), csar_package_path))

    # Generating unique vnfd id. This is required when multiple workers
    # are running concurrently. The call below creates a new temporary
    # CSAR with unique vnfd id.
    file_path, uniqueid = utils.create_csar_with_unique_vnfd_id(file_path)

    with open(file_path, 'rb') as file_object:
        resp, resp_body = tacker_client.do_request(
            '/vnfpkgm/v1/vnf_packages/{id}/package_content'.format(
                id=vnf_package['id']),
            "PUT",
            body=file_object,
            content_type='application/zip')

    # wait for onboard
    timeout = VNF_PACKAGE_UPLOAD_TIMEOUT
    start_time = int(time.time())
    show_url = os.path.join('/vnfpkgm/v1/vnf_packages', vnf_package['id'])
    vnfd_id = None
    while True:
        resp, body = tacker_client.do_request(show_url, "GET")
        if body['onboardingState'] == "ONBOARDED":
            vnfd_id = body['vnfdId']
            break

        if ((int(time.time()) - start_time) > timeout):
            raise Exception("Failed to onboard vnf package")

        time.sleep(1)

    # remove temporarily created CSAR file
    os.remove(file_path)
    return vnf_package['id'], vnfd_id
Пример #10
0
 def test_load_csar_data_with_unit_conversion(self,
                                              mock_extract_csar_zip_file):
     file_path, _ = utils.create_csar_with_unique_vnfd_id(
         './tacker/tests/etc/samples/etsi/nfv/sample_vnfpkg_tosca_vnfd')
     self.addCleanup(os.remove, file_path)
     vnf_data, flavours, vnf_artifact = csar_utils.load_csar_data(
         self.context, constants.UUID, file_path)
     self.assertEqual(vnf_data['descriptor_version'], '1.0')
     self.assertEqual(vnf_data['vnfm_info'], ['Tacker'])
     self.assertEqual(flavours[0]['flavour_id'], 'simple')
     self.assertIsNotNone(flavours[0]['sw_images'])
     # 'size', 'min_disk' and 'min_ram' values from sample VNFD will
     # be converted to Bytes
     self.assertEqual(flavours[0]['sw_images'][0]['min_disk'], 1000000000)
     self.assertEqual(flavours[0]['sw_images'][0]['size'], 1879048192)
     self.assertEqual(flavours[0]['sw_images'][1]['min_disk'], 2000000000)
     self.assertEqual(flavours[0]['sw_images'][1]['size'], 2000000000)
     self.assertEqual(flavours[0]['sw_images'][1]['min_ram'], 8590458880)