Blog
Erstellen von Typ-Anbietern für Google Deployment Manager

Deployment Manager ist ein Infrastrukturbereitstellungsdienst, der die Erstellung und Verwaltung von Google Cloud Platform-Ressourcen automatisiert. Viele GCP-Ressourcen können mit den verfügbaren GDM-Typen erstellt werden. Im Wesentlichen ist ein GDM-Typ eine Abstraktion über der API eines GCP-Dienstes. Einige Typen fehlen jedoch, daher möchte ich Ihnen in diesem Blog zeigen, wie Sie diese selbst hinzufügen können. GDM unterstützt jinja2 und Python-Vorlagen. In diesem Blog werden wir Python verwenden.
Suche nach dem Funddokument
Bevor wir unseren neuen Typ erstellen können, müssen wir das Erkennungsdokument finden, das mit der API des Dienstes verbunden ist, den wir hinzufügen möchten. Die im Discovery-Dokument enthaltenen Informationen umfassen Eigenschaften auf API-Ebene wie API-Inhalte, Ressourcenschemata, Authentifizierungsbereiche und Methoden. Ein Link zu diesem Dokument befindet sich in der übrigen Dokumentation des Dienstes, zum Beispiel: https://cloud.google.com/scheduler/docs/reference/rest
Erstellen des Typ-Anbieters
Da wir nun das Discovery-Dokument haben, können wir unsere Typressource erstellen. Es ist wichtig, die Eigenschaft "inputMappings" hinzuzufügen, da diese die Anmeldedaten enthält, die für die Authentifizierung bei der API benötigt werden.
def _generateSchedulerTypeResource(context):
properties = {
'descriptorUrl': 'https://cloudscheduler.googleapis.com/$discovery/rest?version=v1beta1',
'options': {
'inputMappings': [
{
'fieldName': 'Authorization',
'location': 'HEADER',
'value': '$.concat("Bearer ", $.googleOauth2AccessToken())',
},
],
}
}
return {
‘name‘: ‘cloudscheduler-v1beta1‘,
‘type‘: ‘deploymentmanager.v2beta.typeProvider‘,
‘properties‘: properties,
}
Erstellen der Ressource
Mit unserem frisch erstellten Type Provider können wir eine Serviceressource definieren. Die Eigenschaft "action" im folgenden Code ist eine Verkettung der Projekt-ID, des Namens des Typanbieters und der Rest-Api-Endpunkt-ID, die aus dem Discovery-Dokument destilliert werden kann.
def _generateSchedulerJobResource(context):
project_id = 'myprojectid'
region = 'europe-west2'
parent = 'projects/' + project_id + '/locations/' + region
name_short = 'myjob'
name_full = parent + '/jobs/' + name_short
topic = 'trigger-job'
properties = {
‘name‘: name_full,
‘parent‘: parent,
‘content‘: name_short,
‘schedule‘: ‘0 6 */1 * *‘,
‘timeZone‘: ‘Europe/Brussels‘,
‘pubsubTarget‘: {
‘topicName‘: ‘projects/‘ + project_id + ‘/topics/‘ + topic,
‘attributes‘: {
‘source‘: ‘cloudscheduler‘,
},
},
}
metadata = {
‘dependsOn‘: [‘cloudscheduler-v1beta1‘],
}
return {
‘name‘: ‘cloudscheduler-job-‘ + name_short,
‘action‘: project_id + ‘/cloudscheduler-v1beta1:cloudscheduler.projects.locations.jobs.create‘,
‘properties‘: properties,
‘metadata‘: metadata,
}
Zusammenstellen
In unserer Hauptfunktion, die "GenerateConfig" heißen muss, definieren wir eine Liste mit den Ressourcen, die wir erstellen möchten.
def GenerateConfig(context):
resources = [
_generateSchedulerTypeResource(context),
_generateSchedulerJobResource(context),
]
return {‘resources‘: resources}Verfasst von
Maarten Baijs
Unsere Ideen
Weitere Blogs
Contact



