Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add BigQuery, Source Repositories #113

Merged
merged 57 commits into from
Mar 1, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
e87bd0f
Add InSpec support for backend service
slevenick Jan 25, 2019
6a8728b
Merge pull request #87 from modular-magician/codegen-pr-1300
slevenick Jan 25, 2019
9ecfaaa
Add HTTP health check for InSpec
slevenick Jan 25, 2019
0942279
Merge pull request #88 from modular-magician/codegen-pr-1303
slevenick Jan 25, 2019
98a2d36
Add HTTPS health check to InSpec
slevenick Jan 25, 2019
f0be43a
Merge pull request #89 from modular-magician/codegen-pr-1305
slevenick Jan 25, 2019
e4f5d3e
Add compute instance template for InSpec
slevenick Jan 26, 2019
2e55d45
Merge pull request #90 from modular-magician/codegen-pr-1308
slevenick Jan 28, 2019
0a10a32
Add compute global address to InSpec
slevenick Jan 28, 2019
752a463
Merge pull request #91 from modular-magician/codegen-pr-1309
slevenick Jan 28, 2019
2f6ded5
Inspec url map
slevenick Jan 28, 2019
9d387eb
Merge pull request #92 from modular-magician/codegen-pr-1310
slevenick Jan 28, 2019
adb5a42
Add InSpec support for HTTP proxy
slevenick Jan 28, 2019
226fac4
Merge pull request #94 from modular-magician/codegen-pr-1314
slevenick Jan 28, 2019
67a8582
Add global forwarding rule generation to InSpec
slevenick Jan 29, 2019
1753ef9
Merge pull request #95 from modular-magician/codegen-pr-1319
slevenick Jan 29, 2019
9ce89f7
Add support for target TCP proxy in InSpec
slevenick Jan 29, 2019
2c51de4
Merge pull request #96 from modular-magician/codegen-pr-1321
slevenick Jan 30, 2019
bf0e504
Inspec regional cluster
slevenick Jan 30, 2019
a562de7
Merge pull request #97 from modular-magician/codegen-pr-1295
slevenick Jan 30, 2019
ec04e25
Add InSpec support for compute routes
slevenick Jan 30, 2019
c18dd70
Merge pull request #98 from modular-magician/codegen-pr-1331
slevenick Jan 31, 2019
a167f4c
Update InSpec doc template to use underscored name in title box
slevenick Jan 31, 2019
7aceed0
Merge pull request #100 from modular-magician/codegen-pr-1333
slevenick Jan 31, 2019
73aaadb
Add router support in InSpec
slevenick Jan 31, 2019
df79fb9
Merge pull request #99 from modular-magician/codegen-pr-1332
slevenick Jan 31, 2019
507ad5c
Add support for InSpec disk snapshot
slevenick Feb 1, 2019
c3d9a69
Merge pull request #101 from modular-magician/codegen-pr-1343
slevenick Feb 1, 2019
858fa89
Inspec ssl certificate
slevenick Feb 2, 2019
55558ec
Merge pull request #102 from modular-magician/codegen-pr-1347
slevenick Feb 5, 2019
280de46
Fix InSpec pubsub subscription test
slevenick Feb 6, 2019
3608612
Merge pull request #103 from modular-magician/codegen-pr-1357
slevenick Feb 6, 2019
ed63fb1
InSpec add support for BigQuery Dataset
slevenick Feb 6, 2019
e12467d
Merge pull request #104 from modular-magician/codegen-pr-1358
slevenick Feb 8, 2019
a3bbe4b
Retrieve SOA record using DNS zone instead of building it from record…
matco Feb 12, 2019
ac3d1fd
Inspec nested refactor
slevenick Feb 13, 2019
8360494
Merge pull request #105 from modular-magician/codegen-pr-1368
slevenick Feb 13, 2019
009f814
Remove old nested objects with bad namespaces
slevenick Feb 13, 2019
c268f98
Add VCR back for unit testing in InSpec
slevenick Feb 13, 2019
a8cc444
Merge branch 'master' of https://github.com/inspec/inspec-gcp
slevenick Feb 13, 2019
e24b30c
Merge pull request #107 from modular-magician/codegen-pr-1373
slevenick Feb 13, 2019
519ebca
Add terraform upgrade to Rakefile
slevenick Feb 15, 2019
bf0cbf2
Templates, inspec.yaml for bigquery table
slevenick Feb 15, 2019
a9b2537
Merge pull request #110 from modular-magician/codegen-pr-1399
slevenick Feb 15, 2019
2688372
Retrieve SOA record using DNS zone instead of building it from record…
rambleraptor Feb 15, 2019
fb2b900
Add InSpec support for source repositories
slevenick Feb 19, 2019
28ec6a7
Add labels to Pubsub Subscription/Topics (#109)
modular-magician Feb 19, 2019
f5b6860
Update display names across products based on cloud.google.com (#106)
modular-magician Feb 19, 2019
3cf9d74
Merge branch 'master' into codegen-pr-1411
slevenick Feb 20, 2019
d627f42
Merge pull request #112 from modular-magician/codegen-pr-1411
slevenick Feb 20, 2019
b68cb8b
Add convenience outputs for public/private IP in Cloud SQL
rileykarson Feb 20, 2019
c5b2dec
Merge pull request #116 from modular-magician/codegen-pr-1417
nat-henderson Feb 20, 2019
1f43702
Merge remote-tracking branch 'origin/master' into gcp-master
slevenick Feb 25, 2019
e591cf4
Reset merge issues
slevenick Feb 25, 2019
bce4ef4
Add notes on API requirements to markdown docs for InSpec generated r…
slevenick Feb 28, 2019
a7b11d4
Merge pull request #119 from modular-magician/codegen-pr-1449
slevenick Feb 28, 2019
0c000e9
Improve docs for Cloud Build (#118)
modular-magician Mar 1, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add support for InSpec disk snapshot
Signed-off-by: Modular Magician <[email protected]>
  • Loading branch information
slevenick authored and modular-magician committed Feb 1, 2019
commit 507ad5c32ae1139739356db433e6e7bc7f90a077
59 changes: 59 additions & 0 deletions docs/resources/google_compute_snapshot.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
title: About the google_compute_snapshot resource
platform: gcp
---

## Syntax
A `google_compute_snapshot` is used to test a Google Snapshot resource

## Examples
```

describe google_compute_snapshot(project: 'chef-gcp-inspec', name: 'inspec-gcp-disk-snapshot') do
it { should exist }
its('source_disk') { should match 'my_disk' }
end

describe google_compute_snapshot(project: 'chef-gcp-inspec', name: 'nonexistent') do
it { should_not exist }
end
```

## Properties
Properties that can be accessed from the `google_compute_snapshot` resource:

* `creation_timestamp`: Creation timestamp in RFC3339 text format.

* `id`: The unique identifier for the resource.

* `disk_size_gb`: Size of the snapshot, specified in GB.

* `name`: Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.

* `description`: An optional description of this resource.

* `storage_bytes`: A size of the the storage used by the snapshot. As snapshots share storage, this number is expected to change with snapshot creation/deletion.

* `licenses`: A list of public visible licenses that apply to this snapshot. This can be because the original image had licenses attached (such as a Windows image). snapshotEncryptionKey nested object Encrypts the snapshot using a customer-supplied encryption key.

* `labels`: Labels to apply to this Snapshot.

* `label_fingerprint`: The fingerprint used for optimistic locking of this resource. Used internally during updates.

* `source_disk`: A reference to the disk used to create this snapshot.

* `zone`: A reference to the zone where the disk is hosted.

* `snapshot_encryption_key`: The customer-supplied encryption key of the snapshot. Required if the source snapshot is protected by a customer-supplied encryption key.

* `rawKey`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.

* `sha256`: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied encryption key that protects this resource.

* `kmsKeyName`: The name of the encryption key that is stored in Google Cloud KMS.

* `source_disk_encryption_key`: The customer-supplied encryption key of the source snapshot. Required if the source snapshot is protected by a customer-supplied encryption key.

* `rawKey`: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource.

* `kmsKeyName`: The name of the encryption key that is stored in Google Cloud KMS.
45 changes: 45 additions & 0 deletions docs/resources/google_compute_snapshots.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
title: About the google_compute_snapshots resource
platform: gcp
---

## Syntax
A `google_compute_snapshots` is used to test a Google Snapshot resource

## Examples
```

describe google_compute_snapshots(project: 'chef-gcp-inspec') do
its('count') { should be >= 1 }
end

describe.one do
google_compute_snapshots(project: 'chef-gcp-inspec').names do |snapshot_name|
describe google_compute_snapshot(project: 'chef-gcp-inspec', name: snapshot_name) do
its('source_disk') { should match 'my_disk' }
end
end
end
```

## Properties
Properties that can be accessed from the `google_compute_snapshots` resource:

See [google_compute_snapshot.md](google_compute_snapshot.md) for more detailed information
* `creation_timestamps`: an array of `google_compute_snapshot` creation_timestamp
* `ids`: an array of `google_compute_snapshot` id
* `disk_size_gbs`: an array of `google_compute_snapshot` disk_size_gb
* `names`: an array of `google_compute_snapshot` name
* `descriptions`: an array of `google_compute_snapshot` description
* `storage_bytes`: an array of `google_compute_snapshot` storage_bytes
* `licenses`: an array of `google_compute_snapshot` licenses
* `labels`: an array of `google_compute_snapshot` labels
* `label_fingerprints`: an array of `google_compute_snapshot` label_fingerprint
* `source_disks`: an array of `google_compute_snapshot` source_disk
* `zones`: an array of `google_compute_snapshot` zone
* `snapshot_encryption_keys`: an array of `google_compute_snapshot` snapshot_encryption_key
* `source_disk_encryption_keys`: an array of `google_compute_snapshot` source_disk_encryption_key

## 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.
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# 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 Compute
module Property
class SnapshotSnapshotencryptionkey
attr_reader :raw_key

attr_reader :sha256

attr_reader :kms_key_name

def initialize(args = nil)
return if args.nil?
@raw_key = args['rawKey']
@sha256 = args['sha256']
@kms_key_name = args['kmsKeyName']
end
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# 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 Compute
module Property
class SnapshotSourcediskencryptionkey
attr_reader :raw_key

attr_reader :kms_key_name

def initialize(args = nil)
return if args.nil?
@raw_key = args['rawKey']
@kms_key_name = args['kmsKeyName']
end
end
end
end
end
77 changes: 77 additions & 0 deletions libraries/google_compute_snapshot.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# 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/compute/property/snapshot_snapshot_encryption_key'
require 'google/compute/property/snapshot_source_disk_encryption_key'

# A provider to manage Google Compute Engine resources.
class Snapshot < GcpResourceBase
name 'google_compute_snapshot'
desc 'Snapshot'
supports platform: 'gcp'

attr_reader :creation_timestamp
attr_reader :id
attr_reader :disk_size_gb
attr_reader :name
attr_reader :description
attr_reader :storage_bytes
attr_reader :licenses
attr_reader :labels
attr_reader :label_fingerprint
attr_reader :source_disk
attr_reader :zone
attr_reader :snapshot_encryption_key
attr_reader :source_disk_encryption_key
def base
'https://www.googleapis.com/compute/v1/'
end

def url
'projects/{{project}}/global/snapshots/{{name}}'
end

def initialize(params)
super(params.merge({ use_http_transport: true }))
@fetched = @connection.fetch(base, url, params)
parse unless @fetched.nil?
end

def parse
@creation_timestamp = parse_time_string(@fetched['creationTimestamp'])
@id = @fetched['id']
@disk_size_gb = @fetched['diskSizeGb']
@name = @fetched['name']
@description = @fetched['description']
@storage_bytes = @fetched['storageBytes']
@licenses = @fetched['licenses']
@labels = @fetched['labels']
@label_fingerprint = @fetched['labelFingerprint']
@source_disk = @fetched['sourceDisk']
@zone = @fetched['zone']
@snapshot_encryption_key = GoogleInSpec::Compute::Property::SnapshotSnapshotencryptionkey.new(@fetched['snapshotEncryptionKey'])
@source_disk_encryption_key = GoogleInSpec::Compute::Property::SnapshotSourcediskencryptionkey.new(@fetched['sourceDiskEncryptionKey'])
end

# Handles parsing RFC3339 time string
def parse_time_string(time_string)
time_string ? Time.parse(time_string) : nil
end

def exists?
[email protected]?
end
end
106 changes: 106 additions & 0 deletions libraries/google_compute_snapshots.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# 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 Snapshots < GcpResourceBase
name 'google_compute_snapshots'
desc 'Snapshot plural resource'
supports platform: 'gcp'

attr_reader :table

filter_table_config = FilterTable.create

filter_table_config.add(:creation_timestamps, field: :creation_timestamp)
filter_table_config.add(:ids, field: :id)
filter_table_config.add(:disk_size_gbs, field: :disk_size_gb)
filter_table_config.add(:names, field: :name)
filter_table_config.add(:descriptions, field: :description)
filter_table_config.add(:storage_bytes, field: :storage_bytes)
filter_table_config.add(:licenses, field: :licenses)
filter_table_config.add(:labels, field: :labels)
filter_table_config.add(:label_fingerprints, field: :label_fingerprint)
filter_table_config.add(:source_disks, field: :source_disk)
filter_table_config.add(:zones, field: :zone)
filter_table_config.add(:snapshot_encryption_keys, field: :snapshot_encryption_key)
filter_table_config.add(:source_disk_encryption_keys, field: :source_disk_encryption_key)

filter_table_config.connect(self, :table)

def base
'https://www.googleapis.com/compute/v1/'
end

def url
'projects/{{project}}/global/snapshots'
end

def initialize(params = {})
super(params.merge({ use_http_transport: true }))
@params = params
@table = fetch_wrapped_resource('items')
end

def fetch_wrapped_resource(wrap_path)
# fetch_resource returns an array of responses (to handle pagination)
result = @connection.fetch_all(base, url, @params)
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
{
'creationTimestamp' => ->(obj) { return :creation_timestamp, parse_time_string(obj['creationTimestamp']) },
'id' => ->(obj) { return :id, obj['id'] },
'diskSizeGb' => ->(obj) { return :disk_size_gb, obj['diskSizeGb'] },
'name' => ->(obj) { return :name, obj['name'] },
'description' => ->(obj) { return :description, obj['description'] },
'storageBytes' => ->(obj) { return :storage_bytes, obj['storageBytes'] },
'licenses' => ->(obj) { return :licenses, obj['licenses'] },
'labels' => ->(obj) { return :labels, obj['labels'] },
'labelFingerprint' => ->(obj) { return :label_fingerprint, obj['labelFingerprint'] },
'sourceDisk' => ->(obj) { return :source_disk, obj['sourceDisk'] },
'zone' => ->(obj) { return :zone, obj['zone'] },
'snapshotEncryptionKey' => ->(obj) { return :snapshot_encryption_key, GoogleInSpec::Compute::Property::SnapshotSnapshotencryptionkey.new(obj['snapshotEncryptionKey']) },
'sourceDiskEncryptionKey' => ->(obj) { return :source_disk_encryption_key, GoogleInSpec::Compute::Property::SnapshotSourcediskencryptionkey.new(obj['sourceDiskEncryptionKey']) },
}
end

# Handles parsing RFC3339 time string
def parse_time_string(time_string)
time_string ? Time.parse(time_string) : nil
end
end
11 changes: 11 additions & 0 deletions test/integration/build/gcp-mm.tf
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ variable "router" {
type = "map"
}

variable "snapshot" {
type = "map"
}

resource "google_compute_ssl_policy" "custom-ssl-policy" {
name = "${var.ssl_policy["name"]}"
min_tls_version = "${var.ssl_policy["min_tls_version"]}"
Expand Down Expand Up @@ -358,4 +362,11 @@ resource "google_compute_router" "gcp-inspec-router" {
range = "${var.router["bgp_advertised_ip_range2"]}"
}
}
}

resource "google_compute_snapshot" "gcp-inspec-snapshot" {
project = "${var.gcp_project_id}"
name = "${var.snapshot["name"]}"
source_disk = "${google_compute_disk.generic_compute_disk.name}"
zone = "${var.gcp_zone}"
}
3 changes: 3 additions & 0 deletions test/integration/configuration/mm-attributes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -134,3 +134,6 @@ router:
bgp_advertised_group: "ALL_SUBNETS"
bgp_advertised_ip_range1: "1.2.3.4"
bgp_advertised_ip_range2: "6.7.0.0/16"

snapshot:
name: inspec-gcp-disk-snapshot
Loading