def test_job_launch_JT_enforces_unique_extra_credential_kinds( machine_credential, credentialtype_aws, deploy_jobtemplate): """ JT launching should require that extra_credentials have distinct CredentialTypes """ pks = [] for i in range(2): aws = Credential.objects.create(name='cred-%d' % i, credential_type=credentialtype_aws, inputs={ 'username': '******', 'password': '******' }) aws.save() pks.append(aws.pk) kv = dict(extra_credentials=pks, credential=machine_credential.id) serializer = JobLaunchSerializer(instance=deploy_jobtemplate, data=kv, context={ 'obj': deploy_jobtemplate, 'data': kv, 'passwords': {} }) validated = serializer.is_valid() assert validated is False
def test_job_launch_JT_with_credentials(machine_credential, credential, net_credential, kube_credential, deploy_jobtemplate): deploy_jobtemplate.ask_credential_on_launch = True deploy_jobtemplate.save() kv = dict(credentials=[ credential.pk, net_credential.pk, machine_credential.pk, kube_credential.pk ]) serializer = JobLaunchSerializer(data=kv, context={'template': deploy_jobtemplate}) validated = serializer.is_valid() assert validated, serializer.errors kv['credentials'] = [ credential, net_credential, machine_credential, kube_credential ] # convert to internal value prompted_fields, ignored_fields, errors = deploy_jobtemplate._accept_or_ignore_job_kwargs( _exclude_errors=['required', 'prompts'], **kv) job_obj = deploy_jobtemplate.create_unified_job(**prompted_fields) creds = job_obj.credentials.all() assert len(creds) == 4 assert credential in creds assert net_credential in creds assert machine_credential in creds assert kube_credential in creds
def test_job_launch_JT_with_extra_credentials(machine_credential, credential, net_credential, deploy_jobtemplate): deploy_jobtemplate.ask_credential_on_launch = True deploy_jobtemplate.save() kv = dict(extra_credentials=[credential.pk, net_credential.pk], credential=machine_credential.id) serializer = JobLaunchSerializer(instance=deploy_jobtemplate, data=kv, context={ 'obj': deploy_jobtemplate, 'data': kv, 'passwords': {} }) validated = serializer.is_valid() assert validated prompted_fields, ignored_fields = deploy_jobtemplate._accept_or_ignore_job_kwargs( **kv) job_obj = deploy_jobtemplate.create_unified_job(**prompted_fields) extra_creds = job_obj.extra_credentials.all() assert len(extra_creds) == 2 assert credential in extra_creds assert net_credential in extra_creds
def test_job_launch_with_default_creds(machine_credential, vault_credential, deploy_jobtemplate): deploy_jobtemplate.ask_credential_on_launch = True deploy_jobtemplate.credentials.add(machine_credential) deploy_jobtemplate.credentials.add(vault_credential) kv = dict() serializer = JobLaunchSerializer(data=kv, context={'template': deploy_jobtemplate}) validated = serializer.is_valid() assert validated prompted_fields, ignored_fields, errors = deploy_jobtemplate._accept_or_ignore_job_kwargs( **kv) job_obj = deploy_jobtemplate.create_unified_job(**prompted_fields) assert job_obj.credential == machine_credential.pk assert job_obj.vault_credential == vault_credential.pk
def test_job_launch_JT_with_invalid_extra_credentials(machine_credential, deploy_jobtemplate, pks, error_msg): deploy_jobtemplate.ask_credential_on_launch = True deploy_jobtemplate.save() kv = dict(extra_credentials=pks, credential=machine_credential.id) serializer = JobLaunchSerializer(instance=deploy_jobtemplate, data=kv, context={ 'obj': deploy_jobtemplate, 'data': kv, 'passwords': {} }) validated = serializer.is_valid() assert validated is False
def test_job_launch_with_no_credentials(deploy_jobtemplate, ask_credential_on_launch): deploy_jobtemplate.credential = None deploy_jobtemplate.vault_credential = None deploy_jobtemplate.ask_credential_on_launch = ask_credential_on_launch serializer = JobLaunchSerializer(instance=deploy_jobtemplate, data={}, context={ 'obj': deploy_jobtemplate, 'data': {}, 'passwords': {} }) validated = serializer.is_valid() assert validated is False assert serializer.errors['credential'] == [ "Job Template 'credential' is missing or undefined." ]
def test_job_launch_with_empty_creds(machine_credential, vault_credential, deploy_jobtemplate, credential): deploy_jobtemplate.ask_credential_on_launch = True deploy_jobtemplate.credentials.add(machine_credential) deploy_jobtemplate.credentials.add(vault_credential) # `credentials` list is strictly those already present on deploy_jobtemplate kv = dict(credentials=[ credential.pk, machine_credential.pk, vault_credential.pk ]) serializer = JobLaunchSerializer(data=kv, context={'template': deploy_jobtemplate}) validated = serializer.is_valid() assert validated, serializer.errors prompted_fields, ignored_fields, errors = deploy_jobtemplate._accept_or_ignore_job_kwargs( **serializer.validated_data) job_obj = deploy_jobtemplate.create_unified_job(**prompted_fields) assert job_obj.credential is deploy_jobtemplate.credential assert job_obj.vault_credential is deploy_jobtemplate.vault_credential
def test_job_launch_with_only_vault_credential(vault_credential, deploy_jobtemplate): deploy_jobtemplate.credential = None deploy_jobtemplate.vault_credential = vault_credential serializer = JobLaunchSerializer(instance=deploy_jobtemplate, data={}, context={ 'obj': deploy_jobtemplate, 'data': {}, 'passwords': {} }) validated = serializer.is_valid() assert validated prompted_fields, ignored_fields = deploy_jobtemplate._accept_or_ignore_job_kwargs( **{}) job_obj = deploy_jobtemplate.create_unified_job(**prompted_fields) assert job_obj.vault_credential.pk == vault_credential.pk
def test_job_launch_JT_enforces_unique_credentials_kinds( machine_credential, credentialtype_aws, deploy_jobtemplate): """ JT launching should require that credentials have distinct CredentialTypes """ creds = [] for i in range(2): aws = Credential.objects.create(name='cred-%d' % i, credential_type=credentialtype_aws, inputs={ 'username': '******', 'password': '******' }) aws.save() creds.append(aws) kv = dict(credentials=creds, credential=machine_credential.id) serializer = JobLaunchSerializer(data=kv, context={'template': deploy_jobtemplate}) validated = serializer.is_valid() assert not validated
def test_job_launch_with_vault_credential_and_prompted_machine_cred( machine_credential, vault_credential, deploy_jobtemplate): deploy_jobtemplate.credential = None deploy_jobtemplate.ask_credential_on_launch = True deploy_jobtemplate.vault_credential = vault_credential kv = dict(credential=machine_credential.id) serializer = JobLaunchSerializer(instance=deploy_jobtemplate, data=kv, context={ 'obj': deploy_jobtemplate, 'data': kv, 'passwords': {} }) validated = serializer.is_valid() assert validated prompted_fields, ignored_fields = deploy_jobtemplate._accept_or_ignore_job_kwargs( **kv) job_obj = deploy_jobtemplate.create_unified_job(**prompted_fields) assert job_obj.credential.pk == machine_credential.pk assert job_obj.vault_credential.pk == vault_credential.pk
def test_job_launch_JT_with_validation(machine_credential, credential, deploy_jobtemplate): deploy_jobtemplate.extra_vars = '{"job_template_var": 3}' deploy_jobtemplate.ask_credential_on_launch = True deploy_jobtemplate.ask_variables_on_launch = True deploy_jobtemplate.save() kv = dict(extra_vars={"job_launch_var": 4}, credentials=[machine_credential.pk, credential.pk]) serializer = JobLaunchSerializer(data=kv, context={'template': deploy_jobtemplate}) validated = serializer.is_valid() assert validated, serializer.errors kv['credentials'] = [machine_credential] # conversion to internal value job_obj = deploy_jobtemplate.create_unified_job(**kv) final_job_extra_vars = yaml.load(job_obj.extra_vars) assert 'job_launch_var' in final_job_extra_vars assert 'job_template_var' in final_job_extra_vars assert set([cred.pk for cred in job_obj.credentials.all() ]) == set([machine_credential.id, credential.id])
def test_job_launch_JT_with_validation(machine_credential, deploy_jobtemplate): deploy_jobtemplate.extra_vars = '{"job_template_var": 3}' deploy_jobtemplate.ask_credential_on_launch = True deploy_jobtemplate.save() kv = dict(extra_vars={"job_launch_var": 4}, credential=machine_credential.id) serializer = JobLaunchSerializer(instance=deploy_jobtemplate, data=kv, context={ 'obj': deploy_jobtemplate, 'data': kv, 'passwords': {} }) validated = serializer.is_valid() assert validated job_obj = deploy_jobtemplate.create_unified_job(**kv) final_job_extra_vars = yaml.load(job_obj.extra_vars) assert 'job_template_var' in final_job_extra_vars assert 'job_launch_var' in final_job_extra_vars assert job_obj.credential.id == machine_credential.id