fog-linode 0.0.1.rc1
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 +7 -0
- data/.gitignore +8 -0
- data/.rubocop.yml +12 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +17 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/CONTRIBUTORS.md +1 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +79 -0
- data/LICENSE.md +20 -0
- data/README.md +74 -0
- data/Rakefile +13 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/fog-linode.gemspec +34 -0
- data/lib/fog/linode.rb +17 -0
- data/lib/fog/linode/compute.rb +50 -0
- data/lib/fog/linode/compute/models/image.rb +23 -0
- data/lib/fog/linode/compute/models/images.rb +23 -0
- data/lib/fog/linode/compute/models/kernel.rb +19 -0
- data/lib/fog/linode/compute/models/kernels.rb +23 -0
- data/lib/fog/linode/compute/models/region.rb +14 -0
- data/lib/fog/linode/compute/models/regions.rb +23 -0
- data/lib/fog/linode/compute/models/server.rb +56 -0
- data/lib/fog/linode/compute/models/servers.rb +23 -0
- data/lib/fog/linode/compute/models/stack_script.rb +26 -0
- data/lib/fog/linode/compute/models/stack_scripts.rb +23 -0
- data/lib/fog/linode/compute/models/type.rb +32 -0
- data/lib/fog/linode/compute/models/types.rb +23 -0
- data/lib/fog/linode/compute/requests/create_server.rb +22 -0
- data/lib/fog/linode/compute/requests/delete_server.rb +17 -0
- data/lib/fog/linode/compute/requests/list_images.rb +16 -0
- data/lib/fog/linode/compute/requests/list_kernels.rb +16 -0
- data/lib/fog/linode/compute/requests/list_regions.rb +18 -0
- data/lib/fog/linode/compute/requests/list_servers.rb +16 -0
- data/lib/fog/linode/compute/requests/list_stack_scripts.rb +16 -0
- data/lib/fog/linode/compute/requests/list_types.rb +19 -0
- data/lib/fog/linode/compute/requests/update_server.rb +21 -0
- data/lib/fog/linode/compute/requests/view_image.rb +17 -0
- data/lib/fog/linode/compute/requests/view_kernel.rb +17 -0
- data/lib/fog/linode/compute/requests/view_region.rb +18 -0
- data/lib/fog/linode/compute/requests/view_server.rb +17 -0
- data/lib/fog/linode/compute/requests/view_stack_script.rb +17 -0
- data/lib/fog/linode/compute/requests/view_type.rb +18 -0
- data/lib/fog/linode/dns.rb +37 -0
- data/lib/fog/linode/dns/models/domain.rb +46 -0
- data/lib/fog/linode/dns/models/domain_record.rb +38 -0
- data/lib/fog/linode/dns/models/domain_records.rb +30 -0
- data/lib/fog/linode/dns/models/domains.rb +23 -0
- data/lib/fog/linode/dns/requests/create_domain.rb +22 -0
- data/lib/fog/linode/dns/requests/create_domain_record.rb +22 -0
- data/lib/fog/linode/dns/requests/delete_domain.rb +17 -0
- data/lib/fog/linode/dns/requests/delete_domain_record.rb +17 -0
- data/lib/fog/linode/dns/requests/list_domain_records.rb +19 -0
- data/lib/fog/linode/dns/requests/list_domains.rb +19 -0
- data/lib/fog/linode/dns/requests/update_domain.rb +21 -0
- data/lib/fog/linode/dns/requests/update_domain_record.rb +22 -0
- data/lib/fog/linode/dns/requests/view_domain.rb +18 -0
- data/lib/fog/linode/dns/requests/view_domain_record.rb +17 -0
- data/lib/fog/linode/paginated_collection.rb +44 -0
- data/lib/fog/linode/service.rb +37 -0
- data/lib/fog/linode/version.rb +5 -0
- metadata +247 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'fog/linode/paginated_collection'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Linode
|
5
|
+
class Compute
|
6
|
+
# This class provides the actual implementation for service calls
|
7
|
+
class Real
|
8
|
+
include PaginatedCollection
|
9
|
+
|
10
|
+
def list_stack_scripts(options = {})
|
11
|
+
make_paginated_request('linode/stackscripts', options)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
class Compute
|
4
|
+
# This class provides the actual implementation for service calls
|
5
|
+
class Real
|
6
|
+
def list_types(options = {})
|
7
|
+
response = request(
|
8
|
+
expects: [200],
|
9
|
+
method: 'GET',
|
10
|
+
path: 'linode/types',
|
11
|
+
query: options
|
12
|
+
)
|
13
|
+
|
14
|
+
response.body['data']
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
class Compute
|
4
|
+
# This class provides the actual implementation for service calls
|
5
|
+
class Real
|
6
|
+
def update_server(id, options = {})
|
7
|
+
response = request(
|
8
|
+
expects: [200],
|
9
|
+
method: 'PUT',
|
10
|
+
path: "linode/instances/#{id}",
|
11
|
+
body: Fog::JSON.encode(options),
|
12
|
+
headers: {
|
13
|
+
'Content-Type' => 'application/json'
|
14
|
+
}
|
15
|
+
)
|
16
|
+
response.body
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
class Compute
|
4
|
+
# This class provides the actual implementation for service calls
|
5
|
+
class Real
|
6
|
+
def view_image(id)
|
7
|
+
response = request(
|
8
|
+
expects: [200],
|
9
|
+
method: 'GET',
|
10
|
+
path: "images/#{id}"
|
11
|
+
)
|
12
|
+
response.body
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
class Compute
|
4
|
+
# This class provides the actual implementation for service calls
|
5
|
+
class Real
|
6
|
+
def view_kernel(id)
|
7
|
+
response = request(
|
8
|
+
expects: [200],
|
9
|
+
method: 'GET',
|
10
|
+
path: "linode/kernels/#{id}"
|
11
|
+
)
|
12
|
+
response.body
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
class Compute
|
4
|
+
# This class provides the actual implementation for service calls
|
5
|
+
class Real
|
6
|
+
def view_region(id)
|
7
|
+
response = request(
|
8
|
+
expects: [200],
|
9
|
+
method: 'GET',
|
10
|
+
path: "regions/#{id}"
|
11
|
+
)
|
12
|
+
|
13
|
+
response.body
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
class Compute
|
4
|
+
# This class provides the actual implementation for service calls
|
5
|
+
class Real
|
6
|
+
def view_server(id)
|
7
|
+
response = request(
|
8
|
+
expects: [200],
|
9
|
+
method: 'GET',
|
10
|
+
path: "linode/instances/#{id}"
|
11
|
+
)
|
12
|
+
response.body
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
class Compute
|
4
|
+
# This class provides the actual implementation for service calls
|
5
|
+
class Real
|
6
|
+
def view_stack_script(id)
|
7
|
+
response = request(
|
8
|
+
expects: [200],
|
9
|
+
method: 'GET',
|
10
|
+
path: "linode/stackscripts/#{id}"
|
11
|
+
)
|
12
|
+
response.body
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
class Compute
|
4
|
+
# This class provides the actual implementation for service calls
|
5
|
+
class Real
|
6
|
+
def view_type(id, options = {})
|
7
|
+
response = request(
|
8
|
+
expects: [200],
|
9
|
+
method: 'GET',
|
10
|
+
path: "linode/types/#{id}",
|
11
|
+
query: options
|
12
|
+
)
|
13
|
+
response.body
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
# Fog service class for Linode DNS service
|
4
|
+
class DNS < Fog::Service
|
5
|
+
requires :linode_token
|
6
|
+
|
7
|
+
request_path 'fog/linode/dns/requests'
|
8
|
+
request :create_domain
|
9
|
+
request :list_domains
|
10
|
+
request :view_domain
|
11
|
+
request :update_domain
|
12
|
+
request :delete_domain
|
13
|
+
request :create_domain_record
|
14
|
+
request :list_domain_records
|
15
|
+
request :view_domain_record
|
16
|
+
request :update_domain_record
|
17
|
+
request :delete_domain_record
|
18
|
+
|
19
|
+
model_path 'fog/linode/dns/models'
|
20
|
+
collection :domains
|
21
|
+
model :domain
|
22
|
+
collection :domain_records
|
23
|
+
model :domain_record
|
24
|
+
|
25
|
+
# Real implementation for Linode DNS service
|
26
|
+
class Real < Service
|
27
|
+
end
|
28
|
+
|
29
|
+
# Mock service for unit tests
|
30
|
+
# NOTE: we do not currently use this, but Fog throws an
|
31
|
+
# error if it's not defined for a Service class
|
32
|
+
class Mock
|
33
|
+
def initialize(_options = {}); end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'fog/core/model'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Linode
|
5
|
+
class DNS
|
6
|
+
# Read-only model for Linode instance types
|
7
|
+
class Domain < Fog::Model
|
8
|
+
identity :id
|
9
|
+
|
10
|
+
attribute :type
|
11
|
+
attribute :domain
|
12
|
+
attribute :group
|
13
|
+
attribute :description
|
14
|
+
attribute :status
|
15
|
+
attribute :soa_email
|
16
|
+
attribute :retry_sec
|
17
|
+
attribute :master_ips
|
18
|
+
attribute :axfr_ips
|
19
|
+
attribute :expire_sec
|
20
|
+
attribute :refresh_sec
|
21
|
+
attribute :ttl_sec
|
22
|
+
attribute :tags
|
23
|
+
|
24
|
+
def save
|
25
|
+
options = clean_attributes
|
26
|
+
if identity.nil?
|
27
|
+
merge_attributes(service.create_domain(options))
|
28
|
+
else
|
29
|
+
merge_attributes(service.update_domain(identity, options))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
# The API returns "" for group, but does not accept that
|
36
|
+
# value, so we have to remove it to avoid errors on update
|
37
|
+
def clean_attributes
|
38
|
+
return attributes if group.nil? || !group.empty?
|
39
|
+
|
40
|
+
filtered_attributes = attributes.dup
|
41
|
+
filtered_attributes.delete(:group)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'fog/core/model'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Linode
|
5
|
+
class DNS
|
6
|
+
# Model for Linode domain records
|
7
|
+
class DomainRecord < Fog::Model
|
8
|
+
identity :id
|
9
|
+
|
10
|
+
attribute :domain_id
|
11
|
+
attribute :type
|
12
|
+
attribute :name
|
13
|
+
attribute :target
|
14
|
+
attribute :priority
|
15
|
+
attribute :weight
|
16
|
+
attribute :port
|
17
|
+
attribute :service
|
18
|
+
attribute :protocol
|
19
|
+
attribute :ttl_sec
|
20
|
+
attribute :tag
|
21
|
+
|
22
|
+
# The `service` attribute of a Domain Record conflicts with the `service`
|
23
|
+
# attribute of `Fog::Model`. As a result, the `service` attribute for
|
24
|
+
# this model class _does not represent_ the Linode API. To work around
|
25
|
+
# this, all API interactions for this model have to go through
|
26
|
+
# `collection.service` instead of `service`.
|
27
|
+
def save
|
28
|
+
service = collection.service
|
29
|
+
if identity.nil?
|
30
|
+
merge_attributes(service.create_domain_record(domain_id, attributes))
|
31
|
+
else
|
32
|
+
merge_attributes(service.update_domain_record(domain_id, identity, attributes))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
require 'fog/linode/compute/models/type'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Linode
|
6
|
+
class DNS
|
7
|
+
# Collection class for loading Type models from Linode instance type data
|
8
|
+
class DomainRecords < Fog::Collection
|
9
|
+
model DomainRecord
|
10
|
+
|
11
|
+
def all(domain_id, options = {})
|
12
|
+
domain_records = service.list_domain_records(domain_id, options)
|
13
|
+
load(domain_records.map { |domain_record| add_domain_id(domain_id, domain_record) })
|
14
|
+
end
|
15
|
+
|
16
|
+
def get(domain_id, domain_record_id)
|
17
|
+
domain_record = service.view_domain_record(domain_id, domain_record_id)
|
18
|
+
new add_domain_id(domain_id, domain_record)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def add_domain_id(domain_id, domain_record)
|
24
|
+
domain_record['domain_id'] = domain_id
|
25
|
+
domain_record
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
require 'fog/linode/compute/models/type'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Linode
|
6
|
+
class DNS
|
7
|
+
# Collection class for loading Type models from Linode instance type data
|
8
|
+
class Domains < Fog::Collection
|
9
|
+
model Domain
|
10
|
+
|
11
|
+
def all(options = {})
|
12
|
+
domains = service.list_domains(options)
|
13
|
+
load domains
|
14
|
+
end
|
15
|
+
|
16
|
+
def get(id)
|
17
|
+
domain = service.view_domain(id)
|
18
|
+
new domain
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
class DNS
|
4
|
+
# This class provides the actual implementation for service calls
|
5
|
+
class Real
|
6
|
+
def create_domain(options = {})
|
7
|
+
response = request(
|
8
|
+
expects: [200],
|
9
|
+
method: 'POST',
|
10
|
+
path: 'domains',
|
11
|
+
body: Fog::JSON.encode(options),
|
12
|
+
headers: {
|
13
|
+
'Content-Type' => 'application/json'
|
14
|
+
}
|
15
|
+
)
|
16
|
+
|
17
|
+
response.body
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
class DNS
|
4
|
+
# This class provides the actual implementation for service calls
|
5
|
+
class Real
|
6
|
+
def create_domain_record(domain_id, options = {})
|
7
|
+
response = request(
|
8
|
+
expects: [200],
|
9
|
+
method: 'POST',
|
10
|
+
path: "domains/#{domain_id}/records",
|
11
|
+
body: Fog::JSON.encode(options),
|
12
|
+
headers: {
|
13
|
+
'Content-Type' => 'application/json'
|
14
|
+
}
|
15
|
+
)
|
16
|
+
|
17
|
+
response.body
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
class DNS
|
4
|
+
# This class provides the actual implementation for service calls
|
5
|
+
class Real
|
6
|
+
def delete_domain(id)
|
7
|
+
response = request(
|
8
|
+
expects: [200],
|
9
|
+
method: 'DELETE',
|
10
|
+
path: "domains/#{id}"
|
11
|
+
)
|
12
|
+
response.body
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Fog
|
2
|
+
module Linode
|
3
|
+
class DNS
|
4
|
+
# This class provides the actual implementation for service calls
|
5
|
+
class Real
|
6
|
+
def delete_domain_record(domain_id, domain_record_id)
|
7
|
+
response = request(
|
8
|
+
expects: [200],
|
9
|
+
method: 'DELETE',
|
10
|
+
path: "domains/#{domain_id}/records/#{domain_record_id}"
|
11
|
+
)
|
12
|
+
response.body
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|