vault 0.14.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cd39dd364209eee99a269200710d73fbdd4d9fe7007b5b8db78d1861b5671c53
4
- data.tar.gz: 3b9cd61321644f7a45d87e7f08dadd7cb6c20da6537e46a01f82b2975d302852
3
+ metadata.gz: 267c85a379172af5c24fd3c3d4e14b9f07991e058f64933b3c56cc07036b053e
4
+ data.tar.gz: 847ead8ea9965e449dfbf11e3447b240e5c016fbe90e177f1ba6adca0615ee18
5
5
  SHA512:
6
- metadata.gz: 9a5e084c51cf4528095d4911acf8b983e1b61673441862fee7a58c640faae85bd81157a2a53d64db3fe8387136f8ceff7da2ea33e295ad6c8813b1e9fd3ff4a0
7
- data.tar.gz: '0256808c555dece8ff08124fbdfad7a92b054db0c85f3e0e3d907d28b30c9d3f5d4b9e9a96287c1f2b8697e06dfdab57f8ddc0ee66a0947e780b7833e196bbc2'
6
+ metadata.gz: 744df9d7282b0f873f008667fbd9c5bd943eea362535cdf872598c5eb5cb9fa36bb91d182a2b3ad0a2877294c16e345d371b33998a83645ba4e6880b13980e0e
7
+ data.tar.gz: 64ac03ddf3a2c5609e2224548353be0d9e640bfba1ec0ec0e215f541f2802db830238373a5b38fb15f77675d75717847468b8e5c2a1331cf609e87ca497e812a
@@ -1,5 +1,8 @@
1
1
  version: 2.1
2
2
 
3
+ orbs:
4
+ gem: zfhui/ruby-gem@0.2.1
5
+
3
6
  references:
4
7
  images:
5
8
  ubuntu: &UBUNTU_IMAGE ubuntu-1604:201903-01
@@ -15,6 +18,12 @@ jobs:
15
18
  type: string
16
19
  steps:
17
20
  - checkout
21
+ # Restore bundle cache
22
+ - restore_cache:
23
+ keys:
24
+ - v1-dependencies-bundler-<< parameters.ruby-version >>-{{ checksum "vault.gemspec" }}
25
+ # fallback to using the latest cache if no exact match is found
26
+ - v1-dependencies-bundler-
18
27
  - run:
19
28
  name: Install vault
20
29
  command: |
@@ -23,20 +32,54 @@ jobs:
23
32
  mkdir -p ~/bin
24
33
  mv vault ~/bin
25
34
  export PATH="~/bin:$PATH"
35
+ - run:
36
+ name: Set ruby version
37
+ command: |
38
+ rvm install << parameters.ruby-version >>
39
+ echo . $(rvm << parameters.ruby-version >> do rvm env --path) >> $BASH_ENV
26
40
  - run:
27
41
  name: Run tests
28
42
  command: |
29
43
  export VAULT_VERSION=<< parameters.vault-version >>
30
- rvm use << parameters.ruby-version >> --install --binary --fuzzy
44
+ ruby --version
45
+ gem install bundler
46
+ bundle -v
31
47
  bundle install --jobs=3 --retry=3 --path=vendor/bundle
32
48
  bundle exec rake
49
+ # Store bundle cache
50
+ - save_cache:
51
+ key: v1-dependencies-bundler-<< parameters.ruby-version >>-{{ checksum "vault.gemspec" }}
52
+ paths:
53
+ - vendor/bundle
54
+
55
+ build-release:
56
+ working_directory: ~/repo
57
+ executor: gem/default
58
+ steps:
59
+ - gem/build:
60
+ gem-name: vault
61
+ - gem/release:
62
+ gem-name: vault
63
+ gem-credentials-env-name: $RUBYGEMS_API_KEY
33
64
 
34
65
  workflows:
35
66
  run-tests:
36
67
  jobs:
37
68
  - test:
69
+ filters:
70
+ tags:
71
+ only: /^v[0-9]+\.[0-9]+\.[0-9]+.*/
38
72
  matrix:
39
73
  parameters:
40
- ruby-version: ["2.2", "2.3", "2.4"]
41
- vault-version: ["1.0.3", "1.1.5", "1.2.4", "1.3.0"]
74
+ ruby-version: ["2.7.1", "2.6", "2.5"]
75
+ vault-version: ["1.5.0", "1.4.2", "1.4.1", "1.4.0", "1.3.6"]
42
76
  name: test-ruby-<< matrix.ruby-version >>-vault-<< matrix.vault-version >>
77
+ - build-release:
78
+ requires:
79
+ - test
80
+ context: vault-gem-release
81
+ filters:
82
+ tags:
83
+ only: /^v[0-9]+\.[0-9]+\.[0-9]+.*/
84
+ branches:
85
+ ignore: /.*/
@@ -1,5 +1,11 @@
1
1
  # Vault Ruby Changelog
2
2
 
3
+ ## v0.15.0 (July 29, 2020)
4
+
5
+ IMPROVEMENTS
6
+
7
+ - Added support for Resource Quotas
8
+
3
9
  ## v0.14.0 (May 28, 2020)
4
10
 
5
11
  IMPROVEMENTS
@@ -23,4 +23,5 @@ require_relative "sys/lease"
23
23
  require_relative "sys/mount"
24
24
  require_relative "sys/namespace"
25
25
  require_relative "sys/policy"
26
+ require_relative "sys/quota"
26
27
  require_relative "sys/seal"
@@ -18,8 +18,6 @@ module Vault
18
18
  # Vault.sys.namespaces #=> { :foo => #<struct Vault::Namespace id="xxxx1", path="foo/" }
19
19
  #
20
20
  # @return [Hash<Symbol, Namespace>]
21
- #
22
- # NOTE: Due to a bug in Vault Enterprise, to be fixed soon, this method CAN return a pure JSON string if a scoping namespace is provided.
23
21
  def namespaces(scoped=nil)
24
22
  path = ["v1", scoped, "sys", "namespaces"].compact
25
23
  json = client.list(path.join("/"))
@@ -0,0 +1,107 @@
1
+ module Vault
2
+ class Quota < Response
3
+ # @!attribute [r] name
4
+ # Name of the quota rule.
5
+ # @return [String]
6
+ field :name
7
+
8
+ # @!attribute [r] path
9
+ # Namespace/Path combination the quota applies to.
10
+ # @return [String]
11
+ field :path
12
+
13
+ # @!attribute [r] type
14
+ # Type of the quota rule, must be one of "lease-count" or "rate-limit"
15
+ # @return [String]
16
+ field :type
17
+ end
18
+
19
+ class RateLimitQuota < Quota
20
+ # @!attribute [r] rate
21
+ # The rate at which allowed requests are refilled per second by the quota
22
+ # rule.
23
+ # @return [Float]
24
+ field :rate
25
+
26
+ # @!attribute [r] burst
27
+ # The maximum number of requests at any given second allowed by the quota
28
+ # rule.
29
+ # @return [Int]
30
+ field :burst
31
+ end
32
+
33
+ class LeaseCountQuota < Quota
34
+ # @!attribute [r] counter
35
+ # Number of currently active leases for the quota.
36
+ # @return [Int]
37
+ field :counter
38
+
39
+ # @!attribute [r] max_leases
40
+ # The maximum number of allowed leases for this quota.
41
+ # @return [Int]
42
+ field :max_leases
43
+ end
44
+
45
+ class Sys
46
+ def quotas(type)
47
+ path = generate_path(type)
48
+ json = client.list(path)
49
+ if data = json.dig(:data, :key_info)
50
+ data.map do |item|
51
+ type_class(type).decode(item)
52
+ end
53
+ else
54
+ json
55
+ end
56
+ end
57
+
58
+ def create_quota(type, name, opts={})
59
+ path = generate_path(type, name)
60
+ client.post(path, JSON.fast_generate(opts))
61
+ return true
62
+ end
63
+
64
+ def delete_quota(type, name)
65
+ path = generate_path(type, name)
66
+ client.delete(path)
67
+ return true
68
+ end
69
+
70
+ def get_quota(type, name)
71
+ path = generate_path(type, name)
72
+ response = client.get(path)
73
+ if data = response[:data]
74
+ type_class(type).decode(data)
75
+ end
76
+ end
77
+
78
+ def get_quota_config
79
+ client.get("v1/sys/quotas/config")
80
+ end
81
+
82
+ def update_quota_config(opts={})
83
+ client.post("v1/sys/quotas/config", JSON.fast_generate(opts))
84
+ return true
85
+ end
86
+
87
+ private
88
+
89
+ def generate_path(type, name=nil)
90
+ verify_type(type)
91
+ path = ["v1", "sys", "quotas", type, name].compact
92
+ path.join("/")
93
+ end
94
+
95
+ def verify_type(type)
96
+ return if ["rate-limit", "lease-count"].include?(type)
97
+ raise ArgumentError, "type must be one of \"rate-limit\" or \"lease-count\""
98
+ end
99
+
100
+ def type_class(type)
101
+ case type
102
+ when "lease-count" then LeaseCountQuota
103
+ when "rate-limit" then RateLimitQuota
104
+ end
105
+ end
106
+ end
107
+ end
@@ -1,3 +1,3 @@
1
1
  module Vault
2
- VERSION = "0.14.0"
2
+ VERSION = "0.15.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vault
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seth Vargo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-28 00:00:00.000000000 Z
11
+ date: 2020-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sigv4
@@ -143,6 +143,7 @@ files:
143
143
  - lib/vault/api/sys/mount.rb
144
144
  - lib/vault/api/sys/namespace.rb
145
145
  - lib/vault/api/sys/policy.rb
146
+ - lib/vault/api/sys/quota.rb
146
147
  - lib/vault/api/sys/seal.rb
147
148
  - lib/vault/api/transform.rb
148
149
  - lib/vault/api/transform/alphabet.rb