gclouder 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +104 -0
  3. data/bin/gclouder +7 -0
  4. data/lib/gclouder/config/arguments.rb +35 -0
  5. data/lib/gclouder/config/cli_args.rb +77 -0
  6. data/lib/gclouder/config/cluster.rb +66 -0
  7. data/lib/gclouder/config/defaults.rb +35 -0
  8. data/lib/gclouder/config/files/project.rb +24 -0
  9. data/lib/gclouder/config/project.rb +34 -0
  10. data/lib/gclouder/config/resource_representations.rb +31 -0
  11. data/lib/gclouder/config_loader.rb +25 -0
  12. data/lib/gclouder/config_section.rb +26 -0
  13. data/lib/gclouder/dependencies.rb +11 -0
  14. data/lib/gclouder/gcloud.rb +39 -0
  15. data/lib/gclouder/gsutil.rb +25 -0
  16. data/lib/gclouder/header.rb +9 -0
  17. data/lib/gclouder/helpers.rb +77 -0
  18. data/lib/gclouder/logging.rb +181 -0
  19. data/lib/gclouder/mappings/argument.rb +31 -0
  20. data/lib/gclouder/mappings/file.rb +31 -0
  21. data/lib/gclouder/mappings/property.rb +31 -0
  22. data/lib/gclouder/mappings/resource_representation.rb +31 -0
  23. data/lib/gclouder/monkey_patches/array.rb +19 -0
  24. data/lib/gclouder/monkey_patches/boolean.rb +12 -0
  25. data/lib/gclouder/monkey_patches/hash.rb +44 -0
  26. data/lib/gclouder/monkey_patches/ipaddr.rb +10 -0
  27. data/lib/gclouder/monkey_patches/string.rb +30 -0
  28. data/lib/gclouder/resource.rb +63 -0
  29. data/lib/gclouder/resource_cleaner.rb +58 -0
  30. data/lib/gclouder/resources/compute/addresses.rb +108 -0
  31. data/lib/gclouder/resources/compute/bgp-vpns.rb +220 -0
  32. data/lib/gclouder/resources/compute/disks.rb +99 -0
  33. data/lib/gclouder/resources/compute/firewall_rules.rb +82 -0
  34. data/lib/gclouder/resources/compute/instances.rb +147 -0
  35. data/lib/gclouder/resources/compute/networks/subnets.rb +104 -0
  36. data/lib/gclouder/resources/compute/networks.rb +110 -0
  37. data/lib/gclouder/resources/compute/project_info/ssh_keys.rb +171 -0
  38. data/lib/gclouder/resources/compute/routers.rb +83 -0
  39. data/lib/gclouder/resources/compute/vpns.rb +199 -0
  40. data/lib/gclouder/resources/container/clusters.rb +257 -0
  41. data/lib/gclouder/resources/container/node_pools.rb +193 -0
  42. data/lib/gclouder/resources/dns.rb +390 -0
  43. data/lib/gclouder/resources/logging/sinks.rb +98 -0
  44. data/lib/gclouder/resources/project/iam_policy_binding.rb +293 -0
  45. data/lib/gclouder/resources/project.rb +85 -0
  46. data/lib/gclouder/resources/project_id.rb +71 -0
  47. data/lib/gclouder/resources/pubsub/subscriptions.rb +100 -0
  48. data/lib/gclouder/resources/pubsub/topics.rb +95 -0
  49. data/lib/gclouder/resources/storagebuckets.rb +103 -0
  50. data/lib/gclouder/resources/validate/global.rb +27 -0
  51. data/lib/gclouder/resources/validate/local.rb +68 -0
  52. data/lib/gclouder/resources/validate/region.rb +28 -0
  53. data/lib/gclouder/resources/validate/remote.rb +78 -0
  54. data/lib/gclouder/resources.rb +148 -0
  55. data/lib/gclouder/shell.rb +71 -0
  56. data/lib/gclouder/version.rb +5 -0
  57. data/lib/gclouder.rb +278 -0
  58. metadata +102 -0
data/lib/gclouder.rb ADDED
@@ -0,0 +1,278 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "awesome_print"
4
+ require "json"
5
+ require "yaml"
6
+ require "ipaddr"
7
+ require "trollop"
8
+ require "hashie"
9
+ require "pp"
10
+ require "colorize"
11
+
12
+ require "gclouder/logging"
13
+
14
+ require "gclouder/helpers"
15
+ require "gclouder/shell"
16
+
17
+ require "gclouder/monkey_patches/hash"
18
+ require "gclouder/monkey_patches/array"
19
+ require "gclouder/monkey_patches/string"
20
+ require "gclouder/monkey_patches/boolean"
21
+ require "gclouder/monkey_patches/ipaddr"
22
+
23
+ require "gclouder/header"
24
+
25
+ require "gclouder/config_loader"
26
+ require "gclouder/config_section"
27
+ require "gclouder/config/cli_args"
28
+ require "gclouder/config/files/project"
29
+ require "gclouder/config/cluster"
30
+ require "gclouder/config/project"
31
+ require "gclouder/config/arguments"
32
+ require "gclouder/config/defaults"
33
+ require "gclouder/config/resource_representations"
34
+
35
+ require "gclouder/mappings/file"
36
+ require "gclouder/mappings/argument"
37
+ require "gclouder/mappings/property"
38
+ require "gclouder/mappings/resource_representation"
39
+
40
+ require "gclouder/gcloud"
41
+ require "gclouder/gsutil"
42
+ require "gclouder/dependencies"
43
+ require "gclouder/resource"
44
+ require "gclouder/resource_cleaner"
45
+ require "gclouder/resources"
46
+ require "gclouder/resources/validate/local.rb"
47
+ require "gclouder/resources/validate/region.rb"
48
+ require "gclouder/resources/validate/remote.rb"
49
+ require "gclouder/resources/validate/global.rb"
50
+
51
+ require "gclouder/resources/project_id"
52
+
53
+ require "gclouder/resources/project"
54
+ require "gclouder/resources/project/iam_policy_binding.rb"
55
+
56
+ require "gclouder/resources/storagebuckets"
57
+
58
+ require "gclouder/resources/compute/networks"
59
+ require "gclouder/resources/compute/networks/subnets"
60
+ require "gclouder/resources/compute/routers"
61
+ require "gclouder/resources/compute/addresses"
62
+ require "gclouder/resources/compute/vpns"
63
+ require "gclouder/resources/compute/bgp-vpns"
64
+
65
+ require "gclouder/resources/compute/project_info/ssh_keys"
66
+
67
+ require "gclouder/resources/dns"
68
+
69
+ require "gclouder/resources/compute/disks"
70
+ require "gclouder/resources/compute/instances"
71
+
72
+ require "gclouder/resources/container/clusters"
73
+ require "gclouder/resources/container/node_pools"
74
+
75
+ require "gclouder/resources/compute/firewall_rules"
76
+
77
+ require "gclouder/resources/pubsub/topics"
78
+ require "gclouder/resources/pubsub/subscriptions"
79
+
80
+ require "gclouder/resources/logging/sinks"
81
+
82
+ module GClouder
83
+ include GClouder::Logging
84
+ include GClouder::Config::CLIArgs
85
+ include GClouder::Config::Project
86
+ include GClouder::Config::Arguments
87
+
88
+ def self.run
89
+ setup
90
+
91
+ begin
92
+ header
93
+ bootstrap
94
+ check_project_exists
95
+ update
96
+ report
97
+ footer
98
+ rescue => error
99
+ raise error if cli_args[:trace] || cli_args[:debug]
100
+ fatal error.message
101
+ ensure
102
+ Project::ID.rescue
103
+ end
104
+ end
105
+
106
+ private
107
+
108
+ def self.check_project_exists
109
+ # FIXME: this requires Cloud Resource Manager API to be enabled for project
110
+ return if Resources::Project.exists?
111
+ fatal "\nerror: project does not exist or you do not have permission to access it: #{project['project_id']}"
112
+ end
113
+
114
+ def self.header
115
+ info GClouder::Header.display
116
+ end
117
+
118
+ def self.footer
119
+ info
120
+ end
121
+
122
+ def self.setup
123
+ Dependencies.check
124
+ Config::CLIArgs.load
125
+ Config::Project.load
126
+ Project::ID.load
127
+ Config::Arguments.load
128
+ Config::ResourceRepresentations.load
129
+ end
130
+
131
+ def self.bootstrap
132
+ return unless cli_args[:bootstrap]
133
+
134
+ Resources::Project.update
135
+
136
+ report
137
+ footer
138
+ exit
139
+ end
140
+
141
+ # resources are ordered in an attempt to avoid dependency issues
142
+ def self.resources
143
+ [
144
+ {
145
+ name: "sinks",
146
+ module: Resources::Logging::Sinks,
147
+ skip: [ :check, :clean ],
148
+ },
149
+
150
+ {
151
+ name: "iam",
152
+ module: Resources::Project::IAMPolicyBinding,
153
+ skip: [ :check ],
154
+ },
155
+
156
+ {
157
+ name: "ssh-keys",
158
+ module: Resources::Compute::ProjectInfo::SSHKeys,
159
+ skip: [ :check, :clean ],
160
+ },
161
+
162
+ {
163
+ name: "storage-buckets",
164
+ module: Resources::StorageBuckets,
165
+ skip: [ :check ],
166
+ },
167
+
168
+ {
169
+ name: "networks",
170
+ module: Resources::Compute::Networks,
171
+ skip: [ :check ],
172
+ },
173
+
174
+ {
175
+ name: "subnets",
176
+ module: Resources::Compute::Networks::Subnets,
177
+ skip: [ :check ],
178
+ },
179
+
180
+ {
181
+ name: "routers",
182
+ module: Resources::Compute::Routers,
183
+ skip: [ :check ],
184
+ },
185
+
186
+ {
187
+ name: "addresses",
188
+ module: Resources::Compute::Addresses,
189
+ },
190
+
191
+ {
192
+ name: "dns",
193
+ module: Resources::DNS,
194
+ skip: [ :check ],
195
+ },
196
+
197
+ {
198
+ name: "vpns",
199
+ module: Resources::Compute::VPNs,
200
+ skip: [ :check ],
201
+ },
202
+
203
+ {
204
+ name: "bgp-vpns",
205
+ module: Resources::Compute::BGPVPNs,
206
+ skip: [ :check ],
207
+ },
208
+
209
+ {
210
+ name: "vms",
211
+ module: Resources::Compute::Instances,
212
+ },
213
+
214
+ {
215
+ name: "disks",
216
+ module: Resources::Compute::Disks,
217
+ skip: [ :check ],
218
+ },
219
+
220
+ {
221
+ name: "clusters",
222
+ module: Resources::Container::Clusters,
223
+ skip: [ :check ],
224
+ },
225
+
226
+ {
227
+ name: "node-pools",
228
+ module: Resources::Container::NodePools,
229
+ skip: [ :check ],
230
+ },
231
+
232
+ {
233
+ name: "firewalls",
234
+ module: Resources::Compute::FirewallRules,
235
+ skip: [ :check ],
236
+ },
237
+
238
+ {
239
+ name: "topics",
240
+ module: Resources::PubSub::Topics,
241
+ skip: [ :check ],
242
+ },
243
+
244
+ {
245
+ name: "subscriptions",
246
+ module: Resources::PubSub::Subscriptions,
247
+ skip: [ :check ],
248
+ },
249
+ ]
250
+ end
251
+
252
+ def self.process?(resource)
253
+ return true unless cli_args[:resources]
254
+
255
+ # if resources flag is passed then check if resource was specified
256
+ cli_args[:resources].split(',').include?(resource)
257
+ end
258
+
259
+ def self.skip?(resource, action)
260
+ return true if resource.fetch(:skip, []).include?(action)
261
+ return true if cli_args[:stages] && !cli_args[:stages].split(",").include?(action.to_s)
262
+ end
263
+
264
+ def self.update
265
+ resources.each do |resource|
266
+ next unless process?(resource[:name])
267
+
268
+ [:validate, :ensure , :clean, :check].each do |action|
269
+ next if skip?(resource, action)
270
+ resource[:module].send(action)
271
+ end
272
+ end
273
+ end
274
+
275
+ def self.report
276
+ Logging.report
277
+ end
278
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gclouder
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Rob Wilson
8
+ - Andy Hume
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2017-06-06 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: A wrapper for gcloud(1) which creates Google Cloud Platform resources
15
+ based on YAML manifests
16
+ email: roobert@gmail.com
17
+ executables:
18
+ - gclouder
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - README.md
23
+ - bin/gclouder
24
+ - lib/gclouder.rb
25
+ - lib/gclouder/config/arguments.rb
26
+ - lib/gclouder/config/cli_args.rb
27
+ - lib/gclouder/config/cluster.rb
28
+ - lib/gclouder/config/defaults.rb
29
+ - lib/gclouder/config/files/project.rb
30
+ - lib/gclouder/config/project.rb
31
+ - lib/gclouder/config/resource_representations.rb
32
+ - lib/gclouder/config_loader.rb
33
+ - lib/gclouder/config_section.rb
34
+ - lib/gclouder/dependencies.rb
35
+ - lib/gclouder/gcloud.rb
36
+ - lib/gclouder/gsutil.rb
37
+ - lib/gclouder/header.rb
38
+ - lib/gclouder/helpers.rb
39
+ - lib/gclouder/logging.rb
40
+ - lib/gclouder/mappings/argument.rb
41
+ - lib/gclouder/mappings/file.rb
42
+ - lib/gclouder/mappings/property.rb
43
+ - lib/gclouder/mappings/resource_representation.rb
44
+ - lib/gclouder/monkey_patches/array.rb
45
+ - lib/gclouder/monkey_patches/boolean.rb
46
+ - lib/gclouder/monkey_patches/hash.rb
47
+ - lib/gclouder/monkey_patches/ipaddr.rb
48
+ - lib/gclouder/monkey_patches/string.rb
49
+ - lib/gclouder/resource.rb
50
+ - lib/gclouder/resource_cleaner.rb
51
+ - lib/gclouder/resources.rb
52
+ - lib/gclouder/resources/compute/addresses.rb
53
+ - lib/gclouder/resources/compute/bgp-vpns.rb
54
+ - lib/gclouder/resources/compute/disks.rb
55
+ - lib/gclouder/resources/compute/firewall_rules.rb
56
+ - lib/gclouder/resources/compute/instances.rb
57
+ - lib/gclouder/resources/compute/networks.rb
58
+ - lib/gclouder/resources/compute/networks/subnets.rb
59
+ - lib/gclouder/resources/compute/project_info/ssh_keys.rb
60
+ - lib/gclouder/resources/compute/routers.rb
61
+ - lib/gclouder/resources/compute/vpns.rb
62
+ - lib/gclouder/resources/container/clusters.rb
63
+ - lib/gclouder/resources/container/node_pools.rb
64
+ - lib/gclouder/resources/dns.rb
65
+ - lib/gclouder/resources/logging/sinks.rb
66
+ - lib/gclouder/resources/project.rb
67
+ - lib/gclouder/resources/project/iam_policy_binding.rb
68
+ - lib/gclouder/resources/project_id.rb
69
+ - lib/gclouder/resources/pubsub/subscriptions.rb
70
+ - lib/gclouder/resources/pubsub/topics.rb
71
+ - lib/gclouder/resources/storagebuckets.rb
72
+ - lib/gclouder/resources/validate/global.rb
73
+ - lib/gclouder/resources/validate/local.rb
74
+ - lib/gclouder/resources/validate/region.rb
75
+ - lib/gclouder/resources/validate/remote.rb
76
+ - lib/gclouder/shell.rb
77
+ - lib/gclouder/version.rb
78
+ homepage: https://github.com/roobert/gclouder
79
+ licenses:
80
+ - MIT
81
+ metadata: {}
82
+ post_install_message:
83
+ rdoc_options: []
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ requirements: []
97
+ rubyforge_project:
98
+ rubygems_version: 2.6.8
99
+ signing_key:
100
+ specification_version: 4
101
+ summary: Google Cloud Platform Resource Deployer
102
+ test_files: []