gclouder 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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: []