示例#1
0
 def discover(conf: Config) -> KubeCtl:
     if conf.get_arg('KG_CONN_TYPE') == 'LOCAL':
         return local_kubectl_conn()(conf)
     if conf.get_arg('KG_CONN_TYPE') == 'GKE':
         return gke_conn()(conf)
     if conf.has_arg('KG_SERVICE_ACCOUNT_B64'):
         return gke_conn()(conf)
     else:
         return local_kubectl_conn()(conf)
示例#2
0
    def mock_kubectl(self, cluster_name: str, command: str, return_value: E.Either[Any, Any]):
        cmd = '{cwd}/{cache_dir_name}/kubectl ' \
              '--kubeconfig {cwd}/{cache_dir_name}/{cluster_name}-kubeconfig.yaml {command}' \
            .format(cache_dir_name=Config.cache_folder_name(), cwd=MockFileSystem.cwd(),
                    cluster_name=cluster_name, command=command)

        PyMock.mock(self.os_system.run, args=[cmd, MatchArg.any()], return_values=[return_value])
示例#3
0
    def mock_gcloud_download(self, return_value: E.Either[Any, Any]):
        os = 'darwin' if self.os_system.is_macos() else 'linux'
        cmd = 'cd {cwd}/{cache_dir_name} && ' \
              'curl -L https://dl.google.com/dl/cloudsdk/channels/rapid/' \
              'downloads/google-cloud-sdk-284.0.0-{os}-x86_64.tar.gz | tar zx' \
              .format(cache_dir_name=Config.cache_folder_name(), cwd=MockFileSystem.cwd(), os=os)

        PyMock.mock(self.os_system.run, args=[cmd, MatchArg.any()], return_values=[return_value])
示例#4
0
    def mock_download_install_kubectl(self, version: str, return_value: E.Either[Any, Any]):
        os = 'darwin' if self.os_system.is_macos() else 'linux'
        cmd = 'curl -L https://storage.googleapis.com/kubernetes-release/release' \
              '/{version}/bin/{os}/amd64/kubectl > {cwd}/{cache_dir_name}/kubectl && ' \
              'chmod u+x {cwd}/{cache_dir_name}/kubectl'\
            .format(version=version, cache_dir_name=Config.cache_folder_name(), cwd=MockFileSystem.cwd(), os=os)

        PyMock.mock(self.os_system.run, args=[cmd, MatchArg.any()], return_values=[return_value])
示例#5
0
    def mock_create_kube_config(self, cluster_name: str, return_value: E.Either[Any, Any]):
        cmd = '{script_dir}/create-kube-config.sh {cluster_name} {cwd}/{cache_dir_name} ' \
              '{cwd}/{cache_dir_name}/service_account.json ' \
              '"{cwd}/{cache_dir_name}/{cluster_name}-kubeconfig.yaml" project1' \
            .format(cache_dir_name=Config.cache_folder_name(), cwd=MockFileSystem.cwd(),
                    cluster_name=cluster_name, script_dir=MockFileSystem.script_dir())

        PyMock.mock(self.os_system.run, args=[cmd, MatchArg.any()], return_values=[return_value])
示例#6
0
 def create_kubectl(conf: Config):
     regex = conf.get_arg('KG_CLUSTER_REGEX', cluster_regex)
     if regex is None:
         conf.log.error(
             'gke_conn: cluster_regex required. Either pass cluster_regex or set env var KG_CLUSTER_REGEX'
         )
         sys.exit(1)
     return KubeCtl(conf, GKEProvider(project_id, service_account_b64,
                                      conf), regex)
示例#7
0
    def mock_clusters_list(self, cluster_names: List[str]):
        for cluster_name in cluster_names:
            self.mock_create_kube_config(cluster_name, return_value=E.success())
            self.mock_kubectl_apply_temp_file(cluster_name, return_value=E.success())

        cmd = '{cwd}/{cache_dir_name}/google-cloud-sdk/bin/gcloud container clusters list --format=\"value(name)\"' \
            .format(cache_dir_name=Config.cache_folder_name(), cwd=MockFileSystem.cwd())

        PyMock.mock(self.os_system.run, args=[cmd, MatchArg.any()], return_values=[E.success('\n'.join(cluster_names))])
示例#8
0
 def mock_glob_kubeconfigs(self, cluster_configs: List[str]):
     PyMock.mock(self.file_system.glob,
                 args=[
                     '{cwd}/{cache_dir}/*kubeconfig.yaml'.format(
                         cwd=self.file_system.cwd(),
                         cache_dir=Config.cache_folder_name())
                 ],
                 return_values=[cluster_configs])
     return self
示例#9
0
    def mock_activate_service_account(self, key_file_path: str, return_values: List[E.Either[Any, Any]]):
        cmd = '{cwd}/{cache_dir_name}/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file ' \
              '{cwd}/{cache_dir_name}/{key_file}' \
            .format(cache_dir_name=Config.cache_folder_name(), cwd=MockFileSystem.cwd(), key_file=key_file_path)

        PyMock.mock(self.os_system.run, args=[cmd, MatchArg.any()], return_values=return_values)
示例#10
0
    def mock_set_project_id(self, project_id: str, return_values: List[E.Either[Any, Any]]):
        cmd = '{cwd}/{cache_dir_name}/google-cloud-sdk/bin/gcloud config set project {project}' \
            .format(cache_dir_name=Config.cache_folder_name(), cwd=MockFileSystem.cwd(), project=project_id)

        PyMock.mock(self.os_system.run, args=[cmd, MatchArg.any()], return_values=return_values)
示例#11
0
 def script_dir():
     return '/rel_to_file/./' + Config.scripts_folder_name()
示例#12
0
def _get_service_account_info(service_account_b64: str, config: Config):
    service_account_b64 = config.get_arg('KG_SERVICE_ACCOUNT_B64',
                                         service_account_b64,
                                         ensure=True)
    return json.loads(b64decode(service_account_b64).decode("utf-8"))
示例#13
0
def _get_project_id(project_id, config: Config):
    return config.get_arg('KG_PROJECT_ID', project_id, ensure=True)