예제 #1
0
def _GenerateKubeConfigs(code_generators):
  """Generate Kubernetes yaml configs.

  Args:
    code_generators: Iterable of KubeConfigGenerator.

  Returns:
    Iterable of dictionaries representing kubernetes yaml configs.
  """
  kube_configs = []
  for code_generator in code_generators:
    kube_configs.extend(code_generator.CreateConfigs())

  deployments = [
      config for config in kube_configs if config['kind'] == 'Deployment'
  ]
  for deployment, code_generator in itertools.product(deployments,
                                                      code_generators):
    code_generator.ModifyDeployment(deployment)

  for deployment in deployments:
    containers = yaml_helper.GetAll(deployment,
                                    ('spec', 'template', 'spec', 'containers'))

    for container, code_generator in itertools.product(containers,
                                                       code_generators):
      code_generator.ModifyContainer(container)

  return yaml.dump_all(kube_configs)
예제 #2
0
    def testCreateServiceAccountCredential(self):
        refresh_token = e2e_base.RefreshTokenAuth()
        local_credential_variable = EnvironmentVariable(
            'LOCAL_CREDENTIAL_PATH', _LOCAL_CREDENTIAL_FILE_PATH)

        pod_and_services_path = os.path.join(_LOCAL_DEVELOPMENT_DIR,
                                             'pods_and_services.yaml')
        with refresh_token as auth, local_credential_variable as _:
            command = (
                'code export --project {0} --kubernetes-file={1} '
                '--skaffold-file={2} --service-account={3} --dockerfile={4}'
            ).format(auth.Project(), pod_and_services_path,
                     _SKAFFOLD_FILE_PATH, self.local_account_email,
                     self.docker_file)
            self.Run(command)
            self.WriteInput('y')

        with open(pod_and_services_path) as pods_and_services_file:
            pods_and_services = list(yaml.load_all(pods_and_services_file))

        pod_specs = [
            spec for spec in pods_and_services if spec['kind'] == 'Deployment'
        ]
        self.assertGreaterEqual(len(pod_specs), 1)
        for spec in pod_specs:
            env_vars = yaml_helper.GetAll(spec,
                                          path=('spec', 'template', 'spec',
                                                'containers', 'env'))
            credential_vars = (
                var['value'] for var in env_vars
                if var['name'] == 'GOOGLE_APPLICATION_CREDENTIALS')
            env_var_path = next(credential_vars, None)
            self.assertEqual(
                env_var_path, '/etc/local_development_credential/'
                'local_development_service_account.json')

        secret_specs = [
            spec for spec in pods_and_services if spec['kind'] == 'Secret'
        ]
        self.assertEqual(len(secret_specs), 1)
        self.assertEqual(secret_specs[0]['metadata']['name'],
                         'local-development-credential')
예제 #3
0
 def testFinalList(self):
     obj = {'A': {'B': {'C': [1, 2, 3]}}}
     six.assertCountEqual(self, yaml_helper.GetAll(obj, ('A', 'B', 'C')),
                          (1, 2, 3))
예제 #4
0
 def testNotAListOrObj(self):
     obj = {'A': {'B': 3}}
     with self.assertRaises(ValueError):
         list(yaml_helper.GetAll(obj, ('A', 'B', 'C')))
예제 #5
0
 def testIntermediateList(self):
     obj = {'A': {'B': {'C': [{'D': 1}, {'D': 2}, {'D': 3}]}}}
     six.assertCountEqual(self, yaml_helper.GetAll(obj,
                                                   ('A', 'B', 'C', 'D')),
                          (1, 2, 3))