Skip to content

Commit fcd7777

Browse files
slevenickmodular-magician
authored andcommitted
Basic structure for singular InSpec resources (GoogleCloudPlatform#573)
Merged PR GoogleCloudPlatform#573.
1 parent 06d12b3 commit fcd7777

6 files changed

Lines changed: 121 additions & 4 deletions

File tree

.ci/magic-modules/create-pr.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ if [ "$BRANCH_NAME" = "$ORIGINAL_PR_BRANCH" ]; then
8282
fi
8383

8484
git checkout -b "$BRANCH_NAME"
85-
if INSPEC_PR=$(hub pull-request -b "$INSPEC_REPO_USER/inspec:master" -F ./downstream_body); then
85+
if INSPEC_PR=$(hub pull-request -b "$INSPEC_REPO_USER/inspec-gcp:master" -F ./downstream_body); then
8686
DEPENDENCIES="${DEPENDENCIES}depends: $INSPEC_PR ${NEWLINE}"
8787
else
8888
echo "InSpec - did not generate a PR."

build/inspec

build/terraform

products/compute/inspec.yaml

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,87 @@ manifest: !ruby/object:Provider::Inspec::Manifest
1919
summary: 'InSpec resources for verifying GCP infrastructure'
2020
description: |
2121
InSpec resources for verifying GCP infrastructure
22+
overrides: !ruby/object:Provider::ResourceOverrides
23+
Address: !ruby/object:Provider::Chef::ResourceOverride
24+
exclude: true
25+
Autoscaler: !ruby/object:Provider::Chef::ResourceOverride
26+
exclude: true
27+
BackendBucket: !ruby/object:Provider::Chef::ResourceOverride
28+
exclude: true
29+
BackendService: !ruby/object:Provider::Chef::ResourceOverride
30+
exclude: true
31+
Disk: !ruby/object:Provider::Chef::ResourceOverride
32+
exclude: true
33+
DiskType: !ruby/object:Provider::Chef::ResourceOverride
34+
exclude: true
35+
Firewall: !ruby/object:Provider::Chef::ResourceOverride
36+
exclude: true
37+
ForwardingRule: !ruby/object:Provider::Chef::ResourceOverride
38+
exclude: true
39+
GlobalAddress: !ruby/object:Provider::Chef::ResourceOverride
40+
exclude: true
41+
GlobalForwardingRule: !ruby/object:Provider::Chef::ResourceOverride
42+
exclude: true
43+
HealthCheck: !ruby/object:Provider::Chef::ResourceOverride
44+
exclude: true
45+
HttpHealthCheck: !ruby/object:Provider::Chef::ResourceOverride
46+
exclude: true
47+
HttpsHealthCheck: !ruby/object:Provider::Chef::ResourceOverride
48+
exclude: true
49+
Image: !ruby/object:Provider::Chef::ResourceOverride
50+
exclude: true
51+
Instance: !ruby/object:Provider::Chef::ResourceOverride
52+
exclude: true
53+
InstanceGroup: !ruby/object:Provider::Chef::ResourceOverride
54+
exclude: true
55+
InstanceGroupManager: !ruby/object:Provider::Chef::ResourceOverride
56+
exclude: true
57+
InstanceTemplate: !ruby/object:Provider::Chef::ResourceOverride
58+
exclude: true
59+
InterconnectAttachment: !ruby/object:Provider::Chef::ResourceOverride
60+
exclude: true
61+
License: !ruby/object:Provider::Chef::ResourceOverride
62+
exclude: true
63+
MachineType: !ruby/object:Provider::Chef::ResourceOverride
64+
exclude: true
65+
Network: !ruby/object:Provider::Chef::ResourceOverride
66+
exclude: true
67+
Region: !ruby/object:Provider::Chef::ResourceOverride
68+
exclude: true
69+
RegionAutoscaler: !ruby/object:Provider::Chef::ResourceOverride
70+
exclude: true
71+
RegionDisk: !ruby/object:Provider::Chef::ResourceOverride
72+
exclude: true
73+
RegionDiskType: !ruby/object:Provider::Chef::ResourceOverride
74+
exclude: true
75+
Route: !ruby/object:Provider::Chef::ResourceOverride
76+
exclude: true
77+
Router: !ruby/object:Provider::Chef::ResourceOverride
78+
exclude: true
79+
Snapshot: !ruby/object:Provider::Chef::ResourceOverride
80+
exclude: true
81+
SslCertificate: !ruby/object:Provider::Chef::ResourceOverride
82+
exclude: true
83+
SslPolicy: !ruby/object:Provider::Chef::ResourceOverride
84+
exclude: true
85+
Subnetwork: !ruby/object:Provider::Chef::ResourceOverride
86+
exclude: true
87+
TargetHttpProxy: !ruby/object:Provider::Chef::ResourceOverride
88+
exclude: true
89+
TargetHttpsProxy: !ruby/object:Provider::Chef::ResourceOverride
90+
exclude: true
91+
TargetPool: !ruby/object:Provider::Chef::ResourceOverride
92+
exclude: true
93+
TargetTcpProxy: !ruby/object:Provider::Chef::ResourceOverride
94+
exclude: true
95+
TargetVpnGateway: !ruby/object:Provider::Chef::ResourceOverride
96+
exclude: true
97+
TargetSslProxy: !ruby/object:Provider::Chef::ResourceOverride
98+
exclude: true
99+
UrlMap: !ruby/object:Provider::Chef::ResourceOverride
100+
exclude: true
101+
VpnTunnel: !ruby/object:Provider::Chef::ResourceOverride
102+
exclude: true
22103
files: !ruby/object:Provider::Config::Files
23104
style:
24105
functions:

provider/inspec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ module Provider
2121
# Code generator for Example Cookbooks that manage Google Cloud Platform
2222
# resources.
2323
class Inspec < Provider::Core
24+
include Google::RubyUtils
2425
# Settings for the provider
2526
class Config < Provider::Config
2627
attr_reader :manifest
@@ -53,6 +54,14 @@ def generate_resource(data)
5354
)
5455
end
5556

57+
# Returns the url that this object can be retrieved from
58+
# based off of the self link
59+
def url(object)
60+
url = object.self_link_url[1]
61+
return url.join('') if url.is_a?(Array)
62+
url.split("\n").join('')
63+
end
64+
5665
# TODO?
5766
def generate_resource_tests(data) end
5867

templates/inspec/singular_resource.erb

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,31 @@
1414
-%>
1515
<%= compile 'templates/license.erb' -%>
1616

17-
<%= lines(autogen_notice :ruby) -%>
17+
<%= lines(autogen_notice :ruby) -%>
18+
19+
# A provider to manage <%= @api.name -%> resources.
20+
class <%= object.name -%> < Inspec.resource(1)
21+
22+
name 'google_<%= product_ns.downcase -%>_<%= object.name.downcase -%>'
23+
desc '<%= object.name -%>'
24+
supports platform: 'gcp-mm'
25+
26+
<% object.properties.each do |prop| -%>
27+
<%= "attr_reader :#{prop.out_name}" -%>
28+
29+
<% end -%>
30+
def base
31+
'<%= object.self_link_url[0].join %>'
32+
end
33+
34+
def url
35+
'<%= url(object) %>'
36+
end
37+
38+
# TODO
39+
def parse end
40+
41+
def exists?
42+
!@fetched.nil?
43+
end
44+
end

0 commit comments

Comments
 (0)