introduce Credentials
This commit is contained in:
parent
3cfb60a2de
commit
b72e7e717e
5 changed files with 94 additions and 11 deletions
|
@ -34,23 +34,30 @@ class CredentialMapping(Validateable):
|
|||
|
||||
def name_for_input(self):
|
||||
if self.name:
|
||||
return self.name
|
||||
result = self.name
|
||||
elif self.gopass_field:
|
||||
result = underscore(self.gopass_field)
|
||||
else:
|
||||
return underscore(self.gopass_field)
|
||||
result = ""
|
||||
return result
|
||||
|
||||
def name_for_environment(self):
|
||||
return self.name_for_input().upper()
|
||||
|
||||
|
||||
class Credentials(Validateable):
|
||||
def __init__(self, input: dict):
|
||||
def __init__(self, input: dict, default_mappings: list = []):
|
||||
input_mappings = input.get("credentials_mapping", [])
|
||||
self.mappings = []
|
||||
self.mappings = {}
|
||||
for input_mapping in default_mappings:
|
||||
mapping = CredentialMapping(input_mapping)
|
||||
self.mappings[mapping.name_for_input()] = mapping
|
||||
for input_mapping in input_mappings:
|
||||
self.mappings.append(CredentialMapping(input_mapping))
|
||||
mapping = CredentialMapping(input_mapping)
|
||||
self.mappings[mapping.name_for_input()] = mapping
|
||||
|
||||
def validate(self) -> List[str]:
|
||||
result = []
|
||||
for mapping in self.mappings:
|
||||
for mapping in self.mappings.values():
|
||||
result += mapping.validate()
|
||||
return result
|
||||
|
|
28
src/main/python/ddadevops/domain/credentials_service.py
Normal file
28
src/main/python/ddadevops/domain/credentials_service.py
Normal file
|
@ -0,0 +1,28 @@
|
|||
from pathlib import Path
|
||||
from .common import Devops, MixinType
|
||||
from .devops_factory import DevopsFactory
|
||||
from .version import Version
|
||||
from src.main.python.ddadevops.infrastructure import (
|
||||
BuildFileRepository
|
||||
)
|
||||
|
||||
class CredentialsService:
|
||||
def __init__(self, gopass_api, environment_api):
|
||||
|
||||
@classmethod
|
||||
def prod(cls):
|
||||
return cls(
|
||||
DevopsFactory(),
|
||||
BuildFileRepository(base_dir),
|
||||
)
|
||||
|
||||
def initialize(self, input: dict) -> Devops:
|
||||
mixin_types = self.devops_factory.__parse_mixin_types__(input["mixin_types"])
|
||||
version = None
|
||||
|
||||
if MixinType.RELEASE in mixin_types:
|
||||
primary_build_file_id = input.get("release_primary_build_file", "./project.clj")
|
||||
primary_build_file = self.build_file_repository.get(Path(primary_build_file_id))
|
||||
version = primary_build_file.get_version()
|
||||
|
||||
return self.devops_factory.build_devops(input, version=version)
|
|
@ -37,7 +37,7 @@ class DevopsFactory:
|
|||
"name": "grafana_cloud_password",
|
||||
}
|
||||
]
|
||||
mixins[MixinType.CREDENTIALS] = Credentials(input, version)
|
||||
mixins[MixinType.CREDENTIALS] = Credentials(input, default_mappings)
|
||||
|
||||
devops = Devops(input, specialized_builds=specialized_builds, mixins=mixins)
|
||||
|
||||
|
|
|
@ -99,3 +99,8 @@ class ExecutionApi:
|
|||
output = execute(command, True)
|
||||
print(output)
|
||||
return output
|
||||
|
||||
class EnvironmentApi():
|
||||
|
||||
def get(self, key):
|
||||
return environ.get(key)
|
||||
|
|
|
@ -71,8 +71,53 @@ def test_should_create_credentials():
|
|||
],
|
||||
}
|
||||
)
|
||||
|
||||
assert sut
|
||||
assert 2 == len(sut.mappings)
|
||||
|
||||
sut = Credentials(
|
||||
{},
|
||||
default_mappings=[
|
||||
{
|
||||
"gopass_path": "server/meissa/grafana-cloud",
|
||||
"gopass_field": "grafana-cloud-user",
|
||||
},
|
||||
{
|
||||
"gopass_path": "server/meissa/grafana-cloud",
|
||||
"name": "grafana_cloud_password",
|
||||
},
|
||||
],
|
||||
)
|
||||
assert sut
|
||||
assert 2 == len(sut.mappings)
|
||||
|
||||
sut = Credentials(
|
||||
{
|
||||
"credentials_mapping": [
|
||||
{
|
||||
"gopass_path": "dome/path",
|
||||
"gopass_field": "some-field",
|
||||
},
|
||||
{
|
||||
"gopass_path": "another_path",
|
||||
"name": "grafana_cloud_password",
|
||||
},
|
||||
],
|
||||
},
|
||||
default_mappings=[
|
||||
{
|
||||
"gopass_path": "server/meissa/grafana-cloud",
|
||||
"gopass_field": "grafana-cloud-user",
|
||||
},
|
||||
{
|
||||
"gopass_path": "server/meissa/grafana-cloud",
|
||||
"name": "grafana_cloud_password",
|
||||
},
|
||||
],
|
||||
)
|
||||
assert sut
|
||||
assert 3 == len(sut.mappings)
|
||||
assert sut.mappings["grafana_cloud_password"].gopass_path == "another_path"
|
||||
|
||||
|
||||
def test_should_validate_credentials():
|
||||
sut = Credentials(
|
||||
|
@ -98,9 +143,7 @@ def test_should_validate_credentials():
|
|||
"gopass_path": "server/meissa/grafana-cloud",
|
||||
"gopass_field": "grafana-cloud-user",
|
||||
},
|
||||
{
|
||||
"gopass_path": "server/meissa/grafana-cloud"
|
||||
},
|
||||
{"gopass_path": "server/meissa/grafana-cloud"},
|
||||
],
|
||||
}
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue