fog-google 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -0
- data/CHANGELOG.md +53 -0
- data/CONTRIBUTING.md +9 -1
- data/MIGRATING.md +11 -0
- data/README.md +16 -2
- data/ci/pipeline.yml +31 -1
- data/examples/bootstrap.rb +18 -9
- data/lib/fog/compute/google/models/server.rb +9 -0
- data/lib/fog/compute/google/models/servers.rb +21 -12
- data/lib/fog/compute/google/models/ssl_certificate.rb +1 -1
- data/lib/fog/google/models/sql/instance.rb +19 -4
- data/lib/fog/google/models/sql/user.rb +9 -3
- data/lib/fog/google/requests/sql/insert_instance.rb +2 -2
- data/lib/fog/google/version.rb +1 -1
- data/lib/fog/storage/google_xml/utils.rb +1 -1
- data/tasks/lint.rake +6 -0
- data/tasks/test.rake +21 -8
- data/test/helpers/integration_test_helper.rb +1 -1
- data/test/integration/compute/test_disk_types.rb +6 -11
- data/test/integration/compute/test_servers.rb +35 -1
- data/test/integration/factories/sql_v1_certs_factory.rb +20 -0
- data/test/integration/factories/sql_v1_instances_factory.rb +19 -0
- data/test/integration/factories/sql_v1_users_factory.rb +20 -0
- data/test/integration/factories/sql_v2_instances_factory.rb +19 -0
- data/test/integration/monitoring/test_timeseries.rb +6 -8
- data/test/integration/sql/{test_flags.rb → test_common_flags.rb} +1 -1
- data/test/integration/sql/{test_tiers.rb → test_common_tiers.rb} +5 -13
- data/test/integration/sql/test_v1_certs.rb +50 -0
- data/test/integration/sql/test_v1_instances.rb +31 -0
- data/test/integration/sql/test_v1_users.rb +37 -0
- data/test/integration/sql/test_v2_instances.rb +81 -0
- data/test/unit/compute/test_server.rb +28 -0
- data/test/unit/storage/test_xml_requests.rb +24 -0
- metadata +27 -12
- data/test/integration/sql/sql_instances_shared.rb +0 -57
- data/test/integration/sql/test_instances.rb +0 -97
- data/test/integration/sql/test_instances_second_gen.rb +0 -88
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44ebad93a3aba93d0c9c8465a085e52688d340f7
|
4
|
+
data.tar.gz: 2543bae22b7ad7cc12108b4173c8806f67a3b838
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b76ea9d006ba75403d8d7d24f9c42904062dd6a620e42a7cf6d742e6d1f59739a97150230ee246468c0d11db751a908177e62228a3d9cb34dd1ae839ef6c1765
|
7
|
+
data.tar.gz: 64b0fa489bb69896c2abb0130e9671188e22660c006a957f6e788a902b383cb53f6f183be418d4159f196425dddfcb873cc1728584e8654c5b1543d63f7bbb4f
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,41 @@
|
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
The format is loosely based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
4
4
|
|
5
|
+
## 1.6.0
|
6
|
+
|
7
|
+
### User-facing
|
8
|
+
|
9
|
+
#### Changed
|
10
|
+
|
11
|
+
- \#338 `Fog::Google::SQL` resources are now created and destroyed synchronously by default.
|
12
|
+
You can override it in a standard manner by passing a parameter to async method, e.g.:
|
13
|
+
`Fog::Google::SQL::Instance.create(true)` [temikus]
|
14
|
+
- \#367 `Fog::Compute::Google::Server.bootstrap` changes [temikus]
|
15
|
+
- Now creates instances with disks that automatically delete on instance shutdown.
|
16
|
+
- Now creates instances with a public IP address by default.
|
17
|
+
|
18
|
+
#### Added
|
19
|
+
|
20
|
+
- \#361 `Fog::Compute::Google::Server` now recognises `network_ip` attribute to specify internal IP. [mattimatti]
|
21
|
+
|
22
|
+
#### Fixed
|
23
|
+
|
24
|
+
- \#338 Fixed SQL Users model workflow [temikus]
|
25
|
+
- \#359 Fix whitespace escaping in XML Storage methods [temikus]
|
26
|
+
- \#366 Fixing `Server` model to properly accept `:private_key_path` and `:public_key_path` attributes again. [temikus]
|
27
|
+
- \#367 `Fog::Compute::Google::Server.bootstrap` parameters are now properly merged with default ones. [tesmikus]
|
28
|
+
|
29
|
+
### Development changes
|
30
|
+
|
31
|
+
#### Added
|
32
|
+
|
33
|
+
- \#338 Major refactor of SQLv1 and SQLv2 tests + a lot of small test fixes/improvements
|
34
|
+
(see PR/commit messages for full set of changes) [temikus]
|
35
|
+
|
36
|
+
#### Fixed
|
37
|
+
|
38
|
+
- \#363 Fixed flaky Monitoring tests [temikus]
|
39
|
+
|
5
40
|
## 1.5.0
|
6
41
|
|
7
42
|
### User-facing
|
@@ -110,3 +145,21 @@ PRs that change functionality: #212, #215, #203, #198, #201, #221, #222, #216
|
|
110
145
|
|
111
146
|
Rapid-releasing 0.5.2 due to regression fixed by #190 still present in v0.5.1
|
112
147
|
We encourage people using 0.5.1 to upgrade.
|
148
|
+
|
149
|
+
## Template to use
|
150
|
+
|
151
|
+
## Next release
|
152
|
+
|
153
|
+
### User-facing
|
154
|
+
|
155
|
+
#### Changed
|
156
|
+
|
157
|
+
#### Added
|
158
|
+
|
159
|
+
#### Fixed
|
160
|
+
|
161
|
+
### Development changes
|
162
|
+
|
163
|
+
#### Added
|
164
|
+
|
165
|
+
#### Fixed
|
data/CONTRIBUTING.md
CHANGED
@@ -65,6 +65,13 @@ Then you can run all the live tests:
|
|
65
65
|
$ rake test
|
66
66
|
```
|
67
67
|
|
68
|
+
or just one API:
|
69
|
+
|
70
|
+
```
|
71
|
+
$ rake test:compute
|
72
|
+
```
|
73
|
+
(See `rake -T` for all available tasks)
|
74
|
+
|
68
75
|
or just one file:
|
69
76
|
|
70
77
|
```shell
|
@@ -79,7 +86,8 @@ For more information on transition, read [#50](https://github.com/fog/fog-google
|
|
79
86
|
|
80
87
|
#### Continuous integration
|
81
88
|
|
82
|
-
Currently Google maintains a [Concourse CI](https://concourse-ci.org/) server, running a pipeline defined in `ci` folder.
|
89
|
+
Currently Google maintains a [Concourse CI](https://concourse-ci.org/) server, running a pipeline defined in `ci` folder.
|
90
|
+
It automatically runs all integration tests against every pull-request marked with `integration` label.
|
83
91
|
|
84
92
|
For more information on the pipeline please refer to the [ci README](https://github.com/fog/fog-google/blob/master/ci/README.md).
|
85
93
|
|
data/MIGRATING.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
## fog-google 2.0 -> 3.0:
|
2
|
+
|
3
|
+
### SQL:
|
4
|
+
- `Fog::Google::SQL::Instance` resources are created synchronously by default.
|
5
|
+
You can override it with `Fog::Google::SQL::Instance.create(true)`
|
6
|
+
|
7
|
+
- `Fog::Google::SQL::Instance.destroy` - `async:` named parameter has been replaced with `async` positional parameter.
|
8
|
+
You should now call `Fog::Google::SQL::Instance.destroy(false)` to disable async flag, as with other Fog::Google models.
|
9
|
+
|
10
|
+
- `Fog::Google::SQL::User.destroy` - `async:` named parameter has been replaced with `async` positional parameter.
|
11
|
+
You should now call `Fog::Google::SQL::User.destroy(false)` to disable async flag, as with other Fog::Google models.
|
data/README.md
CHANGED
@@ -8,6 +8,7 @@ The main maintainers for the Google sections are @icco, @Temikus and @plribeiro3
|
|
8
8
|
|
9
9
|
**As of v1.0.0, fog-google includes google-api-client as a dependency**
|
10
10
|
|
11
|
+
**See [MIGRATING.md](MIGRATING.MD) for migration between major versions**
|
11
12
|
|
12
13
|
## Storage
|
13
14
|
|
@@ -65,9 +66,22 @@ $ gem install fog-google
|
|
65
66
|
|
66
67
|
## Testing
|
67
68
|
|
68
|
-
|
69
|
+
Integration tests can be kicked off via following rake tasks.
|
70
|
+
**Important note:** As those tests are running against real API's YOU WILL BE BILLED.
|
69
71
|
|
70
|
-
|
72
|
+
```
|
73
|
+
rake test # Run all integration tests
|
74
|
+
rake test:parallel # Run all integration tests in parallel
|
75
|
+
|
76
|
+
rake test:compute # Run Compute API tests
|
77
|
+
rake test:monitoring # Run Monitoring API tests
|
78
|
+
rake test:pubsub # Run PubSub API tests
|
79
|
+
rake test:sql # Run SQL API tests
|
80
|
+
rake test:storage # Run Storage API tests
|
81
|
+
```
|
82
|
+
|
83
|
+
Since some resources can be expensive to test, we have a self-hosted CI server.
|
84
|
+
Due to security considerations a repo maintainer needs to add the label `integrate` to kick off the CI.
|
71
85
|
|
72
86
|
## Setup
|
73
87
|
|
data/ci/pipeline.yml
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
jobs:
|
2
2
|
- name: integration-tests-compute
|
3
|
+
serial: true
|
3
4
|
plan:
|
4
5
|
- get: fog-google-src
|
5
6
|
resource: pull-request
|
@@ -15,8 +16,14 @@ jobs:
|
|
15
16
|
google_project: {{google_project}}
|
16
17
|
google_json_key_data: {{google_json_key_data}}
|
17
18
|
google_client_email: {{google_client_email}}
|
18
|
-
|
19
|
+
on_failure:
|
20
|
+
put: pull-request
|
21
|
+
params:
|
22
|
+
path: fog-google-src
|
23
|
+
status: failure
|
24
|
+
|
19
25
|
- name: integration-tests-monitoring
|
26
|
+
serial: true
|
20
27
|
plan:
|
21
28
|
- get: fog-google-src
|
22
29
|
resource: pull-request
|
@@ -32,8 +39,14 @@ jobs:
|
|
32
39
|
google_project: {{google_project}}
|
33
40
|
google_json_key_data: {{google_json_key_data}}
|
34
41
|
google_client_email: {{google_client_email}}
|
42
|
+
on_failure:
|
43
|
+
put: pull-request
|
44
|
+
params:
|
45
|
+
path: fog-google-src
|
46
|
+
status: failure
|
35
47
|
|
36
48
|
- name: integration-tests-pubsub
|
49
|
+
serial: true
|
37
50
|
plan:
|
38
51
|
- get: fog-google-src
|
39
52
|
resource: pull-request
|
@@ -49,8 +62,14 @@ jobs:
|
|
49
62
|
google_project: {{google_project}}
|
50
63
|
google_json_key_data: {{google_json_key_data}}
|
51
64
|
google_client_email: {{google_client_email}}
|
65
|
+
on_failure:
|
66
|
+
put: pull-request
|
67
|
+
params:
|
68
|
+
path: fog-google-src
|
69
|
+
status: failure
|
52
70
|
|
53
71
|
- name: integration-tests-sql
|
72
|
+
serial: true
|
54
73
|
plan:
|
55
74
|
- get: fog-google-src
|
56
75
|
resource: pull-request
|
@@ -66,8 +85,14 @@ jobs:
|
|
66
85
|
google_project: {{google_project}}
|
67
86
|
google_json_key_data: {{google_json_key_data}}
|
68
87
|
google_client_email: {{google_client_email}}
|
88
|
+
on_failure:
|
89
|
+
put: pull-request
|
90
|
+
params:
|
91
|
+
path: fog-google-src
|
92
|
+
status: failure
|
69
93
|
|
70
94
|
- name: integration-tests-storage
|
95
|
+
serial: true
|
71
96
|
plan:
|
72
97
|
- get: fog-google-src
|
73
98
|
resource: pull-request
|
@@ -83,6 +108,11 @@ jobs:
|
|
83
108
|
google_project: {{google_project}}
|
84
109
|
google_json_key_data: {{google_json_key_data}}
|
85
110
|
google_client_email: {{google_client_email}}
|
111
|
+
on_failure:
|
112
|
+
put: pull-request
|
113
|
+
params:
|
114
|
+
path: fog-google-src
|
115
|
+
status: failure
|
86
116
|
|
87
117
|
- name: github-pr-aggregator
|
88
118
|
plan:
|
data/examples/bootstrap.rb
CHANGED
@@ -1,18 +1,27 @@
|
|
1
1
|
# All examples presume that you have a ~/.fog credentials file set up.
|
2
2
|
# More info on it can be found here: http://fog.io/about/getting_started.html
|
3
|
+
# Code can be ran by simply invoking `ruby bootstrap.rb`
|
4
|
+
# Note: this example will require 'net-ssh' gem to be installed
|
3
5
|
|
4
6
|
require "bundler"
|
5
7
|
Bundler.require(:default, :development)
|
6
|
-
# Uncomment this if you want to make real requests to GCE (you _will_ be billed!)
|
7
|
-
# WebMock.disable!
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
p "Connecting to google..."
|
10
|
+
p "======================="
|
11
|
+
connection = Fog::Compute.new(:provider => "Google")
|
11
12
|
|
12
|
-
|
13
|
+
p "Bootstrapping a server..."
|
14
|
+
p "========================="
|
15
|
+
server = connection.servers.bootstrap
|
13
16
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
p "Waiting for server to be sshable..."
|
18
|
+
p "==================================="
|
19
|
+
server.wait_for { sshable? }
|
17
20
|
|
18
|
-
|
21
|
+
p "Trying to send an SSH command..."
|
22
|
+
p "================================"
|
23
|
+
raise "Could not bootstrap sshable server." unless server.ssh("whoami")
|
24
|
+
|
25
|
+
p "Deleting a server..."
|
26
|
+
p "===================="
|
27
|
+
raise "Could not delete server." unless server.destroy
|
@@ -445,6 +445,11 @@ module Fog
|
|
445
445
|
requires :disks
|
446
446
|
requires :zone
|
447
447
|
|
448
|
+
generate_ssh_key_metadata(self.username, self.public_key) if self.public_key
|
449
|
+
|
450
|
+
# XXX HACK This is a relic of 1.0 change that for some reason added those arguments
|
451
|
+
# to `save` method. This is left in place to keep things backwards-compatible
|
452
|
+
# TODO(2.0): Remove arguments from save
|
448
453
|
generate_ssh_key_metadata(username, public_key) if public_key
|
449
454
|
|
450
455
|
options = attributes.reject { |_, v| v.nil? }
|
@@ -473,6 +478,10 @@ module Fog
|
|
473
478
|
]
|
474
479
|
end
|
475
480
|
|
481
|
+
if attributes[:network_ip]
|
482
|
+
options[:network_interfaces][0][:network_ip] = attributes[:network_ip]
|
483
|
+
end
|
484
|
+
|
476
485
|
data = service.insert_server(name, zone_name, options)
|
477
486
|
|
478
487
|
operation = Fog::Compute::Google::Operations
|
@@ -43,9 +43,6 @@ module Fog
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def bootstrap(public_key_path: nil, **opts)
|
46
|
-
user = ENV["USER"]
|
47
|
-
public_key = get_public_key(public_key_path)
|
48
|
-
|
49
46
|
name = "fog-#{Time.now.to_i}"
|
50
47
|
zone_name = "us-central1-f"
|
51
48
|
|
@@ -66,17 +63,29 @@ module Fog
|
|
66
63
|
disks = [disk]
|
67
64
|
end
|
68
65
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
66
|
+
# TODO: Remove the network init when #360 is fixed
|
67
|
+
network = { :network => "global/networks/default",
|
68
|
+
:access_configs => [{ :name => "External NAT",
|
69
|
+
:type => "ONE_TO_ONE_NAT" }] }
|
70
|
+
|
71
|
+
# Merge the options with the defaults, overwriting defaults
|
72
|
+
# if an option is provided
|
73
|
+
data = { :name => name,
|
74
|
+
:zone => zone_name,
|
75
|
+
:disks => disks,
|
76
|
+
:network_interfaces => [network],
|
77
|
+
:public_key => get_public_key(public_key_path),
|
78
|
+
:username => ENV["USER"] }.merge(opts)
|
79
|
+
|
74
80
|
data[:machine_type] = "n1-standard-1" unless data[:machine_type]
|
75
81
|
|
76
82
|
server = new(data)
|
77
|
-
server.save
|
78
|
-
|
79
|
-
|
83
|
+
server.save
|
84
|
+
server.wait_for { ready? }
|
85
|
+
|
86
|
+
# Set the disk to be autodeleted
|
87
|
+
server.set_disk_auto_delete(true)
|
88
|
+
|
80
89
|
server
|
81
90
|
end
|
82
91
|
|
@@ -100,7 +109,7 @@ module Fog
|
|
100
109
|
end
|
101
110
|
|
102
111
|
if public_key_path.nil? || public_key_path.empty?
|
103
|
-
raise
|
112
|
+
raise Fog::Errors::Error.new("Cannot bootstrap instance without a public key")
|
104
113
|
end
|
105
114
|
|
106
115
|
File.read(File.expand_path(public_key_path))
|
@@ -85,14 +85,21 @@ module Fog
|
|
85
85
|
|
86
86
|
##
|
87
87
|
# Creates a Cloud SQL instance
|
88
|
+
# @param [Boolean] async If the operation must be performed asynchronously
|
89
|
+
#
|
90
|
+
# This is true by default since SQL instances return Google::Apis::ClientError: invalidState
|
91
|
+
# whenever an instance is in a transition process (creation, deletion, etc.) which makes it
|
92
|
+
# hard to operate unless one puts guard clauses on Google::Apis::ClientError everywhere.
|
93
|
+
#
|
94
|
+
# TODO: Rethink this when API graduates out of beta. (Written as of V1beta4)
|
88
95
|
#
|
89
96
|
# @return [Fog::Google::SQL::Instance] Instance resource
|
90
|
-
def create
|
97
|
+
def create(async = false)
|
91
98
|
requires :identity
|
92
99
|
|
93
100
|
data = service.insert_instance(identity, attributes[:tier], attributes)
|
94
101
|
operation = Fog::Google::SQL::Operations.new(:service => service).get(data.name)
|
95
|
-
operation.wait_for {
|
102
|
+
operation.wait_for { ready? } unless async
|
96
103
|
reload
|
97
104
|
end
|
98
105
|
|
@@ -107,11 +114,19 @@ module Fog
|
|
107
114
|
##
|
108
115
|
# Deletes a Cloud SQL instance
|
109
116
|
#
|
110
|
-
# @param [Boolean]
|
117
|
+
# @param [Boolean] async If the operation must be performed asynchronously (false by default)
|
118
|
+
# See Fog::Google::SQL::Instance.create on details why default is set this way.
|
119
|
+
#
|
111
120
|
# @return [Fog::Google::SQL::Operation] A Operation resource
|
112
|
-
def destroy(async
|
121
|
+
def destroy(async = false)
|
113
122
|
requires :identity
|
114
123
|
|
124
|
+
# TODO(2.0): Add a deprecation warning here, depending on the decision in #27
|
125
|
+
# This is a compatibility fix leftover from breaking named parameter change
|
126
|
+
if async.is_a?(Hash)
|
127
|
+
async = async[:async]
|
128
|
+
end
|
129
|
+
|
115
130
|
data = service.delete_instance(identity)
|
116
131
|
operation = Fog::Google::SQL::Operations.new(:service => service).get(data.name)
|
117
132
|
operation.tap { |o| o.wait_for { ready? } unless async }
|
@@ -15,9 +15,15 @@ module Fog
|
|
15
15
|
attribute :kind
|
16
16
|
attribute :project
|
17
17
|
|
18
|
-
def destroy(async
|
18
|
+
def destroy(async = true)
|
19
19
|
requires :instance, :name, :host
|
20
20
|
|
21
|
+
# TODO(2.0): Add a deprecation warning here, depending on the decision in #27
|
22
|
+
# This is a compatibility fix leftover from breaking named parameter change
|
23
|
+
if async.is_a?(Hash)
|
24
|
+
async = async[:async]
|
25
|
+
end
|
26
|
+
|
21
27
|
resp = service.delete_user(instance, host, name)
|
22
28
|
operation = Fog::Google::SQL::Operations.new(:service => service).get(resp.name)
|
23
29
|
operation.wait_for { ready? } unless async
|
@@ -30,9 +36,9 @@ module Fog
|
|
30
36
|
data = attributes
|
31
37
|
data[:password] = password unless password.nil?
|
32
38
|
if etag.nil?
|
33
|
-
resp = service.update_user(instance, data)
|
34
|
-
else
|
35
39
|
resp = service.insert_user(instance, data)
|
40
|
+
else
|
41
|
+
resp = service.update_user(instance, data)
|
36
42
|
end
|
37
43
|
|
38
44
|
operation = Fog::Google::SQL::Operations.new(:service => service).get(resp.name)
|
@@ -7,8 +7,8 @@ module Fog
|
|
7
7
|
# @see https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/instances/insert
|
8
8
|
|
9
9
|
class Real
|
10
|
-
def insert_instance(name, tier,
|
11
|
-
instance = ::Google::Apis::SqladminV1beta4::DatabaseInstance.new(
|
10
|
+
def insert_instance(name, tier, options = {})
|
11
|
+
instance = ::Google::Apis::SqladminV1beta4::DatabaseInstance.new(options)
|
12
12
|
instance.name = name
|
13
13
|
instance.settings = ::Google::Apis::SqladminV1beta4::Settings.new(instance.settings || {})
|
14
14
|
instance.settings.tier = tier
|