docker-publish 0.0.2 → 0.0.3
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/lib/deploy/docker_compose.rb +1 -3
- data/lib/infrastructure/google_cloud_platform/google_cloud_compute.rb +66 -0
- data/lib/infrastructure/google_cloud_platform/google_cloud_platform.rb +9 -1
- data/lib/infrastructure/google_cloud_platform/google_cloud_replica_pool.rb +47 -0
- data/lib/infrastructure/google_cloud_platform/instance-template.json.dist +60 -0
- data/lib/infrastructure/google_cloud_platform/startup.sh.dist +14 -4
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8875d5dbe700e32e0aea142a31b96e2b9616884
|
4
|
+
data.tar.gz: c34f814ee3d4d6236b672ac46c6eba7c985142b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47385b2fbeb3123ea3309c68af1d40314d953befbc69555d4b8217caef3f3f1e929a32ca0226edb5b264e447eecfb0ead2dcce1314acfc77c8d1813af05724bd
|
7
|
+
data.tar.gz: f77697fe25a28e5a8c012ab90689e12a3d17c6a2c6c64e4056d8f1bb6ad0205101d3bd21695c3aed1725289b649f9aa85001938b32a179f04077b4f7ff54b0cd
|
@@ -7,11 +7,10 @@ class DockerCompose
|
|
7
7
|
end
|
8
8
|
|
9
9
|
# @param [string] dist_file_path
|
10
|
-
# @param [string] duty
|
11
10
|
# @param [int] port
|
12
11
|
# @param [string] image_tag
|
13
12
|
# @return [File]
|
14
|
-
def generate_compose_yaml(dist_file_path,
|
13
|
+
def generate_compose_yaml(dist_file_path, port, image_tag, out_filename)
|
15
14
|
path = File.dirname(dist_file_path)
|
16
15
|
file_path = "#{path}/#{out_filename}"
|
17
16
|
|
@@ -29,5 +28,4 @@ class DockerCompose
|
|
29
28
|
out_file
|
30
29
|
end
|
31
30
|
|
32
|
-
|
33
31
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
class GoogleCloudCompute
|
2
|
+
|
3
|
+
def initialize(project_name, app_name, credentials_path)
|
4
|
+
@project_name = project_name
|
5
|
+
@app_name = app_name
|
6
|
+
|
7
|
+
@client = Google::APIClient.new(
|
8
|
+
:application_name => 'docker-publish',
|
9
|
+
:application_version => '0.0.2'
|
10
|
+
)
|
11
|
+
|
12
|
+
json_key = JSON.parse(File.read(credentials_path))
|
13
|
+
gauth = {
|
14
|
+
token_credential_uri: 'https://accounts.google.com/o/oauth2/token',
|
15
|
+
audience: 'https://accounts.google.com/o/oauth2/token',
|
16
|
+
scope: 'https://www.googleapis.com/auth/compute',
|
17
|
+
issuer: json_key['client_email'],
|
18
|
+
signing_key: OpenSSL::PKey::RSA.new(json_key['private_key'])
|
19
|
+
}
|
20
|
+
@client.authorization = Signet::OAuth2::Client.new(gauth)
|
21
|
+
@client.authorization.fetch_access_token!
|
22
|
+
|
23
|
+
@compute = @client.discovered_api('compute')
|
24
|
+
|
25
|
+
@replica_pool = GoogleCloudReplicaPool.new(project_name, app_name, credentials_path)
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_instance_template(machine_type, startup_script_uri)
|
29
|
+
puts 'Creating Google Cloud Compute instance template'
|
30
|
+
|
31
|
+
dist_file_path = File.join(File.dirname(__FILE__), 'instance-template.json.dist')
|
32
|
+
dist_request_json = File.read(dist_file_path)
|
33
|
+
|
34
|
+
dist_request_json = dist_request_json.gsub('<project_name>', @project_name)
|
35
|
+
dist_request_json = dist_request_json.gsub('<app_name>', @app_name)
|
36
|
+
dist_request_json = dist_request_json.gsub('<startup_script_uri>', startup_script_uri)
|
37
|
+
dist_request_json = dist_request_json.gsub('<machine_type>', machine_type)
|
38
|
+
|
39
|
+
result = @client.execute(
|
40
|
+
:api_method => @compute.instance_templates.insert,
|
41
|
+
:parameters => {:project => @project_name},
|
42
|
+
:body_object => JSON.parse(dist_request_json)
|
43
|
+
)
|
44
|
+
|
45
|
+
puts result.response.body
|
46
|
+
|
47
|
+
# wait for instance template to be created
|
48
|
+
while result.data['status'] != 'DONE' and result.data['progress'] < 100
|
49
|
+
puts "#{result.data['status']} - #{result.data['progress']}%"
|
50
|
+
result = @client.execute(
|
51
|
+
:uri => result.data['selfLink']
|
52
|
+
)
|
53
|
+
sleep 0.5
|
54
|
+
end
|
55
|
+
puts "#{result.data['status']} - #{result.data['progress']}%"
|
56
|
+
|
57
|
+
result.data['targetLink']
|
58
|
+
end
|
59
|
+
|
60
|
+
def replica_pool
|
61
|
+
@replica_pool
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
require 'google/api_client'
|
66
|
+
require 'infrastructure/google_cloud_platform/google_cloud_replica_pool'
|
@@ -11,6 +11,7 @@ class GoogleCloudPlatform
|
|
11
11
|
exit 1
|
12
12
|
end
|
13
13
|
@google_cloud_storage = GoogleCloudStorage.new(@project_name, @app_name, @credentials)
|
14
|
+
@google_cloud_compute = GoogleCloudCompute.new(@project_name, @app_name, @credentials)
|
14
15
|
|
15
16
|
@branch = `git rev-parse --abbrev-ref HEAD`.strip
|
16
17
|
@commit = `git rev-parse --short HEAD`.strip
|
@@ -61,6 +62,13 @@ class GoogleCloudPlatform
|
|
61
62
|
def storage
|
62
63
|
@google_cloud_storage
|
63
64
|
end
|
65
|
+
|
66
|
+
# @return [GoogleCloudCompute]
|
67
|
+
def compute
|
68
|
+
@google_cloud_compute
|
69
|
+
end
|
70
|
+
|
64
71
|
end
|
65
72
|
|
66
|
-
require 'infrastructure/google_cloud_platform/google_cloud_storage'
|
73
|
+
require 'infrastructure/google_cloud_platform/google_cloud_storage'
|
74
|
+
require 'infrastructure/google_cloud_platform/google_cloud_compute'
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class GoogleCloudReplicaPool
|
2
|
+
|
3
|
+
def initialize(project_name, app_name, credentials_path)
|
4
|
+
@project_name = project_name
|
5
|
+
@app_name = app_name
|
6
|
+
|
7
|
+
@client = Google::APIClient.new(
|
8
|
+
:application_name => 'docker-publish',
|
9
|
+
:application_version => '0.0.2'
|
10
|
+
)
|
11
|
+
|
12
|
+
json_key = JSON.parse(File.read(credentials_path))
|
13
|
+
gauth = {
|
14
|
+
token_credential_uri: 'https://accounts.google.com/o/oauth2/token',
|
15
|
+
audience: 'https://accounts.google.com/o/oauth2/token',
|
16
|
+
scope: 'https://www.googleapis.com/auth/compute',
|
17
|
+
issuer: json_key['client_email'],
|
18
|
+
signing_key: OpenSSL::PKey::RSA.new(json_key['private_key'])
|
19
|
+
}
|
20
|
+
@client.authorization = Signet::OAuth2::Client.new(gauth)
|
21
|
+
@client.authorization.fetch_access_token!
|
22
|
+
|
23
|
+
@replica_pool = @client.discovered_api('replicapool', 'v1beta2')
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_instance_group(template_uri, zone, size)
|
27
|
+
result = @client.execute(
|
28
|
+
:api_method => @replica_pool.instance_group_managers.insert,
|
29
|
+
:parameters => {
|
30
|
+
:project => @project_name,
|
31
|
+
:zone => zone,
|
32
|
+
:size => size
|
33
|
+
},
|
34
|
+
:body_object => {
|
35
|
+
name: @app_name,
|
36
|
+
instanceTemplate: template_uri,
|
37
|
+
baseInstanceName: @app_name
|
38
|
+
}
|
39
|
+
)
|
40
|
+
|
41
|
+
puts result.response.body
|
42
|
+
|
43
|
+
result
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
require 'google/api_client'
|
@@ -0,0 +1,60 @@
|
|
1
|
+
{
|
2
|
+
"name": "<app_name>",
|
3
|
+
"properties": {
|
4
|
+
"disks": [
|
5
|
+
{
|
6
|
+
"type": "PERSISTENT",
|
7
|
+
"boot": true,
|
8
|
+
"mode": "READ_WRITE",
|
9
|
+
"deviceName": "<app_name>",
|
10
|
+
"autoDelete": true,
|
11
|
+
"initializeParams": {
|
12
|
+
"sourceImage": "https://www.googleapis.com/compute/v1/projects/coreos-cloud/global/images/coreos-stable-681-2-0-v20150618",
|
13
|
+
"diskType": "pd-ssd"
|
14
|
+
}
|
15
|
+
}
|
16
|
+
],
|
17
|
+
"networkInterfaces": [
|
18
|
+
{
|
19
|
+
"network": "https://www.googleapis.com/compute/v1/projects/<project_name>/global/networks/default",
|
20
|
+
"accessConfigs": [
|
21
|
+
{
|
22
|
+
"name": "External NAT",
|
23
|
+
"type": "ONE_TO_ONE_NAT"
|
24
|
+
}
|
25
|
+
]
|
26
|
+
}
|
27
|
+
],
|
28
|
+
"metadata": {
|
29
|
+
"items": [
|
30
|
+
{
|
31
|
+
"key": "startup-script-url",
|
32
|
+
"value": "<startup_script_uri>"
|
33
|
+
}
|
34
|
+
]
|
35
|
+
},
|
36
|
+
"tags": {
|
37
|
+
"items": [
|
38
|
+
"http-server",
|
39
|
+
"https-server"
|
40
|
+
]
|
41
|
+
},
|
42
|
+
"canIpForward": false,
|
43
|
+
"scheduling": {
|
44
|
+
"preemptible": false,
|
45
|
+
"automaticRestart": true,
|
46
|
+
"onHostMaintenance": "MIGRATE"
|
47
|
+
},
|
48
|
+
"machineType": "<machine_type>",
|
49
|
+
"serviceAccounts": [
|
50
|
+
{
|
51
|
+
"email": "default",
|
52
|
+
"scopes": [
|
53
|
+
"https://www.googleapis.com/auth/devstorage.read_only",
|
54
|
+
"https://www.googleapis.com/auth/sqlservice.admin",
|
55
|
+
"https://www.googleapis.com/auth/logging.write"
|
56
|
+
]
|
57
|
+
}
|
58
|
+
]
|
59
|
+
}
|
60
|
+
}
|
@@ -1,12 +1,22 @@
|
|
1
1
|
#!/bin/bash
|
2
2
|
|
3
|
+
# Download docker-compose
|
4
|
+
mkdir ~/bin
|
5
|
+
curl -L https://github.com/docker/compose/releases/download/1.3.0/docker-compose-`uname -s`-`uname -m` > ~/bin/docker-compose
|
6
|
+
chmod +x ~/bin/docker-compose
|
7
|
+
export PATH=$PATH:~/bin/
|
8
|
+
|
9
|
+
# fetch proxy container and proxy configuration
|
10
|
+
gsutil cp gs://<bucket_name>/proxy/<branch>_proxy.conf .
|
11
|
+
docker run -d --name <app_name>_proxy -p 80:80 -v `pwd`/<branch>_proxy.conf:/etc/nginx/sites-enabled/default vjftw/nginx
|
12
|
+
|
3
13
|
gsutil cp gs://<bucket_name>/docker-compose/<primary_yaml> .
|
4
14
|
gsutil cp gs://<bucket_name>/docker-compose/<backup_yaml> .
|
5
15
|
|
6
16
|
# Pull Primary Containers and start them (faster service availability)
|
7
|
-
docker-compose pull -p <app_name> -f <primary_yaml>
|
8
|
-
docker-compose up -p <app_name> -f <primary_yaml> -d
|
17
|
+
docker-compose pull -p <app_name>_primary -f <primary_yaml>
|
18
|
+
docker-compose up -p <app_name>_primary -f <primary_yaml> -d
|
9
19
|
|
10
20
|
# Pull Backup containers and start them
|
11
|
-
docker-compose pull -p <app_name> -f <backup_yaml>
|
12
|
-
docker-compose up -p <app_name> -f <backup_yaml> -d
|
21
|
+
docker-compose pull -p <app_name>_backup -f <backup_yaml>
|
22
|
+
docker-compose up -p <app_name>_backup -f <backup_yaml> -d
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-publish
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- VJ Patel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gcloud
|
@@ -42,8 +42,11 @@ files:
|
|
42
42
|
- lib/deploy/deploy.rb
|
43
43
|
- lib/deploy/docker_compose.rb
|
44
44
|
- lib/docker_publish.rb
|
45
|
+
- lib/infrastructure/google_cloud_platform/google_cloud_compute.rb
|
45
46
|
- lib/infrastructure/google_cloud_platform/google_cloud_platform.rb
|
47
|
+
- lib/infrastructure/google_cloud_platform/google_cloud_replica_pool.rb
|
46
48
|
- lib/infrastructure/google_cloud_platform/google_cloud_storage.rb
|
49
|
+
- lib/infrastructure/google_cloud_platform/instance-template.json.dist
|
47
50
|
- lib/infrastructure/google_cloud_platform/startup.sh.dist
|
48
51
|
- lib/infrastructure/infrastructure.rb
|
49
52
|
homepage: http://rubygems.org/gems/docker-publish
|