docker_cloud 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +43 -0
  5. data/.travis.yml +4 -0
  6. data/CODE_OF_CONDUCT.md +49 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +81 -0
  10. data/Rakefile +6 -0
  11. data/docker_cloud.gemspec +31 -0
  12. data/lib/docker_cloud.rb +107 -0
  13. data/lib/docker_cloud/api/api.rb +57 -0
  14. data/lib/docker_cloud/api/availability_zone_api.rb +23 -0
  15. data/lib/docker_cloud/api/container_api.rb +38 -0
  16. data/lib/docker_cloud/api/external_repository_api.rb +34 -0
  17. data/lib/docker_cloud/api/node_api.rb +27 -0
  18. data/lib/docker_cloud/api/node_cluster_api.rb +46 -0
  19. data/lib/docker_cloud/api/node_type_api.rb +23 -0
  20. data/lib/docker_cloud/api/provider_api.rb +19 -0
  21. data/lib/docker_cloud/api/region_api.rb +24 -0
  22. data/lib/docker_cloud/api/registry_api.rb +19 -0
  23. data/lib/docker_cloud/api/service_api.rb +53 -0
  24. data/lib/docker_cloud/api/stack_api.rb +53 -0
  25. data/lib/docker_cloud/availability_zone.rb +19 -0
  26. data/lib/docker_cloud/container.rb +204 -0
  27. data/lib/docker_cloud/external_repository.rb +20 -0
  28. data/lib/docker_cloud/helpers.rb +33 -0
  29. data/lib/docker_cloud/node.rb +99 -0
  30. data/lib/docker_cloud/node_cluster.rb +67 -0
  31. data/lib/docker_cloud/node_type.rb +38 -0
  32. data/lib/docker_cloud/provider.rb +31 -0
  33. data/lib/docker_cloud/region.rb +28 -0
  34. data/lib/docker_cloud/registry.rb +27 -0
  35. data/lib/docker_cloud/service.rb +235 -0
  36. data/lib/docker_cloud/stack.rb +42 -0
  37. data/lib/docker_cloud/type.rb +19 -0
  38. data/lib/docker_cloud/version.rb +3 -0
  39. metadata +193 -0
@@ -0,0 +1,38 @@
1
+ module DockerCloud
2
+ class ContainerAPI < DockerCloud::API
3
+ TYPE = 'Container'.freeze
4
+
5
+ def resource_url(params = '')
6
+ "/container/#{params}"
7
+ end
8
+
9
+ def all(params = {})
10
+ response = http_get(resource_url, params)
11
+ format_object(response, TYPE)
12
+ end
13
+
14
+ def get(uuid)
15
+ http_get(resource_url(uuid))
16
+ format_object(response, TYPE)
17
+ end
18
+
19
+ def start(uuid)
20
+ url = "#{uuid}/start/"
21
+ http_post(resource_url(url))
22
+ end
23
+
24
+ def stop(uuid)
25
+ url = "#{uuid}/stop/"
26
+ http_post(resource_url(url))
27
+ end
28
+
29
+ def logs(uuid)
30
+ url = "#{uuid}/logs/"
31
+ http_get(resource_url(url))
32
+ end
33
+
34
+ def terminate(uuid)
35
+ http_terminate(resource_url(uuid))
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,34 @@
1
+ module DockerCloud
2
+ class ExternalRepositoryAPI < DockerCloud::API
3
+ TYPE = 'ExternalRepository'.freeze
4
+
5
+ def resource_url(name = '')
6
+ "/repository/#{name}"
7
+ end
8
+
9
+ def all(params = {})
10
+ response = http_get(resource_url, params)
11
+ format_object(response, TYPE)
12
+ end
13
+
14
+ def create(params)
15
+ response = http_post(resource_url, params)
16
+ format_object(response, TYPE)
17
+ end
18
+
19
+ def get(name)
20
+ response = http_get(resource_url(name))
21
+ format_object(response, TYPE)
22
+ end
23
+
24
+ def update(name, params)
25
+ response = http_patch(resource_url(name), params)
26
+ format_object(response, TYPE)
27
+ end
28
+
29
+ def delete(name, user, image)
30
+ url = "#{name}/#{user}/#{image}"
31
+ http_delete(resource_url(url))
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,27 @@
1
+ module DockerCloud
2
+ class NodeAPI < DockerCloud::API
3
+ TYPE = 'Node'.freeze
4
+
5
+ def resource_url(params = '')
6
+ "/node/#{params}"
7
+ end
8
+
9
+ def all(params = {})
10
+ response = http_get(resource_url, params)
11
+ format_object(response, TYPE)
12
+ end
13
+
14
+ def get(uuid)
15
+ response = http_get(resource_url(uuid))
16
+ format_object(response, TYPE)
17
+ end
18
+
19
+ def deploy(uuid)
20
+ http_post(resource_url("#{uuid}/deploy"))
21
+ end
22
+
23
+ def terminate(uuid)
24
+ http_delete(resource_url(uuid))
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,46 @@
1
+ module DockerCloud
2
+ class NodeClusterAPI < DockerCloud::API
3
+ TYPE = 'NodeCluster'.freeze
4
+
5
+ def resource_url(params = '')
6
+ "/nodecluster/#{params}"
7
+ end
8
+
9
+ def all(params = {})
10
+ response = http_get(resource_url, params)
11
+ format_object(response, TYPE)
12
+ end
13
+
14
+ # Create Params:
15
+ # name (required): name for node cluster
16
+ # node_type (required): type of node to be used for the cluster
17
+ # region (reguired): resource URI of the region where node cluster is to be deployed
18
+ # disk (optional): Size of the volume to create
19
+ # nickname (optional)
20
+ # target_num_nodes (optional): Number of nodes for the cluster. default: 1
21
+ # tags (optional): default []
22
+ # provider_options
23
+ def create(params)
24
+ response = http_post(resource_url, params)
25
+ format_object(response, TYPE)
26
+ end
27
+
28
+ def get(uuid)
29
+ response = http_get(resource_url(uuid))
30
+ format_object(response, TYPE)
31
+ end
32
+
33
+ def update(uuid, params)
34
+ response = http_patch(resource_url(uuid), params)
35
+ format_object(response, TYPE)
36
+ end
37
+
38
+ def deploy(uuid)
39
+ http_post(resource_url("#{uuid}/deploy"))
40
+ end
41
+
42
+ def terminate(uuid)
43
+ http_delete(resource_url(uuid))
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,23 @@
1
+ module DockerCloud
2
+ class NodeTypeAPI < DockerCloud::API
3
+ TYPE = 'NodeType'.freeze
4
+
5
+ def resource_url(name = '')
6
+ "/nodetype/#{name}"
7
+ end
8
+
9
+ # Lists all node types of all supported cloud providers
10
+ # Returns a list of NodeType objects
11
+ def all(params = {})
12
+ response = http_get(resource_url, params)
13
+ format_object(response, TYPE)
14
+ end
15
+
16
+ # Returns the details of a specific NodeType
17
+ def get(provider_name, node_type_name)
18
+ name = "#{provider_name}/#{node_type_name}"
19
+ response = http_get(resource_url(name))
20
+ format_object(response, TYPE)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ module DockerCloud
2
+ class ProviderAPI < DockerCloud::API
3
+ TYPE = 'Provider'.freeze
4
+
5
+ def resource_url(name = '')
6
+ "/provider/#{name}"
7
+ end
8
+
9
+ def all(params = {})
10
+ response = http_get(resource_url, params)
11
+ format_object(response, TYPE)
12
+ end
13
+
14
+ def get(name)
15
+ response = http_get(resource_url(name))
16
+ format_object(response, TYPE)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ module DockerCloud
2
+ class RegionAPI < DockerCloud::API
3
+ TYPE = 'Region'.freeze
4
+
5
+ def resource_url(provider_region = '')
6
+ "/region/#{provider_region}"
7
+ end
8
+
9
+ # Lists all regions of all supported cloud providers.
10
+ # Returns a list of Region objects
11
+ def all(params = {})
12
+ response = http_get(resource_url, params)
13
+ format_object(response, TYPE)
14
+ end
15
+
16
+ # Gets all the details of a specific region for a specific provider
17
+ # Returns a Region object
18
+ def get(provider_name, region_name)
19
+ provider_region = "#{provider_name}/#{region_name}"
20
+ response = http_get(resource_url(provider_region))
21
+ format_object(response, TYPE)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ module DockerCloud
2
+ class RegistryAPI < DockerCloud::API
3
+ TYPE = 'Registry'.freeze
4
+
5
+ def resource_url(host = '')
6
+ "/registry/#{host}"
7
+ end
8
+
9
+ def all(params = {})
10
+ response = http_get(resource_url, params)
11
+ format_object(response, TYPE)
12
+ end
13
+
14
+ def get(host)
15
+ response = http_get(resource_url(host))
16
+ format_object(response, TYPE)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,53 @@
1
+ module DockerCloud
2
+ class ServiceAPI < DockerCloud::API
3
+ TYPE = 'Service'.freeze
4
+
5
+ def resource_url(params = '')
6
+ "/service/#{params}"
7
+ end
8
+
9
+ def all(params = {})
10
+ response = http_get(resource_url, params)
11
+ format_object(response, TYPE)
12
+ end
13
+
14
+ def create(params)
15
+ response = http_post(resource_url, params)
16
+ format_object(response, TYPE)
17
+ end
18
+
19
+ def get(uuid)
20
+ response = http_get(resource_url(uuid))
21
+ format_object(response, TYPE)
22
+ end
23
+
24
+ def logs(uuid)
25
+ url = "#{uuid}/logs"
26
+ http_get(resource_url(url))
27
+ end
28
+
29
+ def update(uuid, params)
30
+ response = http_patch(resource_url(uuid), params)
31
+ format_object(response, TYPE)
32
+ end
33
+
34
+ def start(uuid)
35
+ url = "#{uuid}/start/"
36
+ http_post(resource_url(url))
37
+ end
38
+
39
+ def stop(uuid)
40
+ url = "#{uuid}/stop/"
41
+ http_post(resource_url(url))
42
+ end
43
+
44
+ def redeploy(uuid)
45
+ url = "#{uuid}/redeploy/"
46
+ http_post(resource_url(url))
47
+ end
48
+
49
+ def terminate(uuid)
50
+ http_delete(resource_url(uuid))
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,53 @@
1
+ module DockerCloud
2
+ class StackAPI < DockerCloud::API
3
+ TYPE = 'Stack'.freeze
4
+
5
+ def resource_url(name = '')
6
+ "/stack/#{name}"
7
+ end
8
+
9
+ def all(params = {})
10
+ response = http_get(resource_url, params)
11
+ format_object(response, TYPE)
12
+ end
13
+
14
+ def get(uuid)
15
+ response = http_get(resource_url(uuid))
16
+ format_object(response, TYPE)
17
+ end
18
+
19
+ def create(params)
20
+ response = http_post(resource_url, params)
21
+ format_object(response, TYPE)
22
+ end
23
+
24
+ def export(uuid)
25
+ url = "#{uuid}/export/"
26
+ http_get(resource_url(url))
27
+ end
28
+
29
+ def update(uuid, params)
30
+ response = http_patch(resource_url(uuid), params)
31
+ format_object(response, TYPE)
32
+ end
33
+
34
+ def stop(uuid)
35
+ url = "#{uuid}/stop"
36
+ http_post(resource_url(url))
37
+ end
38
+
39
+ def start(uuid)
40
+ url = "#{uuid}/start"
41
+ http_post(resource_url(url))
42
+ end
43
+
44
+ def redeploy(uuid)
45
+ url = "#{uuid}/redeploy"
46
+ http_post(resource_url(url))
47
+ end
48
+
49
+ def terminate(uuid)
50
+ http_delete(resource_url(uuid))
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,19 @@
1
+ module DockerCloud
2
+ class AvailabilityZone < DockerCloud::Type
3
+ def resource_uri
4
+ info[:resource_uri]
5
+ end
6
+
7
+ def name
8
+ info[:name]
9
+ end
10
+
11
+ def available
12
+ info[:available]
13
+ end
14
+
15
+ def region
16
+ @region ||= client.regions.get_from_uri(info[:region]) unless info[:region].nil?
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,204 @@
1
+ module DockerCloud
2
+ class Container < DockerCloud::Type
3
+ def resource_uri
4
+ info[:resource_uri]
5
+ end
6
+
7
+ def image_name
8
+ info[:image_name]
9
+ end
10
+
11
+ def bindings
12
+ info[:bindings]
13
+ end
14
+
15
+ def name
16
+ info[:name]
17
+ end
18
+
19
+ # def service; info[:service]; end
20
+ def service
21
+ @service ||= client.services.get_from_uri(info[:service]) unless info[:service].nil?
22
+ end
23
+
24
+ def public_dns
25
+ info[:public_dns]
26
+ end
27
+
28
+ def state
29
+ info[:state]
30
+ end
31
+
32
+ def synchronized
33
+ info[:state]
34
+ end
35
+
36
+ def exit_code
37
+ info[:exit_code]
38
+ end
39
+
40
+ def exit_code_msg
41
+ info[:exit_code_msg]
42
+ end
43
+
44
+ def deployed_date
45
+ info[:deployed_datetime]
46
+ end
47
+
48
+ def started_date
49
+ info[:started_datetime]
50
+ end
51
+
52
+ def stopped_date
53
+ info[:stopped_datetime]
54
+ end
55
+
56
+ def destroyed_date
57
+ info[:destroyed_datetime]
58
+ end
59
+
60
+ def env_vars
61
+ info[:container_envvars]
62
+ end
63
+
64
+ def labels
65
+ info[:labels]
66
+ end
67
+
68
+ def working_dir
69
+ info[:working_dir]
70
+ end
71
+
72
+ def user
73
+ info[:user]
74
+ end
75
+
76
+ def host_name
77
+ info[:hostname]
78
+ end
79
+
80
+ def domain_name
81
+ info[:domainname]
82
+ end
83
+
84
+ def mac_address
85
+ info[:mac_address]
86
+ end
87
+
88
+ def cgroup_name
89
+ info[:cgroup_name]
90
+ end
91
+
92
+ def tty
93
+ info[:tty]
94
+ end
95
+
96
+ def stdin_open
97
+ info[:stdin_open]
98
+ end
99
+
100
+ def dns
101
+ info[:dns]
102
+ end
103
+
104
+ def dns_search
105
+ info[:dns_search]
106
+ end
107
+
108
+ def cap_add
109
+ info[:cap_add]
110
+ end
111
+
112
+ def cap_drop
113
+ info[:cap_drop]
114
+ end
115
+
116
+ def devices
117
+ info[:devices]
118
+ end
119
+
120
+ def extra_hosts
121
+ info[:extra_hosts]
122
+ end
123
+
124
+ def security_opt
125
+ info[:security_opt]
126
+ end
127
+
128
+ def entry_point
129
+ info[:entrypoint]
130
+ end
131
+
132
+ def run_command
133
+ info[:run_command]
134
+ end
135
+
136
+ def cpu_shares
137
+ info[:cpu_shares]
138
+ end
139
+
140
+ def cpuset
141
+ info[:cpuset]
142
+ end
143
+
144
+ def memory
145
+ info[:memory]
146
+ end
147
+
148
+ def memory_swap
149
+ info[:memory_swap]
150
+ end
151
+
152
+ def last_metric
153
+ info[:last_metric]
154
+ end
155
+
156
+ def autorestart
157
+ info[:autorestart]
158
+ end
159
+
160
+ def autodestroy
161
+ info[:autodestroy]
162
+ end
163
+
164
+ def roles
165
+ info[:roles]
166
+ end
167
+
168
+ def linked_to_container
169
+ info[:linked_to_container]
170
+ end
171
+
172
+ def link_variables
173
+ info[:link_variables]
174
+ end
175
+
176
+ def privileged
177
+ info[privileged]
178
+ end
179
+
180
+ def read_only
181
+ info[:read_only]
182
+ end
183
+
184
+ def private_ip
185
+ info[:private_ip]
186
+ end
187
+
188
+ def net
189
+ info[:net]
190
+ end
191
+
192
+ def pid
193
+ info[:pid]
194
+ end
195
+
196
+ def container_ports
197
+ @container_ports ||= ContainerPorts.new(info[:container_ports])
198
+ end
199
+
200
+ def node
201
+ @node ||= client.nodes.get_from_uri(info[:node]) unless info[:node].nil?
202
+ end
203
+ end
204
+ end