idcf-ilb 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +93 -0
  5. data/.travis.yml +9 -0
  6. data/CODE_OF_CONDUCT.md +49 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +111 -0
  10. data/Rakefile +6 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/idcf-ilb.gemspec +29 -0
  14. data/lib/idcf/ilb.rb +13 -0
  15. data/lib/idcf/ilb/client.rb +180 -0
  16. data/lib/idcf/ilb/client_extensions.rb +24 -0
  17. data/lib/idcf/ilb/client_extensions/config.rb +97 -0
  18. data/lib/idcf/ilb/client_extensions/fwgroup.rb +57 -0
  19. data/lib/idcf/ilb/client_extensions/job.rb +75 -0
  20. data/lib/idcf/ilb/client_extensions/limit.rb +24 -0
  21. data/lib/idcf/ilb/client_extensions/loadbalancer.rb +79 -0
  22. data/lib/idcf/ilb/client_extensions/log.rb +30 -0
  23. data/lib/idcf/ilb/client_extensions/network.rb +26 -0
  24. data/lib/idcf/ilb/client_extensions/server.rb +46 -0
  25. data/lib/idcf/ilb/client_extensions/sslalgorithm.rb +43 -0
  26. data/lib/idcf/ilb/client_extensions/sslcert.rb +79 -0
  27. data/lib/idcf/ilb/client_extensions/sslpolicy.rb +58 -0
  28. data/lib/idcf/ilb/client_extensions/traffic.rb +35 -0
  29. data/lib/idcf/ilb/client_extensions/virtualmachine.rb +29 -0
  30. data/lib/idcf/ilb/errors.rb +10 -0
  31. data/lib/idcf/ilb/request.rb +97 -0
  32. data/lib/idcf/ilb/resources.rb +22 -0
  33. data/lib/idcf/ilb/resources/base.rb +60 -0
  34. data/lib/idcf/ilb/resources/config.rb +21 -0
  35. data/lib/idcf/ilb/resources/fwgroup.rb +16 -0
  36. data/lib/idcf/ilb/resources/job.rb +16 -0
  37. data/lib/idcf/ilb/resources/limit.rb +13 -0
  38. data/lib/idcf/ilb/resources/loadbalancer.rb +16 -0
  39. data/lib/idcf/ilb/resources/log.rb +13 -0
  40. data/lib/idcf/ilb/resources/network.rb +9 -0
  41. data/lib/idcf/ilb/resources/nic.rb +13 -0
  42. data/lib/idcf/ilb/resources/server.rb +9 -0
  43. data/lib/idcf/ilb/resources/sslalgorithm.rb +21 -0
  44. data/lib/idcf/ilb/resources/sslcert.rb +16 -0
  45. data/lib/idcf/ilb/resources/sslpolicy.rb +23 -0
  46. data/lib/idcf/ilb/resources/traffic.rb +9 -0
  47. data/lib/idcf/ilb/resources/virtualmachine.rb +13 -0
  48. data/lib/idcf/ilb/response.rb +84 -0
  49. data/lib/idcf/ilb/validators.rb +22 -0
  50. data/lib/idcf/ilb/validators/base.rb +105 -0
  51. data/lib/idcf/ilb/validators/config.rb +27 -0
  52. data/lib/idcf/ilb/validators/fwgroup.rb +17 -0
  53. data/lib/idcf/ilb/validators/job.rb +18 -0
  54. data/lib/idcf/ilb/validators/limit.rb +17 -0
  55. data/lib/idcf/ilb/validators/loadbalancer.rb +26 -0
  56. data/lib/idcf/ilb/validators/log.rb +22 -0
  57. data/lib/idcf/ilb/validators/network.rb +25 -0
  58. data/lib/idcf/ilb/validators/server.rb +13 -0
  59. data/lib/idcf/ilb/validators/sslalgorithm.rb +14 -0
  60. data/lib/idcf/ilb/validators/sslcert.rb +24 -0
  61. data/lib/idcf/ilb/validators/sslpolicy.rb +17 -0
  62. data/lib/idcf/ilb/validators/traffic.rb +14 -0
  63. data/lib/idcf/ilb/validators/virtualmachine.rb +26 -0
  64. data/lib/idcf/ilb/version.rb +5 -0
  65. metadata +232 -0
@@ -0,0 +1,16 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Fwgroup resource class
5
+ class Fwgroup < Base
6
+ # Refresh this fwgroup
7
+ #
8
+ # @return [Fwgroup] self object
9
+ def refresh
10
+ self.attributes = client.get_fwgroup(id).body
11
+ self
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Job resource class
5
+ class Job < Base
6
+ # Refresh this job
7
+ #
8
+ # @return [Job] self object
9
+ def refresh
10
+ self.attributes = client.get_job(id).body
11
+ self
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Limit resource class
5
+ class Limit < Base
6
+ # Inspect this class
7
+ def inspect
8
+ "#<#{self.class}:0x%014x>" % [object_id]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Loadbalancer resource class
5
+ class Loadbalancer < Base
6
+ # Refresh this loadbalancer
7
+ #
8
+ # @return [Loadbalancer] self object
9
+ def refresh
10
+ self.attributes = client.get_loadbalancer(id).body
11
+ self
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Log resource class
5
+ class Log < Base
6
+ # Inspect this class
7
+ def inspect
8
+ "#<#{self.class}:0x%014x @user_id=#{user_id} @level=#{level}>" % [object_id]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Network resource class
5
+ class Network < Base
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Nic resource class
5
+ class Nic < Base
6
+ # Inspect this class
7
+ def inspect
8
+ "#<#{self.class}:0x%014x @id=#{id} @network_name=#{network_name}>" % [object_id]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Server resource class
5
+ class Server < Base
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Sslalgorithm resource class
5
+ class Sslalgorithm < Base
6
+ # Refresh this sslalgorithm
7
+ #
8
+ # @return [Sslalgorithm] self object
9
+ def refresh
10
+ self.attributes = client.get_sslalgorithm(id).body
11
+ self
12
+ end
13
+
14
+ # Inspect this class
15
+ def inspect
16
+ "#<#{self.class}:0x%014x @protocol=#{protocol} @cipher=#{cipher} @id=#{id}>" % [object_id]
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Sslcert resource class
5
+ class Sslcert < Base
6
+ # Refresh this sslcert
7
+ #
8
+ # @return [Sslcert] self object
9
+ def refresh
10
+ self.attributes = client.get_sslcert(id).body
11
+ self
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Sslpolicy resource class
5
+ class Sslpolicy < Base
6
+ # @return [Array<Sslpolicy>] an array of sslpolicies
7
+ def algorithms
8
+ return @algorithm_objects if @algorithm_objects
9
+ refresh
10
+ @algorithm_objects = @algorithms.map { |algo| Sslalgorithm.new(client, algo) }
11
+ end
12
+
13
+ # Refresh this sslpolicy
14
+ #
15
+ # @return [Sslpolicy] self object
16
+ def refresh
17
+ self.attributes = client.get_sslpolicy(id).body
18
+ self
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,9 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Traffic resource class
5
+ class Traffic < Base
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Resources
4
+ # Virtualmachine resource class
5
+ class Virtualmachine < Base
6
+ # Inspect this class
7
+ def inspect
8
+ "#<#{self.class}:0x%014x @id=#{id} @name=#{name} @zone_name=#{zone_name}>" % [object_id]
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,84 @@
1
+ require "forwardable"
2
+
3
+ module Idcf
4
+ module Ilb
5
+ # HTTP response
6
+ class Response
7
+ extend Forwardable
8
+
9
+ # @!attribute [r] body
10
+ # @return [Hash, Array, nil] response body as a hash,
11
+ # an array of hashes or nil.
12
+ # @!attribute [r] headers
13
+ # @return [Hash] HTTP response headers
14
+ # @!attribute [r] status
15
+ # @return [Integer] HTTP status code
16
+ attr_reader :body, :headers, :status
17
+
18
+ # @param faraday_response [Faraday::Response]
19
+ def initialize(faraday_response)
20
+ @body = faraday_response.body
21
+ @headers = faraday_response.headers
22
+ @status = faraday_response.status
23
+ end
24
+
25
+ def_delegator :@body, :[]
26
+
27
+ # Returns the number of resources.
28
+ #
29
+ # @return [Fixnum] count of resources.
30
+ def count
31
+ case body
32
+ when Array
33
+ body.size
34
+ when Hash
35
+ body.key?("uuid") ? 1 : 0
36
+ else
37
+ 0
38
+ end
39
+ end
40
+ alias size count
41
+
42
+ # Returns error message.
43
+ # When request succeed, this returns nil.
44
+ #
45
+ # @return [String] API error message
46
+ def message
47
+ if success?
48
+ nil
49
+ else
50
+ body ? self["message"] : "Resource not found."
51
+ end
52
+ end
53
+
54
+ # Returns error reference.
55
+ # When request succeed, this returns nil.
56
+ #
57
+ # @return [String] API error reference
58
+ def reference
59
+ if success?
60
+ nil
61
+ else
62
+ body ? self["reference"] : "No reference"
63
+ end
64
+ end
65
+
66
+ # Returns an array of resource hashes.
67
+ #
68
+ # @return [Array<Hash>] an array of resource hashes
69
+ def resources
70
+ body && [*body]
71
+ end
72
+
73
+ # @return [Boolean] request success?
74
+ def success?
75
+ status < 400
76
+ end
77
+
78
+ # @return [String] ID of a resource
79
+ def id
80
+ body.is_a?(Hash) && body.key?("id") ? self["id"] : nil
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,22 @@
1
+ module Idcf
2
+ module Ilb
3
+ # Validators for request attributes.
4
+ module Validators
5
+ end
6
+ end
7
+ end
8
+
9
+ require "idcf/ilb/validators/base"
10
+ require "idcf/ilb/validators/loadbalancer"
11
+ require "idcf/ilb/validators/config"
12
+ require "idcf/ilb/validators/server"
13
+ require "idcf/ilb/validators/job"
14
+ require "idcf/ilb/validators/sslcert"
15
+ require "idcf/ilb/validators/sslalgorithm"
16
+ require "idcf/ilb/validators/sslpolicy"
17
+ require "idcf/ilb/validators/fwgroup"
18
+ require "idcf/ilb/validators/network"
19
+ require "idcf/ilb/validators/virtualmachine"
20
+ require "idcf/ilb/validators/limit"
21
+ require "idcf/ilb/validators/log"
22
+ require "idcf/ilb/validators/traffic"
@@ -0,0 +1,105 @@
1
+ require "active_support/core_ext/class/attribute"
2
+
3
+ module Idcf
4
+ module Ilb
5
+ module Validators
6
+ # Base validator class
7
+ class Base
8
+ class_attribute :valid_attributes
9
+
10
+ class << self
11
+ # Validate requeste attributes.
12
+ # If there are invalid attributes, error occurs.
13
+ #
14
+ # @param attributes [Hash] request attributes
15
+ # @param action [Symbol] request method
16
+ def validate_attributes!(attributes, action = nil)
17
+ validate_presence!(attributes, action)
18
+ validate_absence!(attributes, action)
19
+ validate_any!(attributes, action)
20
+ attributes.each do |name, value|
21
+ validate_attribute!(name, value)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def required_attributes(action)
28
+ return [] unless action
29
+ valid_attributes.select do |_, validator|
30
+ validator[action] == :required
31
+ end.keys
32
+ end
33
+
34
+ def any_attributes(action)
35
+ return [] unless action
36
+ valid_attributes.select do |_, validator|
37
+ validator[action].to_s =~ /any_+/
38
+ end.keys
39
+ end
40
+
41
+ def valid_attribute?(value, valid_type)
42
+ case valid_type
43
+ when Array
44
+ valid_type.any? { |t| valid_attribute?(value, t) }
45
+ when Regexp
46
+ if value.is_a?(String)
47
+ valid_type =~ value
48
+ else
49
+ false
50
+ end
51
+ else
52
+ value.is_a?(valid_type)
53
+ end
54
+ end
55
+
56
+ def validate_absence!(attributes, action)
57
+ if action
58
+ attributes.each do |name, value|
59
+ next unless !valid_attributes[name] || !valid_attributes[name][action]
60
+ raise(UnnecessaryAttribute, "`#{name}` is unnecessary in #{action} action")
61
+ end
62
+ end
63
+ end
64
+
65
+ def validate_attribute!(name, value)
66
+ validate_attribute_name!(name)
67
+ validate_attribute_type!(name, value)
68
+ end
69
+
70
+ def validate_attribute_name!(name)
71
+ return true if valid_attributes.key?(name.to_sym)
72
+ raise(InvalidAttributeName, "`#{name}` is invalid attribute name")
73
+ end
74
+
75
+ def validate_attribute_type!(name, value)
76
+ valid_type = valid_attributes[name.to_sym][:type]
77
+ return true if valid_attribute?(value, valid_type)
78
+ raise(InvalidAttributeType, "`#{name}` is required to be a #{valid_type}")
79
+ end
80
+
81
+ def validate_presence!(attributes, action)
82
+ required_attributes(action).each do |name|
83
+ unless attributes.key?(name)
84
+ raise(MissingAttribute, "`#{name}` is required in #{action} action")
85
+ end
86
+ end
87
+ end
88
+
89
+ def validate_any!(attributes, action)
90
+ check_keys = any_attributes(action)
91
+ if check_keys.empty?
92
+ else
93
+ unless attributes.values_at(*check_keys).flatten!.any?
94
+ raise(
95
+ MissingAttribute,
96
+ "[`#{check_keys.join(', ')}`], any attribute required in #{action} action"
97
+ )
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,27 @@
1
+ module Idcf
2
+ module Ilb
3
+ module Validators
4
+ # Config validator class
5
+ class Config < Base
6
+ self.valid_attributes = {
7
+ id: { type: String },
8
+ loadbalancer_id: { type: String },
9
+ frontend_protocol: { type: String, create: :required, patch: :optional },
10
+ port: { type: Integer, create: :required, patch: :optional },
11
+ servers: { type: Array, create: :required, patch: :optional },
12
+ backend_protocol: { type: String, create: :required, patch: :optional },
13
+ sslcert_id: { type: String, create: :optional, patch: :optional },
14
+ sslpolicy_id: { type: String, create: :optional, patch: :optional },
15
+ connection_timeout: { type: Integer, create: :required, patch: :optional },
16
+ stickiness_policy: { type: String, create: :optional, patch: :optional },
17
+ algorithm: { type: String, create: :required, patch: :optional },
18
+ healthcheck: { type: Hash, create: :required, patch: :optional },
19
+ backupserver: { type: Hash, create: :optional, patch: :optional },
20
+ state: { type: String },
21
+ created_at: { type: String },
22
+ updated_at: { type: String }
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end