From c42abe7648c5dfeb4a4e5f68cf860f1b084f61fa Mon Sep 17 00:00:00 2001 From: Prakasa Date: Sun, 2 Mar 2025 06:20:47 +0700 Subject: [PATCH 1/2] fix: ssl creation support GCP-managed SSL cert --- .../modules/gcp_compute_ssl_certificate.py | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/plugins/modules/gcp_compute_ssl_certificate.py b/plugins/modules/gcp_compute_ssl_certificate.py index d2f4680d..cc089731 100644 --- a/plugins/modules/gcp_compute_ssl_certificate.py +++ b/plugins/modules/gcp_compute_ssl_certificate.py @@ -54,7 +54,7 @@ options: - The certificate in PEM format. - The certificate chain must be no greater than 5 certs long. - The chain must include at least one intermediate cert. - required: true + required: false type: str description: description: @@ -71,10 +71,23 @@ options: which cannot be a dash. required: false type: str + managed: + description: + - The configuration and status of a managed SSL certificate. + required: false + type: dict + type: + description: + - Specifies the type of SSL certificate, either "SELF_MANAGED" or "MANAGED". If not specified, + the certificate is self-managed and the fields certificate and privateKey are used. + choices: + - MANAGED + - SELF_MANAGED + type: str private_key: description: - The write-only private key in PEM format. - required: true + required: false type: str project: description: @@ -209,6 +222,17 @@ privateKey: - The write-only private key in PEM format. returned: success type: str +managed: + description: + - The configuration and status of a managed SSL certificate. + returned: success + type: dict +type: + description: + - Specifies the type of SSL certificate, either "SELF_MANAGED" or "MANAGED". If not specified, + the certificate is self-managed and the fields certificate and privateKey are used. + returned: success + type: str ''' ################################################################################ @@ -230,10 +254,12 @@ def main(): module = GcpModule( argument_spec=dict( state=dict(default='present', choices=['present', 'absent'], type='str'), - certificate=dict(required=True, type='str'), + certificate=dict(required=False, type='str'), description=dict(type='str'), name=dict(type='str'), - private_key=dict(required=True, type='str', no_log=True), + private_key=dict(required=False, type='str', no_log=True), + managed=dict(required=False, type='dict'), + type=dict(required=False, type='str'), ) ) @@ -290,6 +316,8 @@ def resource_to_request(module): u'description': module.params.get('description'), u'name': module.params.get('name'), u'privateKey': module.params.get('private_key'), + u'managed': module.params.get('managed'), + u'type': module.params.get('type'), } return_vals = {} for k, v in request.items(): From a8778efa4003c802a25c91d3a06bc14d1090e035 Mon Sep 17 00:00:00 2001 From: Prakasa Date: Wed, 30 Apr 2025 19:08:22 +0700 Subject: [PATCH 2/2] fix: update API compat sql instance and backend bucket --- .gitignore | 1 + plugins/modules/gcp_compute_backend_bucket.py | 2 + plugins/modules/gcp_sql_instance.py | 54 +++++++++++++++++-- 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 6e7ddb76..eef4bf97 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ __pycache__ *.tar.gz venv/ changelogs/.plugin-cache.yaml +*.DS_Store* \ No newline at end of file diff --git a/plugins/modules/gcp_compute_backend_bucket.py b/plugins/modules/gcp_compute_backend_bucket.py index 420b5934..608ff0a7 100644 --- a/plugins/modules/gcp_compute_backend_bucket.py +++ b/plugins/modules/gcp_compute_backend_bucket.py @@ -400,6 +400,7 @@ def main(): negative_caching_policy=dict(type='list', elements='dict', options=dict(code=dict(type='int'), ttl=dict(type='int'))), cache_mode=dict(type='str'), serve_while_stale=dict(type='int'), + bypass_cache_on_request_headers=dict(type='list', elements='dict', options=dict(header_name=dict(type='str'))), ), ), custom_response_headers=dict(type='list', elements='str'), @@ -594,6 +595,7 @@ class BackendBucketCdnpolicy(object): u'negativeCachingPolicy': BackendBucketNegativecachingpolicyArray(self.request.get('negative_caching_policy', []), self.module).to_request(), u'cacheMode': self.request.get('cache_mode'), u'serveWhileStale': self.request.get('serve_while_stale'), + u'bypassCacheOnRequestHeaders': self.request.get('bypass_cache_on_request_headers'), } ) diff --git a/plugins/modules/gcp_sql_instance.py b/plugins/modules/gcp_sql_instance.py index 9999dd18..fbb355d4 100644 --- a/plugins/modules/gcp_sql_instance.py +++ b/plugins/modules/gcp_sql_instance.py @@ -832,6 +832,7 @@ def main(): backend_type=dict(type='str'), connection_name=dict(type='str'), database_version=dict(type='str'), + root_password=dict(type='str'), failover_replica=dict(type='dict', options=dict(name=dict(type='str'))), instance_type=dict(type='str'), ipv6_address=dict(type='str'), @@ -878,9 +879,12 @@ def main(): ), ), tier=dict(type='str'), + edition=dict(type='str', choices=['ENTERPRISE', 'ENTERPRISE_PLUS']), + deletion_protection_enabled=dict(type='bool'), availability_type=dict(type='str'), + location_preference=dict(type='dict', options=dict(follow_gae_apps=dict(type='string'), zone=dict(type='str'), secondary_zone=dict(type='str'), kind=dict(type='str'))), backup_configuration=dict( - type='dict', options=dict(enabled=dict(type='bool'), binary_log_enabled=dict(type='bool'), start_time=dict(type='str')) + type='dict', options=dict(enabled=dict(type='bool'), binary_log_enabled=dict(type='bool'), start_time=dict(type='str'), point_in_time_recovery_enabled=dict(type='bool')) ), user_labels=dict(type='dict'), ), @@ -941,6 +945,7 @@ def resource_to_request(module): u'backendType': module.params.get('backend_type'), u'connectionName': module.params.get('connection_name'), u'databaseVersion': module.params.get('database_version'), + u'rootPassword': module.params.get('root_password'), u'failoverReplica': InstanceFailoverreplica(module.params.get('failover_replica', {}), module).to_request(), u'instanceType': module.params.get('instance_type'), u'ipv6Address': module.params.get('ipv6_address'), @@ -1204,9 +1209,12 @@ class InstanceSettings(object): u'databaseFlags': InstanceDatabaseflagsArray(self.request.get('database_flags', []), self.module).to_request(), u'ipConfiguration': InstanceIpconfiguration(self.request.get('ip_configuration', {}), self.module).to_request(), u'tier': self.request.get('tier'), + u'edition': self.request.get('edition'), + u'deletionProtectionEnabled': self.request.get('deletion_protection_enabled'), u'availabilityType': self.request.get('availability_type'), u'backupConfiguration': InstanceBackupconfiguration(self.request.get('backup_configuration', {}), self.module).to_request(), u'userLabels': self.request.get('user_labels'), + u'locationPreference': InstanceLocationPreference(self.request.get('location_preference', {}), self.module).to_request(), } ) @@ -1216,9 +1224,12 @@ class InstanceSettings(object): u'databaseFlags': InstanceDatabaseflagsArray(self.request.get(u'databaseFlags', []), self.module).from_response(), u'ipConfiguration': InstanceIpconfiguration(self.request.get(u'ipConfiguration', {}), self.module).from_response(), u'tier': self.request.get(u'tier'), + u'edition': self.request.get('edition'), + u'deletionProtectionEnabled': self.request.get('deletion_protection_enabled'), u'availabilityType': self.request.get(u'availabilityType'), u'backupConfiguration': InstanceBackupconfiguration(self.request.get(u'backupConfiguration', {}), self.module).from_response(), u'userLabels': self.request.get(u'userLabels'), + u'locationPreference': InstanceLocationPreference(self.request.get('location_preference', {}), self.module).from_response(), } ) @@ -1316,12 +1327,22 @@ class InstanceBackupconfiguration(object): def to_request(self): return remove_nones_from_dict( - {u'enabled': self.request.get('enabled'), u'binaryLogEnabled': self.request.get('binary_log_enabled'), u'startTime': self.request.get('start_time')} + { + u'enabled': self.request.get('enabled'), + u'binaryLogEnabled': self.request.get('binary_log_enabled'), + u'startTime': self.request.get('start_time'), + u'pointInTimeRecoveryEnabled': self.request.get('binary_log_enabled'), + } ) def from_response(self): return remove_nones_from_dict( - {u'enabled': self.request.get(u'enabled'), u'binaryLogEnabled': self.request.get(u'binaryLogEnabled'), u'startTime': self.request.get(u'startTime')} + { + u'enabled': self.request.get(u'enabled'), + u'binaryLogEnabled': self.request.get(u'binaryLogEnabled'), + u'startTime': self.request.get('start_time'), + u'pointInTimeRecoveryEnabled': self.request.get('binary_log_enabled'), + } ) @@ -1387,6 +1408,33 @@ class InstanceServercacert(object): } ) +class InstanceLocationPreference(object): + def __init__(self, request, module): + self.module = module + if request: + self.request = request + else: + self.request = {} + + def to_request(self): + return remove_nones_from_dict( + { + u'followGaeApplication': self.request.get('follow_gae_application'), + u'zone': self.request.get('zone'), + u'secondaryZone': self.request.get('secondary_zone'), + u'kind': self.request.get('kind'), + } + ) + + def from_response(self): + return remove_nones_from_dict( + { + u'followGaeApplication': self.request.get('follow_gae_application'), + u'zone': self.request.get('zone'), + u'secondaryZone': self.request.get('secondary_zone'), + u'kind': self.request.get('kind'), + } + ) if __name__ == '__main__': main()