def test_check_os_get_os_version_fail(mocker): get_os_version_mock = mocker.patch( 'util.dependencies_checker.get_os_version') get_os_version_mock.side_effect = FileNotFoundError() with pytest.raises(InvalidOsError) as os_error: check_os() assert Texts.GET_OS_VERSION_ERROR_MSG == str(os_error.value)
def test_check_os_unknown(mocker): get_os_version_mock = mocker.patch( 'util.dependencies_checker.get_os_version') get_os_version_mock.return_value = ("", LooseVersion("0")) with pytest.raises(InvalidOsError) as os_error: check_os() assert Texts.UNKNOWN_OS_ERROR_MSG == str(os_error.value)
def test_check_os_version_not_supported(mocker): get_os_version_mock = mocker.patch( 'util.dependencies_checker.get_os_version') get_os_version_mock.return_value = ("ubuntu", LooseVersion("14.04")) with pytest.raises(InvalidOsError) as os_error: check_os() assert Texts.INVALID_OS_VERSION_ERROR_MSG.format( os_name="ubuntu", os_version="14.04") == str(os_error.value)
def test_check_os_version_supported(mocker): get_os_version_mock = mocker.patch( 'util.dependencies_checker.get_os_version') get_os_version_mock.return_value = (list(SUPPORTED_OS_MAP.keys())[0], SUPPORTED_OS_MAP[list( SUPPORTED_OS_MAP.keys())[0]]) try: check_os() except InvalidOsError: pytest.fail("check_os failed with supported OS.")
def test_check_os_not_supported(mocker): get_os_version_mock = mocker.patch( 'util.dependencies_checker.get_os_version') get_os_version_mock.return_value = ("not_supported_system", LooseVersion("9.3")) with pytest.raises(InvalidOsError) as os_error: check_os() assert Texts.UNSUPPORTED_OS_ERROR_MSG.format(os_name="not_supported_system", os_version="9.3") \ == str(os_error.value)
def verify_cli_dependencies(): try: namespace = 'kube-system' if is_current_user_administrator(request_timeout=VERIFY_REQUEST_TIMEOUT) \ else get_kubectl_current_context_namespace() except Exception: error_msg = Texts.KUBECTL_NAMESPACE_ERROR_MSG handle_error(logger, error_msg, error_msg, add_verbosity_msg=True) sys.exit(1) try: check_os() check_all_binary_dependencies(namespace=namespace) except (InvalidDependencyError, InvalidOsError): error_msg = Texts.INVALID_DEPENDENCY_ERROR_MSG handle_error(logger, error_msg, error_msg, add_verbosity_msg=True)
def verify(state: State): try: with spinner(text=Texts.CHECKING_OS_MSG): check_os() click.echo(Texts.OS_SUPPORTED_MSG) except InvalidOsError as exception: handle_error(logger, str(exception), str(exception), add_verbosity_msg=True) exit(1) dependencies = get_dependency_map() kubectl_dependency_name = 'kubectl' kubectl_dependency_spec = dependencies[kubectl_dependency_name] with spinner(text=Texts.VERIFYING_DEPENDENCY_MSG.format( dependency_name=kubectl_dependency_name)): valid, installed_version = check_dependency( dependency_name=kubectl_dependency_name, dependency_spec=kubectl_dependency_spec) supported_versions_sign = '>=' logger.info( Texts.VERSION_CHECKING_MSG.format( dependency_name=kubectl_dependency_name, installed_version=installed_version, supported_versions_sign=supported_versions_sign, expected_version=kubectl_dependency_spec.expected_version)) if valid: click.echo( Texts.DEPENDENCY_VERIFICATION_SUCCESS_MSG.format( dependency_name=kubectl_dependency_name)) else: handle_error( logger, Texts.KUBECTL_INVALID_VERSION_ERROR_MSG.format( installed_version=installed_version, supported_versions_sign=supported_versions_sign, expected_version= # noqa kubectl_dependency_spec.expected_version), Texts.KUBECTL_INVALID_VERSION_ERROR_MSG, add_verbosity_msg=state.verbosity == 0) exit(1) del dependencies[kubectl_dependency_name] try: with spinner(text=Texts.CHECKING_CONNECTION_TO_CLUSTER_MSG): check_connection_to_cluster() with spinner(text=Texts.CHECKING_PORT_FORWARDING_FROM_CLUSTER_MSG): check_port_forwarding() except KubectlConnectionError as e: handle_error(logger, str(e), str(e), add_verbosity_msg=state.verbosity == 0) exit(1) except FileNotFoundError: handle_error(logger, Texts.KUBECTL_NOT_INSTALLED_ERROR_MSG, Texts.KUBECTL_NOT_INSTALLED_ERROR_MSG, add_verbosity_msg=state.verbosity == 0) exit(1) try: namespace = 'kube-system' if is_current_user_administrator( ) else get_kubectl_current_context_namespace() except Exception: handle_error(logger, Texts.GET_K8S_NAMESPACE_ERROR_MSG, Texts.GET_K8S_NAMESPACE_ERROR_MSG, add_verbosity_msg=state.verbosity == 0) exit(1) dependency_versions = {} for dependency_name, dependency_spec in dependencies.items(): try: supported_versions_sign = '==' if dependency_spec.match_exact_version else '>=' with spinner(text=Texts.VERIFYING_DEPENDENCY_MSG.format( dependency_name=dependency_name)): valid, installed_version = check_dependency( dependency_name=dependency_name, dependency_spec=dependency_spec, namespace=namespace) dependency_versions[dependency_name] = installed_version logger.info( Texts.VERSION_CHECKING_MSG.format( dependency_name=dependency_name, installed_version=installed_version, supported_versions_sign=supported_versions_sign, expected_version=dependency_spec.expected_version)) if valid: click.echo( Texts.DEPENDENCY_VERIFICATION_SUCCESS_MSG.format( dependency_name=dependency_name)) else: click.echo( Texts.INVALID_VERSION_WARNING_MSG.format( dependency_name=dependency_name, installed_version=installed_version, supported_versions_sign=supported_versions_sign, expected_version=dependency_spec.expected_version)) except FileNotFoundError: handle_error(logger, Texts.DEPENDENCY_NOT_INSTALLED_ERROR_MSG.format( dependency_name=dependency_name), Texts.DEPENDENCY_NOT_INSTALLED_ERROR_MSG.format( dependency_name=dependency_name), add_verbosity_msg="client" not in dependency_name) exit(1) except (RuntimeError, ValueError, TypeError): handle_error(logger, Texts.DEPENDENCY_VERSION_CHECK_ERROR_MSG.format( dependency_name=dependency_name), Texts.DEPENDENCY_VERSION_CHECK_ERROR_MSG.format( dependency_name=dependency_name), add_verbosity_msg=state.verbosity == 0) exit(1) except Exception: handle_error(logger, Texts.DEPENDENCY_VERIFICATION_OTHER_ERROR_MSG.format( dependency_name=dependency_name), Texts.DEPENDENCY_VERIFICATION_OTHER_ERROR_MSG.format( dependency_name=dependency_name), add_verbosity_msg=state.verbosity == 0) exit(1) else: # This block is entered if all dependencies were validated successfully # Save dependency versions in a file save_dependency_versions(dependency_versions)