diff --git a/docs/resources/google_cloud_scheduler_job.md b/docs/resources/google_cloud_scheduler_job.md new file mode 100644 index 000000000..7fc253b13 --- /dev/null +++ b/docs/resources/google_cloud_scheduler_job.md @@ -0,0 +1,97 @@ +--- +title: About the google_cloud_scheduler_job resource +platform: gcp +--- + +## Syntax +A `google_cloud_scheduler_job` is used to test a Google Job resource + +## Examples +``` +describe google_cloud_scheduler_job(project: 'chef-gcp-inspec', region: us-central1, name: 'job-name') do + it { should exist } + + its('description') { should cmp 'A description' } + its('schedule') { should cmp '*/8 * * * *' } + its('time_zone') { should cmp 'America/New_York' } + its('http_target.http_method') { should cmp 'POST' } + its('http_target.uri') { should cmp 'https://example.com/ping' } +end +``` + +## Properties +Properties that can be accessed from the `google_cloud_scheduler_job` resource: + + + * `name`: The name of the job. + + * `description`: A human-readable description for the job. This string must not contain more than 500 characters. + + * `schedule`: Describes the schedule on which the job will be executed. + + * `time_zone`: Specifies the time zone to be used in interpreting schedule. The value of this field must be a time zone name from the tz database. + + * `retry_config`: By default, if a job does not complete successfully, meaning that an acknowledgement is not received from the handler, then it will be retried with exponential backoff according to the settings + + * `retry_count`: The number of attempts that the system will make to run a job using the exponential backoff procedure described by maxDoublings. Values greater than 5 and negative values are not allowed. + + * `max_retry_duration`: The time limit for retrying a failed job, measured from time when an execution was first attempted. If specified with retryCount, the job will be retried until both limits are reached. A duration in seconds with up to nine fractional digits, terminated by 's'. + + * `min_backoff_duration`: The minimum amount of time to wait before retrying a job after it fails. A duration in seconds with up to nine fractional digits, terminated by 's'. + + * `max_backoff_duration`: The maximum amount of time to wait before retrying a job after it fails. A duration in seconds with up to nine fractional digits, terminated by 's'. + + * `max_doublings`: The time between retries will double maxDoublings times. A job's retry interval starts at minBackoffDuration, then doubles maxDoublings times, then increases linearly, and finally retries retries at intervals of maxBackoffDuration up to retryCount times. + + * `pubsub_target`: Pub/Sub target If the job providers a Pub/Sub target the cron will publish a message to the provided topic + + * `topic_name`: The name of the Cloud Pub/Sub topic to which messages will be published when a job is delivered. The topic name must be in the same format as required by PubSub's PublishRequest.name, for example projects/PROJECT_ID/topics/TOPIC_ID. + + * `data`: The message payload for PubsubMessage. Pubsub message must contain either non-empty data, or at least one attribute. + + * `attributes`: Attributes for PubsubMessage. Pubsub message must contain either non-empty data, or at least one attribute. + + * `app_engine_http_target`: App Engine HTTP target. If the job providers a App Engine HTTP target the cron will send a request to the service instance + + * `http_method`: Which HTTP method to use for the request. + + * `app_engine_routing`: App Engine Routing setting for the job. + + * `service`: App service. By default, the job is sent to the service which is the default service when the job is attempted. + + * `version`: App version. By default, the job is sent to the version which is the default version when the job is attempted. + + * `instance`: App instance. By default, the job is sent to an instance which is available when the job is attempted. + + * `relative_uri`: The relative URI. The relative URL must begin with "/" and must be a valid HTTP relative URL. It can contain a path, query string arguments, and \# fragments. If the relative URL is empty, then the root path "/" will be used. No spaces are allowed, and the maximum length allowed is 2083 characters + + * `body`: HTTP request body. A request body is allowed only if the HTTP method is POST or PUT. It will result in invalid argument error to set a body on a job with an incompatible HttpMethod. + + * `headers`: HTTP request headers. This map contains the header field names and values. Headers can be set when the job is created. + + * `http_target`: HTTP target. If the job providers a http_target the cron will send a request to the targeted url + + * `uri`: The full URI path that the request will be sent to. + + * `http_method`: Which HTTP method to use for the request. + + * `body`: HTTP request body. A request body is allowed only if the HTTP method is POST, PUT, or PATCH. It is an error to set body on a job with an incompatible HttpMethod. + + * `headers`: This map contains the header field names and values. Repeated headers are not supported, but a header value can contain commas. + + * `oauth_token`: Contains information needed for generating an OAuth token. This type of authorization should be used when sending requests to a GCP endpoint. + + * `service_account_email`: Service account email to be used for generating OAuth token. The service account must be within the same project as the job. + + * `scope`: OAuth scope to be used for generating OAuth access token. If not specified, "https://www.googleapis.com/auth/cloud-platform" will be used. + + * `oidc_token`: Contains information needed for generating an OpenID Connect token. This type of authorization should be used when sending requests to third party endpoints or Cloud Run. + + * `service_account_email`: Service account email to be used for generating OAuth token. The service account must be within the same project as the job. + + * `audience`: Audience to be used when generating OIDC token. If not specified, the URI specified in target will be used. + + * `region`: Region where the scheduler job resides + + +## GCP Permissions diff --git a/docs/resources/google_cloud_scheduler_jobs.md b/docs/resources/google_cloud_scheduler_jobs.md new file mode 100644 index 000000000..d420a6a3c --- /dev/null +++ b/docs/resources/google_cloud_scheduler_jobs.md @@ -0,0 +1,42 @@ +--- +title: About the google_cloud_scheduler_jobs resource +platform: gcp +--- + +## Syntax +A `google_cloud_scheduler_jobs` is used to test a Google Job resource + +## Examples +``` +google_cloud_scheduler_jobs(project: 'chef-gcp-inspec', region: ).names.each do |name| + describe google_cloud_scheduler_job(project: 'chef-gcp-inspec', region: us-central1, name: name) do + it { should exist } + + its('description') { should cmp 'A description' } + its('schedule') { should cmp '*/8 * * * *' } + its('time_zone') { should cmp 'America/New_York' } + its('http_target.http_method') { should cmp 'POST' } + its('http_target.uri') { should cmp 'https://example.com/ping' } + end +end +``` + +## Properties +Properties that can be accessed from the `google_cloud_scheduler_jobs` resource: + +See [google_cloud_scheduler_job.md](google_cloud_scheduler_job.md) for more detailed information + * `names`: an array of `google_cloud_scheduler_job` name + * `descriptions`: an array of `google_cloud_scheduler_job` description + * `schedules`: an array of `google_cloud_scheduler_job` schedule + * `time_zones`: an array of `google_cloud_scheduler_job` time_zone + * `retry_configs`: an array of `google_cloud_scheduler_job` retry_config + * `pubsub_targets`: an array of `google_cloud_scheduler_job` pubsub_target + * `app_engine_http_targets`: an array of `google_cloud_scheduler_job` app_engine_http_target + * `http_targets`: an array of `google_cloud_scheduler_job` http_target + * `regions`: an array of `google_cloud_scheduler_job` region + +## Filter Criteria +This resource supports all of the above properties as filter criteria, which can be used +with `where` as a block or a method. + +## GCP Permissions diff --git a/libraries/google/cloudscheduler/property/job_app_engine_http_target.rb b/libraries/google/cloudscheduler/property/job_app_engine_http_target.rb new file mode 100644 index 000000000..baaf75d9a --- /dev/null +++ b/libraries/google/cloudscheduler/property/job_app_engine_http_target.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: false + +# ---------------------------------------------------------------------------- +# +# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** +# +# ---------------------------------------------------------------------------- +# +# This file is automatically generated by Magic Modules and manual +# changes will be clobbered when the file is regenerated. +# +# Please read more about how to change this file in README.md and +# CONTRIBUTING.md located at the root of this package. +# +# ---------------------------------------------------------------------------- +require 'google/cloudscheduler/property/job_app_engine_http_target_app_engine_routing' +module GoogleInSpec + module CloudScheduler + module Property + class JobAppEngineHttpTarget + attr_reader :http_method + + attr_reader :app_engine_routing + + attr_reader :relative_uri + + attr_reader :body + + attr_reader :headers + + def initialize(args = nil, parent_identifier = nil) + return if args.nil? + @parent_identifier = parent_identifier + @http_method = args['httpMethod'] + @app_engine_routing = GoogleInSpec::CloudScheduler::Property::JobAppEngineHttpTargetAppEngineRouting.new(args['appEngineRouting'], to_s) + @relative_uri = args['relativeUri'] + @body = args['body'] + @headers = args['headers'] + end + + def to_s + "#{@parent_identifier} JobAppEngineHttpTarget" + end + end + end + end +end diff --git a/libraries/google/cloudscheduler/property/job_app_engine_http_target_app_engine_routing.rb b/libraries/google/cloudscheduler/property/job_app_engine_http_target_app_engine_routing.rb new file mode 100644 index 000000000..68774b39a --- /dev/null +++ b/libraries/google/cloudscheduler/property/job_app_engine_http_target_app_engine_routing.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: false + +# ---------------------------------------------------------------------------- +# +# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** +# +# ---------------------------------------------------------------------------- +# +# This file is automatically generated by Magic Modules and manual +# changes will be clobbered when the file is regenerated. +# +# Please read more about how to change this file in README.md and +# CONTRIBUTING.md located at the root of this package. +# +# ---------------------------------------------------------------------------- +module GoogleInSpec + module CloudScheduler + module Property + class JobAppEngineHttpTargetAppEngineRouting + attr_reader :service + + attr_reader :version + + attr_reader :instance + + def initialize(args = nil, parent_identifier = nil) + return if args.nil? + @parent_identifier = parent_identifier + @service = args['service'] + @version = args['version'] + @instance = args['instance'] + end + + def to_s + "#{@parent_identifier} JobAppEngineHttpTargetAppEngineRouting" + end + end + end + end +end diff --git a/libraries/google/cloudscheduler/property/job_http_target.rb b/libraries/google/cloudscheduler/property/job_http_target.rb new file mode 100644 index 000000000..1724dbf0c --- /dev/null +++ b/libraries/google/cloudscheduler/property/job_http_target.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: false + +# ---------------------------------------------------------------------------- +# +# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** +# +# ---------------------------------------------------------------------------- +# +# This file is automatically generated by Magic Modules and manual +# changes will be clobbered when the file is regenerated. +# +# Please read more about how to change this file in README.md and +# CONTRIBUTING.md located at the root of this package. +# +# ---------------------------------------------------------------------------- +require 'google/cloudscheduler/property/job_http_target_oauth_token' +require 'google/cloudscheduler/property/job_http_target_oidc_token' +module GoogleInSpec + module CloudScheduler + module Property + class JobHttpTarget + attr_reader :uri + + attr_reader :http_method + + attr_reader :body + + attr_reader :headers + + attr_reader :oauth_token + + attr_reader :oidc_token + + def initialize(args = nil, parent_identifier = nil) + return if args.nil? + @parent_identifier = parent_identifier + @uri = args['uri'] + @http_method = args['httpMethod'] + @body = args['body'] + @headers = args['headers'] + @oauth_token = GoogleInSpec::CloudScheduler::Property::JobHttpTargetOauthToken.new(args['oauthToken'], to_s) + @oidc_token = GoogleInSpec::CloudScheduler::Property::JobHttpTargetOidcToken.new(args['oidcToken'], to_s) + end + + def to_s + "#{@parent_identifier} JobHttpTarget" + end + end + end + end +end diff --git a/libraries/google/cloudscheduler/property/job_http_target_oauth_token.rb b/libraries/google/cloudscheduler/property/job_http_target_oauth_token.rb new file mode 100644 index 000000000..69e5a45ea --- /dev/null +++ b/libraries/google/cloudscheduler/property/job_http_target_oauth_token.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: false + +# ---------------------------------------------------------------------------- +# +# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** +# +# ---------------------------------------------------------------------------- +# +# This file is automatically generated by Magic Modules and manual +# changes will be clobbered when the file is regenerated. +# +# Please read more about how to change this file in README.md and +# CONTRIBUTING.md located at the root of this package. +# +# ---------------------------------------------------------------------------- +module GoogleInSpec + module CloudScheduler + module Property + class JobHttpTargetOauthToken + attr_reader :service_account_email + + attr_reader :scope + + def initialize(args = nil, parent_identifier = nil) + return if args.nil? + @parent_identifier = parent_identifier + @service_account_email = args['serviceAccountEmail'] + @scope = args['scope'] + end + + def to_s + "#{@parent_identifier} JobHttpTargetOauthToken" + end + end + end + end +end diff --git a/libraries/google/cloudscheduler/property/job_http_target_oidc_token.rb b/libraries/google/cloudscheduler/property/job_http_target_oidc_token.rb new file mode 100644 index 000000000..551f768ef --- /dev/null +++ b/libraries/google/cloudscheduler/property/job_http_target_oidc_token.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: false + +# ---------------------------------------------------------------------------- +# +# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** +# +# ---------------------------------------------------------------------------- +# +# This file is automatically generated by Magic Modules and manual +# changes will be clobbered when the file is regenerated. +# +# Please read more about how to change this file in README.md and +# CONTRIBUTING.md located at the root of this package. +# +# ---------------------------------------------------------------------------- +module GoogleInSpec + module CloudScheduler + module Property + class JobHttpTargetOidcToken + attr_reader :service_account_email + + attr_reader :audience + + def initialize(args = nil, parent_identifier = nil) + return if args.nil? + @parent_identifier = parent_identifier + @service_account_email = args['serviceAccountEmail'] + @audience = args['audience'] + end + + def to_s + "#{@parent_identifier} JobHttpTargetOidcToken" + end + end + end + end +end diff --git a/libraries/google/cloudscheduler/property/job_pubsub_target.rb b/libraries/google/cloudscheduler/property/job_pubsub_target.rb new file mode 100644 index 000000000..0edd9bcb6 --- /dev/null +++ b/libraries/google/cloudscheduler/property/job_pubsub_target.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: false + +# ---------------------------------------------------------------------------- +# +# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** +# +# ---------------------------------------------------------------------------- +# +# This file is automatically generated by Magic Modules and manual +# changes will be clobbered when the file is regenerated. +# +# Please read more about how to change this file in README.md and +# CONTRIBUTING.md located at the root of this package. +# +# ---------------------------------------------------------------------------- +module GoogleInSpec + module CloudScheduler + module Property + class JobPubsubTarget + attr_reader :topic_name + + attr_reader :data + + attr_reader :attributes + + def initialize(args = nil, parent_identifier = nil) + return if args.nil? + @parent_identifier = parent_identifier + @topic_name = args['topicName'] + @data = args['data'] + @attributes = args['attributes'] + end + + def to_s + "#{@parent_identifier} JobPubsubTarget" + end + end + end + end +end diff --git a/libraries/google/cloudscheduler/property/job_retry_config.rb b/libraries/google/cloudscheduler/property/job_retry_config.rb new file mode 100644 index 000000000..64338beec --- /dev/null +++ b/libraries/google/cloudscheduler/property/job_retry_config.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: false + +# ---------------------------------------------------------------------------- +# +# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** +# +# ---------------------------------------------------------------------------- +# +# This file is automatically generated by Magic Modules and manual +# changes will be clobbered when the file is regenerated. +# +# Please read more about how to change this file in README.md and +# CONTRIBUTING.md located at the root of this package. +# +# ---------------------------------------------------------------------------- +module GoogleInSpec + module CloudScheduler + module Property + class JobRetryConfig + attr_reader :retry_count + + attr_reader :max_retry_duration + + attr_reader :min_backoff_duration + + attr_reader :max_backoff_duration + + attr_reader :max_doublings + + def initialize(args = nil, parent_identifier = nil) + return if args.nil? + @parent_identifier = parent_identifier + @retry_count = args['retryCount'] + @max_retry_duration = args['maxRetryDuration'] + @min_backoff_duration = args['minBackoffDuration'] + @max_backoff_duration = args['maxBackoffDuration'] + @max_doublings = args['maxDoublings'] + end + + def to_s + "#{@parent_identifier} JobRetryConfig" + end + end + end + end +end diff --git a/libraries/google_cloud_scheduler_job.rb b/libraries/google_cloud_scheduler_job.rb new file mode 100644 index 000000000..710aff7bd --- /dev/null +++ b/libraries/google_cloud_scheduler_job.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: false + +# ---------------------------------------------------------------------------- +# +# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** +# +# ---------------------------------------------------------------------------- +# +# This file is automatically generated by Magic Modules and manual +# changes will be clobbered when the file is regenerated. +# +# Please read more about how to change this file in README.md and +# CONTRIBUTING.md located at the root of this package. +# +# ---------------------------------------------------------------------------- +require 'gcp_backend' +require 'google/cloudscheduler/property/job_app_engine_http_target' +require 'google/cloudscheduler/property/job_app_engine_http_target_app_engine_routing' +require 'google/cloudscheduler/property/job_http_target' +require 'google/cloudscheduler/property/job_http_target_oauth_token' +require 'google/cloudscheduler/property/job_http_target_oidc_token' +require 'google/cloudscheduler/property/job_pubsub_target' +require 'google/cloudscheduler/property/job_retry_config' + +# A provider to manage Cloud Scheduler resources. +class CloudSchedulerJob < GcpResourceBase + name 'google_cloud_scheduler_job' + desc 'Job' + supports platform: 'gcp' + + attr_reader :params + attr_reader :name + attr_reader :description + attr_reader :schedule + attr_reader :time_zone + attr_reader :retry_config + attr_reader :pubsub_target + attr_reader :app_engine_http_target + attr_reader :http_target + attr_reader :region + + def initialize(params) + super(params.merge({ use_http_transport: true })) + @params = params + @fetched = @connection.fetch(product_url, resource_base_url, params, 'Get') + parse unless @fetched.nil? + end + + def parse + @name = @fetched['name'] + @description = @fetched['description'] + @schedule = @fetched['schedule'] + @time_zone = @fetched['timeZone'] + @retry_config = GoogleInSpec::CloudScheduler::Property::JobRetryConfig.new(@fetched['retryConfig'], to_s) + @pubsub_target = GoogleInSpec::CloudScheduler::Property::JobPubsubTarget.new(@fetched['pubsubTarget'], to_s) + @app_engine_http_target = GoogleInSpec::CloudScheduler::Property::JobAppEngineHttpTarget.new(@fetched['appEngineHttpTarget'], to_s) + @http_target = GoogleInSpec::CloudScheduler::Property::JobHttpTarget.new(@fetched['httpTarget'], to_s) + @region = @fetched['region'] + end + + # Handles parsing RFC3339 time string + def parse_time_string(time_string) + time_string ? Time.parse(time_string) : nil + end + + def exists? + !@fetched.nil? + end + + def to_s + "Job #{@params[:name]}" + end + + private + + def product_url + 'https://cloudscheduler.googleapis.com/v1/' + end + + def resource_base_url + 'projects/{{project}}/locations/{{region}}/jobs/{{name}}' + end +end diff --git a/libraries/google_cloud_scheduler_jobs.rb b/libraries/google_cloud_scheduler_jobs.rb new file mode 100644 index 000000000..5d9e28946 --- /dev/null +++ b/libraries/google_cloud_scheduler_jobs.rb @@ -0,0 +1,100 @@ +# frozen_string_literal: false + +# ---------------------------------------------------------------------------- +# +# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** +# +# ---------------------------------------------------------------------------- +# +# This file is automatically generated by Magic Modules and manual +# changes will be clobbered when the file is regenerated. +# +# Please read more about how to change this file in README.md and +# CONTRIBUTING.md located at the root of this package. +# +# ---------------------------------------------------------------------------- +require 'gcp_backend' +class CloudSchedulerJobs < GcpResourceBase + name 'google_cloud_scheduler_jobs' + desc 'Job plural resource' + supports platform: 'gcp' + + attr_reader :table + + filter_table_config = FilterTable.create + + filter_table_config.add(:names, field: :name) + filter_table_config.add(:descriptions, field: :description) + filter_table_config.add(:schedules, field: :schedule) + filter_table_config.add(:time_zones, field: :time_zone) + filter_table_config.add(:retry_configs, field: :retry_config) + filter_table_config.add(:pubsub_targets, field: :pubsub_target) + filter_table_config.add(:app_engine_http_targets, field: :app_engine_http_target) + filter_table_config.add(:http_targets, field: :http_target) + filter_table_config.add(:regions, field: :region) + + filter_table_config.connect(self, :table) + + def initialize(params = {}) + super(params.merge({ use_http_transport: true })) + @params = params + @table = fetch_wrapped_resource('jobs') + end + + def fetch_wrapped_resource(wrap_path) + # fetch_resource returns an array of responses (to handle pagination) + result = @connection.fetch_all(product_url, resource_base_url, @params, 'Get') + return if result.nil? + + # Conversion of string -> object hash to symbol -> object hash that InSpec needs + converted = [] + result.each do |response| + next if response.nil? || !response.key?(wrap_path) + response[wrap_path].each do |hash| + hash_with_symbols = {} + hash.each_key do |key| + name, value = transform(key, hash) + hash_with_symbols[name] = value + end + converted.push(hash_with_symbols) + end + end + + converted + end + + def transform(key, value) + return transformers[key].call(value) if transformers.key?(key) + + [key.to_sym, value] + end + + def transformers + { + 'name' => ->(obj) { return :name, obj['name'] }, + 'description' => ->(obj) { return :description, obj['description'] }, + 'schedule' => ->(obj) { return :schedule, obj['schedule'] }, + 'timeZone' => ->(obj) { return :time_zone, obj['timeZone'] }, + 'retryConfig' => ->(obj) { return :retry_config, GoogleInSpec::CloudScheduler::Property::JobRetryConfig.new(obj['retryConfig'], to_s) }, + 'pubsubTarget' => ->(obj) { return :pubsub_target, GoogleInSpec::CloudScheduler::Property::JobPubsubTarget.new(obj['pubsubTarget'], to_s) }, + 'appEngineHttpTarget' => ->(obj) { return :app_engine_http_target, GoogleInSpec::CloudScheduler::Property::JobAppEngineHttpTarget.new(obj['appEngineHttpTarget'], to_s) }, + 'httpTarget' => ->(obj) { return :http_target, GoogleInSpec::CloudScheduler::Property::JobHttpTarget.new(obj['httpTarget'], to_s) }, + 'region' => ->(obj) { return :region, obj['region'] }, + } + end + + # Handles parsing RFC3339 time string + def parse_time_string(time_string) + time_string ? Time.parse(time_string) : nil + end + + private + + def product_url + 'https://cloudscheduler.googleapis.com/v1/' + end + + def resource_base_url + 'projects/{{project}}/locations/{{region}}/jobs' + end +end diff --git a/test/integration/build/gcp-mm.tf b/test/integration/build/gcp-mm.tf index 21678b63f..94b6f7219 100644 --- a/test/integration/build/gcp-mm.tf +++ b/test/integration/build/gcp-mm.tf @@ -209,6 +209,10 @@ variable "spannerdatabase" { type = "map" } +variable "scheduler_job" { + type = "map" +} + resource "google_compute_ssl_policy" "custom-ssl-policy" { name = "${var.ssl_policy["name"]}" @@ -893,3 +897,17 @@ resource "google_spanner_database" "database" { name = "${var.spannerdatabase["name"]}" ddl = ["${var.spannerdatabase["ddl"]}"] } + +resource "google_cloud_scheduler_job" "job" { + project = var.gcp_project_id + region = var.scheduler_job["region"] + name = var.scheduler_job["name"] + description = var.scheduler_job["description"] + schedule = var.scheduler_job["schedule"] + time_zone = var.scheduler_job["time_zone"] + + http_target { + http_method = var.scheduler_job["http_method"] + uri = var.scheduler_job["http_target_uri"] + } +} diff --git a/test/integration/configuration/mm-attributes.yml b/test/integration/configuration/mm-attributes.yml index f4ed2a05b..6f2ce5025 100644 --- a/test/integration/configuration/mm-attributes.yml +++ b/test/integration/configuration/mm-attributes.yml @@ -342,3 +342,13 @@ spannerdatabase: name: spdatabase instance: spinstance ddl: "CREATE TABLE test (test STRING(MAX),) PRIMARY KEY (test)" + +scheduler_job: + # region must match where the appengine instance is deployed + region: us-central1 + name: job-name + description: A description + schedule: "*/8 * * * *" + time_zone: America/New_York + http_method: POST + http_target_uri: https://example.com/ping diff --git a/test/integration/verify/controls/google_cloud_scheduler_job.rb b/test/integration/verify/controls/google_cloud_scheduler_job.rb new file mode 100644 index 000000000..9a26404a3 --- /dev/null +++ b/test/integration/verify/controls/google_cloud_scheduler_job.rb @@ -0,0 +1,40 @@ +# ---------------------------------------------------------------------------- +# +# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** +# +# ---------------------------------------------------------------------------- +# +# This file is automatically generated by Magic Modules and manual +# changes will be clobbered when the file is regenerated. +# +# Please read more about how to change this file in README.md and +# CONTRIBUTING.md located at the root of this package. +# +# ---------------------------------------------------------------------------- + +title 'Test GCP google_cloud_scheduler_job resource.' + +gcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.') +scheduler_job = attribute('scheduler_job', default: { + "region": "us-central1", + "name": "job-name", + "description": "A description", + "schedule": "*/8 * * * *", + "time_zone": "America/New_York", + "http_method": "POST", + "http_target_uri": "https://example.com/ping" +}, description: 'Cloud Scheduler Job configuration') +control 'google_cloud_scheduler_job-1.0' do + impact 1.0 + title 'google_cloud_scheduler_job resource test' + + describe google_cloud_scheduler_job(project: gcp_project_id, region: scheduler_job['region'], name: scheduler_job['name']) do + it { should exist } + + its('description') { should cmp scheduler_job['description'] } + its('schedule') { should cmp scheduler_job['schedule'] } + its('time_zone') { should cmp scheduler_job['time_zone'] } + its('http_target.http_method') { should cmp scheduler_job['http_method'] } + its('http_target.uri') { should cmp scheduler_job['http_target_uri'] } + end +end diff --git a/test/integration/verify/controls/google_cloud_scheduler_jobs.rb b/test/integration/verify/controls/google_cloud_scheduler_jobs.rb new file mode 100644 index 000000000..12f7b540c --- /dev/null +++ b/test/integration/verify/controls/google_cloud_scheduler_jobs.rb @@ -0,0 +1,42 @@ +# ---------------------------------------------------------------------------- +# +# *** AUTO GENERATED CODE *** AUTO GENERATED CODE *** +# +# ---------------------------------------------------------------------------- +# +# This file is automatically generated by Magic Modules and manual +# changes will be clobbered when the file is regenerated. +# +# Please read more about how to change this file in README.md and +# CONTRIBUTING.md located at the root of this package. +# +# ---------------------------------------------------------------------------- + +title 'Test GCP google_cloud_scheduler_jobs resource.' + +gcp_project_id = attribute(:gcp_project_id, default: 'gcp_project_id', description: 'The GCP project identifier.') +scheduler_job = attribute('scheduler_job', default: { + "region": "us-central1", + "name": "job-name", + "description": "A description", + "schedule": "*/8 * * * *", + "time_zone": "America/New_York", + "http_method": "POST", + "http_target_uri": "https://example.com/ping" +}, description: 'Cloud Scheduler Job configuration') +control 'google_cloud_scheduler_jobs-1.0' do + impact 1.0 + title 'google_cloud_scheduler_jobs resource test' + + google_cloud_scheduler_jobs(project: gcp_project_id, region: scheduler_job['location']).names.each do |name| + describe google_cloud_scheduler_job(project: gcp_project_id, region: scheduler_job['region'], name: name) do + it { should exist } + + its('description') { should cmp scheduler_job['description'] } + its('schedule') { should cmp scheduler_job['schedule'] } + its('time_zone') { should cmp scheduler_job['time_zone'] } + its('http_target.http_method') { should cmp scheduler_job['http_method'] } + its('http_target.uri') { should cmp scheduler_job['http_target_uri'] } + end + end +end