Exemplo n.º 1
0
    def test_install_extension_mpack(
            self, download_mpack_mock, expand_mpack_mock, add_replay_log_mock,
            purge_stacks_and_mpacks_mock, get_ambari_properties_mock,
            get_ambari_version_mock, create_symlink_mock, os_mkdir_mock,
            shutil_move_mock, os_path_exists_mock):
        options = self._create_empty_options_mock()
        options.mpack_path = "/path/to/myextension.tar.gz"
        options.purge = False
        download_mpack_mock.return_value = "/tmp/myextension.tar.gz"
        expand_mpack_mock.return_value = "mpacks/myextension-ambari-mpack-1.0.0.0"
        get_ambari_version_mock.return_value = "2.4.0.0"
        """
    os_path_exists_calls = [call('/tmp/myextension.tar.gz'),
                            call('mpacks/myextension-ambari-mpack-1.0.0.0/mpack.json'),
                            call('/var/lib/ambari-server/resources/stacks'),
                            call('/var/lib/ambari-server/resources/extensions'),
                            call('/var/lib/ambari-server/resources/common-services'),
                            call(mpacks_directory),
                            call(mpacks_directory + '/cache'),
                            call(mpacks_directory + '/myextension-ambari-mpack-1.0.0.0'),
                            call('/var/lib/ambari-server/resources/extensions'),
                            call('/var/lib/ambari-server/resources/extensions/MYEXTENSION')]
    """
        os_path_exists_mock.side_effect = [
            True, True, True, False, True, False, False, False, True, False
        ]
        get_ambari_properties_mock.return_value = configs
        shutil_move_mock.return_value = True

        install_mpack(options)

        extensions_directory = configs[
            serverConfiguration.EXTENSION_PATH_PROPERTY]
        mpacks_directory = configs[
            serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
        mpacks_staging_directory = os.path.join(
            mpacks_directory, "myextension-ambari-mpack-1.0.0.0")
        os_mkdir_calls = [
            call(extensions_directory),
            call(mpacks_directory),
            call(mpacks_directory + '/cache'),
            call(os.path.join(extensions_directory, "MYEXTENSION"))
        ]
        create_symlink_calls = [
            call(
                os.path.join(mpacks_staging_directory,
                             "extensions/MYEXTENSION"),
                os.path.join(extensions_directory, "MYEXTENSION"), "1.0",
                None),
            call(
                os.path.join(mpacks_staging_directory,
                             "extensions/MYEXTENSION"),
                os.path.join(extensions_directory, "MYEXTENSION"), "1.1", None)
        ]

        self.assertFalse(purge_stacks_and_mpacks_mock.called)
        os_mkdir_mock.assert_has_calls(os_mkdir_calls)
        create_symlink_mock.assert_has_calls(create_symlink_calls)
        self.assertTrue(add_replay_log_mock.called)
Exemplo n.º 2
0
 def test_install_mpack_with_no_mpack_path(self):
     options = self._create_empty_options_mock()
     fail = False
     try:
         install_mpack(options)
     except FatalException as e:
         self.assertEquals("Management pack not specified!", e.reason)
         fail = True
     self.assertTrue(fail)
Exemplo n.º 3
0
  def test_install_mpack_with_invalid_mpack_path(self, download_mpack_mock):
    options = self._create_empty_options_mock()
    options.mpack_path = "/invalid_path/mpack.tar.gz"
    download_mpack_mock.return_value = None

    fail = False
    try:
      install_mpack(options)
    except FatalException as e:
      self.assertEquals("Management pack could not be downloaded!", e.reason)
      fail = True
    self.assertTrue(fail)
Exemplo n.º 4
0
    def test_install_mpack_with_malformed_mpack(self,
                                                get_ambari_properties_mock,
                                                download_mpack_mock,
                                                get_archive_root_dir_mock,
                                                extract_archive_mock,
                                                os_path_exists_mock):
        options = self._create_empty_options_mock()
        options.mpack_path = "/path/to/mpack.tar.gz"
        download_mpack_mock.return_value = "/tmp/mpack.tar.gz"
        get_ambari_properties_mock.return_value = configs
        os_path_exists_mock.return_value = True
        get_archive_root_dir_mock.return_value = None

        fail = False
        try:
            install_mpack(options)
        except FatalException as e:
            self.assertEquals(
                "Malformed management pack. Root directory missing!", e.reason)
            fail = True
        self.assertTrue(fail)

        get_archive_root_dir_mock.return_value = "mpack"
        os_path_exists_mock.side_effect = [True, True, False, False]
        extract_archive_mock.return_value = None
        fail = False
        try:
            install_mpack(options)
        except FatalException as e:
            self.assertEquals(
                "Malformed management pack. Failed to expand management pack!",
                e.reason)
            fail = True
        self.assertTrue(fail)

        get_archive_root_dir_mock.return_value = "mpack"
        os_path_exists_mock.side_effect = [True, True, False, True, False]
        extract_archive_mock.return_value = None
        fail = False
        try:
            install_mpack(options)
        except FatalException as e:
            self.assertEquals(
                "Malformed management pack {0}. Metadata file missing!".format(
                    options.mpack_path), e.reason)
            fail = True
        self.assertTrue(fail)
Exemplo n.º 5
0
    def test_install_addon_service_mpack(
            self, download_mpack_mock, expand_mpack_mock,
            purge_stacks_and_mpacks_mock, add_replay_log_mock,
            get_ambari_properties_mock, get_ambari_version_mock,
            create_symlink_mock, os_mkdir_mock, shutil_move_mock,
            os_symlink_mock, os_path_isdir_mock, os_path_exists_mock):
        options = self._create_empty_options_mock()
        options.mpack_path = "/path/to/myservice.tar.gz"
        options.purge = False
        download_mpack_mock.return_value = "/tmp/myservice.tar.gz"
        expand_mpack_mock.return_value = "mpacks/myservice-ambari-mpack-1.0.0.0"
        get_ambari_version_mock.return_value = "2.4.0.0"
        """
    os_path_exists_calls = [call('/tmp/myservice.tar.gz'),
                            call('mpacks/myservice-ambari-mpack-1.0.0.0/mpack.json'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
                            call('/var/lib/ambari-server/resources/stacks'),
                            call('/var/lib/ambari-server/resources/common-services'),
                            call(mpacks_directory),
                            call(mpacks_directory + '/cache'),
                            call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0'),
                            call('/var/lib/ambari-server/resources/common-services/MYSERVICE'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0/services'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0/services')]
    """
        os_path_exists_mock.side_effect = [
            True, True, True, True, True, True, True, False, False, True, True,
            True, True, True, True
        ]

        get_ambari_properties_mock.return_value = configs
        shutil_move_mock.return_value = True
        os_path_isdir_mock.return_value = True

        install_mpack(options)

        stacks_directory = configs[STACK_LOCATION_KEY]
        common_services_directory = configs[COMMON_SERVICES_PATH_PROPERTY]
        mpacks_directory = configs[MPACKS_STAGING_PATH_PROPERTY]
        mpacks_staging_directory = os.path.join(
            mpacks_directory, "myservice-ambari-mpack-1.0.0.0")

        os_mkdir_calls = [
            call(os.path.join(common_services_directory, "MYSERVICE"))
        ]
        os_symlink_calls = [
            call(
                os.path.join(mpacks_staging_directory,
                             "common-services/MYSERVICE/1.0.0"),
                os.path.join(common_services_directory, "MYSERVICE/1.0.0")),
            call(
                os.path.join(mpacks_staging_directory,
                             "custom-services/MYSERVICE/1.0.0"),
                os.path.join(stacks_directory,
                             "MYSTACK/1.0/services/MYSERVICE")),
            call(
                os.path.join(mpacks_staging_directory,
                             "custom-services/MYSERVICE/2.0.0"),
                os.path.join(stacks_directory,
                             "MYSTACK/2.0/services/MYSERVICE"))
        ]

        self.assertFalse(purge_stacks_and_mpacks_mock.called)
        os_mkdir_mock.assert_has_calls(os_mkdir_calls)
        os_symlink_mock.assert_has_calls(os_symlink_calls)
        self.assertTrue(add_replay_log_mock.called)
Exemplo n.º 6
0
    def test_install_stack_mpack(
            self, validate_purge_mock, run_os_command_mock,
            download_mpack_mock, expand_mpack_mock,
            purge_stacks_and_mpacks_mock, add_replay_log_mock,
            get_ambari_properties_mock, get_ambari_version_mock,
            create_symlink_mock, os_mkdir_mock, shutil_move_mock,
            os_path_exists_mock):
        options = self._create_empty_options_mock()
        options.mpack_path = "/path/to/mystack.tar.gz"
        options.purge = True
        download_mpack_mock.return_value = "/tmp/mystack.tar.gz"
        expand_mpack_mock.return_value = "mpacks/mystack-ambari-mpack-1.0.0.0"
        get_ambari_version_mock.return_value = "2.4.0.0"
        run_os_command_mock.return_value = (0, "", "")
        mpacks_directory = configs[
            serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
        """
    os_path_exists_calls = [call('/tmp/mystack.tar.gz'),
                            call('mpacks/mystack-ambari-mpack-1.0.0.0/mpack.json'),
                            call('mpacks/mystack-ambari-mpack-1.0.0.0/hooks/before_install.py'),
                            call('/var/lib/ambari-server/resources/stacks'),
                            call('/var/lib/ambari-server/resources/extensions'),
                            call('/var/lib/ambari-server/resources/common-services'),
                            call(mpacks_directory),
                            call(mpacks_directory + '/cache'),
                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0'),
                            call('/var/lib/ambari-server/resources/common-services/SERVICEA'),
                            call('/var/lib/ambari-server/resources/common-services/SERVICEB'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0/services'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.1'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.1/services'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0/services'),
                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/hooks/after_install.py')]
    """
        os_path_exists_mock.side_effect = [
            True, True, True, False, True, False, False, False, False, False,
            False, False, False, False, False, False, False, False, True
        ]
        get_ambari_properties_mock.return_value = configs
        shutil_move_mock.return_value = True

        install_mpack(options)

        stacks_directory = configs[serverConfiguration.STACK_LOCATION_KEY]
        common_services_directory = configs[
            serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
        extensions_directory = configs[
            serverConfiguration.EXTENSION_PATH_PROPERTY]
        mpacks_directory = configs[
            serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
        mpacks_staging_directory = os.path.join(
            mpacks_directory, "mystack-ambari-mpack-1.0.0.0")

        run_os_command_calls = [
            call([
                "/usr/bin/ambari-python-wrap",
                "mpacks/mystack-ambari-mpack-1.0.0.0/hooks/before_install.py"
            ]),
            call([
                "/usr/bin/ambari-python-wrap", mpacks_directory +
                "/mystack-ambari-mpack-1.0.0.0/hooks/after_install.py"
            ])
        ]

        os_mkdir_calls = [
            call(stacks_directory),
            call(common_services_directory),
            call(mpacks_directory),
            call(mpacks_directory + '/cache'),
            call(os.path.join(common_services_directory, "SERVICEA")),
            call(os.path.join(common_services_directory, "SERVICEB")),
            call(os.path.join(stacks_directory, "MYSTACK")),
            call(os.path.join(stacks_directory, "MYSTACK/1.0")),
            call(os.path.join(stacks_directory, "MYSTACK/1.0/services")),
            call(os.path.join(stacks_directory, "MYSTACK/1.1")),
            call(os.path.join(stacks_directory, "MYSTACK/1.1/services")),
            call(os.path.join(stacks_directory, "MYSTACK/2.0")),
            call(os.path.join(stacks_directory, "MYSTACK/2.0/services"))
        ]
        create_symlink_calls = [
            call(
                os.path.join(mpacks_staging_directory,
                             "common-services/SERVICEA"),
                os.path.join(common_services_directory, "SERVICEA"), "1.0",
                None),
            call(
                os.path.join(mpacks_staging_directory,
                             "common-services/SERVICEA"),
                os.path.join(common_services_directory, "SERVICEA"), "2.0",
                None),
            call(
                os.path.join(mpacks_staging_directory,
                             "common-services/SERVICEB"),
                os.path.join(common_services_directory, "SERVICEB"), "1.0.0",
                None),
            call(
                os.path.join(mpacks_staging_directory,
                             "common-services/SERVICEB"),
                os.path.join(common_services_directory, "SERVICEB"), "2.0.0",
                None),
            call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/1.0"),
                 os.path.join(stacks_directory, "MYSTACK/1.0"), "metainfo.xml",
                 None),
            call(
                os.path.join(mpacks_staging_directory,
                             "stacks/MYSTACK/1.0/services"),
                os.path.join(stacks_directory, "MYSTACK/1.0/services"),
                "SERVICEA", None),
            call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/1.1"),
                 os.path.join(stacks_directory, "MYSTACK/1.1"), "metainfo.xml",
                 None),
            call(
                os.path.join(mpacks_staging_directory,
                             "stacks/MYSTACK/1.1/services"),
                os.path.join(stacks_directory, "MYSTACK/1.1/services"),
                "SERVICEA", None),
            call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/2.0"),
                 os.path.join(stacks_directory, "MYSTACK/2.0"), "metainfo.xml",
                 None),
            call(
                os.path.join(mpacks_staging_directory,
                             "stacks/MYSTACK/2.0/services"),
                os.path.join(stacks_directory, "MYSTACK/2.0/services"),
                "SERVICEA", None),
            call(
                os.path.join(mpacks_staging_directory,
                             "stacks/MYSTACK/2.0/services"),
                os.path.join(stacks_directory, "MYSTACK/2.0/services"),
                "SERVICEB", None)
        ]

        self.assertTrue(purge_stacks_and_mpacks_mock.called)
        run_os_command_mock.assert_has_calls(run_os_command_calls)
        os_mkdir_mock.assert_has_calls(os_mkdir_calls)
        create_symlink_mock.assert_has_calls(create_symlink_calls)
        self.assertTrue(add_replay_log_mock.called)
Exemplo n.º 7
0
  def test_install_addon_service_mpack(self, set_file_permissions_mock, download_mpack_mock, expand_mpack_mock, purge_stacks_and_mpacks_mock,
                                       add_replay_log_mock, get_ambari_properties_mock, get_ambari_version_mock,
                                       create_symlink_mock, os_mkdir_mock, shutil_move_mock,os_symlink_mock,
                                       os_path_isdir_mock, os_path_exists_mock ):
    options = self._create_empty_options_mock()
    options.mpack_path = "/path/to/myservice.tar.gz"
    options.purge = False
    download_mpack_mock.return_value = "/tmp/myservice.tar.gz"
    expand_mpack_mock.return_value = "mpacks/myservice-ambari-mpack-1.0.0.0"
    get_ambari_version_mock.return_value = "2.4.0.0"

    os_path_exists_mock.side_effect = [True, True, True, True, True, True, True,
                                       True, True, False, False, True, False, False,
                                       True, True, True, True, False, True, True,
                                       True, False]

    get_ambari_properties_mock.return_value = configs
    shutil_move_mock.return_value = True
    os_path_isdir_mock.return_value = True

    install_mpack(options)

    stacks_directory = configs[serverConfiguration.STACK_LOCATION_KEY]
    common_services_directory = configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
    mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
    mpacks_staging_directory = os.path.join(mpacks_directory, "myservice-ambari-mpack-1.0.0.0")
    resources_directory = configs[serverConfiguration.RESOURCES_DIR_PROPERTY]
    dashboards_directory = os.path.join(resources_directory, "dashboards")

    os_path_exists_calls = [call('/tmp/myservice.tar.gz'),
                            call('mpacks/myservice-ambari-mpack-1.0.0.0/mpack.json'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
                            call('/var/lib/ambari-server/resources'),
                            call('/var/lib/ambari-server/resources/stacks'),
                            call('/var/lib/ambari-server/resources/extensions'),
                            call('/var/lib/ambari-server/resources/common-services'),
                            call(mpacks_directory),
                            call(mpacks_directory + '/cache'),
                            call('/var/lib/ambari-server/resources/dashboards'),
                            call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0'),
                            call('/var/lib/ambari-server/resources'),
                            call('/var/lib/ambari-server/resources/common-services/MYSERVICE'),
                            call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/common-services/MYSERVICE/1.0.0/dashboards'),
                            call('/var/lib/ambari-server/resources'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0/services'),
                            call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/custom-services/MYSERVICE/1.0.0/dashboards'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0'),
                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0/services'),
                            call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/custom-services/MYSERVICE/2.0.0/dashboards')]

    os_mkdir_calls = [
      call(dashboards_directory),
      call(os.path.join(dashboards_directory, GRAFANA_DASHBOARDS_DIRNAME)),
      call(os.path.join(dashboards_directory, SERVICE_METRICS_DIRNAME)),
      call(os.path.join(common_services_directory, "MYSERVICE"))
    ]
    create_symlink_calls = [
      call(os.path.join(mpacks_staging_directory, "common-services/MYSERVICE"),
           os.path.join(common_services_directory, "MYSERVICE"), "1.0.0", None)
    ]
    os_symlink_calls = [
      call(os.path.join(mpacks_staging_directory, "custom-services/MYSERVICE/1.0.0"),
           os.path.join(stacks_directory, "MYSTACK/1.0/services/MYSERVICE")),
      call(os.path.join(mpacks_staging_directory, "custom-services/MYSERVICE/2.0.0"),
           os.path.join(stacks_directory, "MYSTACK/2.0/services/MYSERVICE"))
    ]

    os_path_exists_mock.assert_has_calls(os_path_exists_calls)
    self.assertFalse(purge_stacks_and_mpacks_mock.called)
    os_mkdir_mock.assert_has_calls(os_mkdir_calls)
    create_symlink_mock.assert_has_calls(create_symlink_calls)
    os_symlink_mock.assert_has_calls(os_symlink_calls)
    self.assertTrue(add_replay_log_mock.called)