fog-google 1.5.0 → 1.6.0
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.
- 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
|