bb8 0.2.0 → 0.3.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
  SHA1:
3
- metadata.gz: ce698dad7541161007a7c53b2b6c96b7ef933b21
4
- data.tar.gz: 0fe6140febe6b98e72b8d065684339024f139579
3
+ metadata.gz: 5f54c2857060d4c328cb1063a69c8fd294e062ee
4
+ data.tar.gz: 9fe628260d9068b4a3873fb6f4f37c5d6e82354e
5
5
  SHA512:
6
- metadata.gz: e8e478a8956d128ad4cb50564bdb572bfa2ecdc81ded9e24fc698e9e8455c5ab8607fd14ce48a816da25805fe2e2ac5c540cfc60bf19397ba0e29b8c08959741
7
- data.tar.gz: 3d46715a49d1e50fcca1d787ab22ebd68162a385feb576f4ad7098d7954a25896c3e674f7ae24c24a12cb2e05eed484cebf5560184fb6e236b448ee8a60621d1
6
+ metadata.gz: 8cf2e2640ce2233cd262dfffc1361eae169edccf1afc9779ff62d35734a55fb4a6f27f57ede199c4ef89a3f2c415e4cbd473edbefb8bec795b99506a15595bff
7
+ data.tar.gz: 6da423cf3ddfe53d517be7b9430fb69f03baa5fe400d691665a1ee994e072922673661b8d41b742a0eb09e15e0744064c37dfb585a6f5cb99d7e5d7cf2d99f41
data/README.markdown CHANGED
@@ -22,9 +22,9 @@ Then move into your project's directory (i.e. `cd servers`). You'll want to add
22
22
 
23
23
  The next step is to set up an environment:
24
24
 
25
- $ bb8 staging init my-servers-staging
25
+ $ bb8 environment staging my-servers-staging
26
26
 
27
- The order of arguments is as follows: the name of the environment, the `init` command, and the name of a bundle of Voltos settings. BB-8 will create the latter for you, if you've not already done so.
27
+ The arguments are the name of the environment (in this case, `staging`), and the name of a bundle of Voltos settings. BB-8 will create the latter for you, if you've not already done so.
28
28
 
29
29
  From this point on, you'll want to issue Terraform commands through BB-8 and a specified environment:
30
30
 
data/bb8.gemspec CHANGED
@@ -20,8 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |file| File.basename(file) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_runtime_dependency "curb", "~> 0.9.3"
24
- spec.add_runtime_dependency "voltos", "~> 0.3"
23
+ spec.add_runtime_dependency "faraday", "~> 0.10.0"
25
24
 
26
25
  spec.add_development_dependency "rspec", "~> 3.0"
27
26
  end
data/lib/bb8.rb CHANGED
@@ -1,9 +1,8 @@
1
- require 'curb'
1
+ require 'faraday'
2
2
  require 'fileutils'
3
3
  require 'json'
4
4
  require 'openssl'
5
5
  require 'securerandom'
6
- require 'voltos'
7
6
 
8
7
  module BB8
9
8
  module Commands
@@ -11,7 +10,6 @@ module BB8
11
10
  end
12
11
 
13
12
  require 'bb8/cli'
14
- require 'bb8/commands/environment'
15
13
  require 'bb8/commands/help'
16
14
  require 'bb8/commands/initialise_environment'
17
15
  require 'bb8/commands/initialise_project'
@@ -21,5 +19,4 @@ require 'bb8/decrypt'
21
19
  require 'bb8/encrypt'
22
20
  require 'bb8/set_encryption_keys'
23
21
  require 'bb8/version'
24
- require 'bb8/voltos_api'
25
- require 'bb8/voltos_variables'
22
+ require 'bb8/voltos'
data/lib/bb8/cli.rb CHANGED
@@ -7,8 +7,10 @@ class BB8::CLI
7
7
  BB8::Commands::InitialiseProject.call arguments[1]
8
8
  when 'version'
9
9
  BB8::Commands::Version.call
10
+ when 'environment'
11
+ BB8::Commands::InitialiseEnvironment.call arguments[1], arguments[2]
10
12
  when *environments
11
- BB8::Commands::Environment.call *arguments
13
+ BB8::Commands::Terraform.call(*arguments)
12
14
  else
13
15
  BB8::Commands::Help.call
14
16
  end
@@ -7,10 +7,12 @@ Usage:
7
7
 
8
8
  bb8 init . Set up a directory as a git
9
9
  repository.
10
- bb8 ENVIRONMENT init Set up a directory for a specific
10
+ bb8 environment staging my-voltos-bundle Set up a directory for a specific
11
11
  environment.
12
12
  bb8 ENVIRONMENT [show|apply|destroy|...] Run a Terraform command within a
13
13
  specific environment's context.
14
+ bb8 version Outputs BB8's version.
15
+ bb8 help Outputs this information.
14
16
  MESSAGE
15
17
  end
16
18
  end
@@ -10,24 +10,31 @@ class BB8::Commands::InitialiseEnvironment
10
10
  def call
11
11
  FileUtils.mkdir_p name
12
12
  Dir.chdir name
13
+ File.write '.bb8_bundle', voltos_bundle
13
14
 
14
- api.create_bundle voltos_bundle unless bundles.include? voltos_bundle
15
- `voltos use #{voltos_bundle}` unless set_bundle?
15
+ BB8::Voltos::Bundle.create voltos_bundle unless bundle_exists?
16
+ append_token unless set_bundle?
16
17
  BB8::SetEncryptionKeys.call
17
-
18
- File.write '.bb8_bundle', voltos_bundle
19
18
  end
20
19
 
21
20
  private
22
21
 
23
22
  attr_reader :name, :voltos_bundle
24
23
 
25
- def api
26
- @api ||= BB8::VoltosAPI.new
24
+ def append_token
25
+ File.open('.env', 'a') do |file|
26
+ file.puts "VOLTOS_KEY=#{bundle.token}"
27
+ end
28
+ end
29
+
30
+ def bundle
31
+ @bundle ||= BB8::Voltos.bundles.detect { |bundle|
32
+ bundle.name == voltos_bundle
33
+ } || BB8::Voltos::Bundle.create(voltos_bundle)
27
34
  end
28
35
 
29
- def bundles
30
- api.bundles.collect { |bundle| bundle['name'] }
36
+ def bundle_exists?
37
+ BB8::Voltos.bundles.collect(&:name).include? voltos_bundle
31
38
  end
32
39
 
33
40
  def set_bundle?
data/lib/bb8/decrypt.rb CHANGED
@@ -9,8 +9,8 @@ class BB8::Decrypt
9
9
 
10
10
  def call
11
11
  cipher.decrypt
12
- cipher.key = variables['BB8_SECRET_KEY']
13
- cipher.iv = variables['BB8_SECRET_IV']
12
+ cipher.key = bundle.variables['BB8_SECRET_KEY']
13
+ cipher.iv = bundle.variables['BB8_SECRET_IV']
14
14
 
15
15
  buffer = ""
16
16
  File.open(path.gsub('.enc', ''), "wb") do |output|
@@ -27,11 +27,11 @@ class BB8::Decrypt
27
27
 
28
28
  attr_reader :path
29
29
 
30
- def cipher
31
- @cipher ||= OpenSSL::Cipher.new('aes-256-cbc')
30
+ def bundle
31
+ @bundle ||= BB8::Voltos.current_bundle
32
32
  end
33
33
 
34
- def variables
35
- @variables ||= BB8::VoltosVariables.call
34
+ def cipher
35
+ @cipher ||= OpenSSL::Cipher.new('aes-256-cbc')
36
36
  end
37
37
  end
data/lib/bb8/encrypt.rb CHANGED
@@ -9,8 +9,8 @@ class BB8::Encrypt
9
9
 
10
10
  def call
11
11
  cipher.encrypt
12
- cipher.key = variables['BB8_SECRET_KEY']
13
- cipher.iv = variables['BB8_SECRET_IV']
12
+ cipher.key = bundle.variables['BB8_SECRET_KEY']
13
+ cipher.iv = bundle.variables['BB8_SECRET_IV']
14
14
 
15
15
  buffer = ""
16
16
  File.open("#{path}.enc", "wb") do |output|
@@ -27,11 +27,11 @@ class BB8::Encrypt
27
27
 
28
28
  attr_reader :path
29
29
 
30
- def cipher
31
- @cipher ||= OpenSSL::Cipher.new('aes-256-cbc')
30
+ def bundle
31
+ @bundle ||= BB8::Voltos.current_bundle
32
32
  end
33
33
 
34
- def variables
35
- @variables ||= BB8::VoltosVariables.call
34
+ def cipher
35
+ @cipher ||= OpenSSL::Cipher.new('aes-256-cbc')
36
36
  end
37
37
  end
@@ -4,15 +4,15 @@ class BB8::SetEncryptionKeys
4
4
  end
5
5
 
6
6
  def call
7
- return if variables['BB8_SECRET_KEY']
7
+ return if bundle.variables['BB8_SECRET_KEY']
8
8
 
9
- `voltos set BB8_SECRET_KEY=#{SecureRandom.hex(16)}`
10
- `voltos set BB8_SECRET_IV=#{SecureRandom.hex(8)}`
9
+ bundle.set 'BB8_SECRET_KEY', SecureRandom.hex(16)
10
+ bundle.set 'BB8_SECRET_IV', SecureRandom.hex(8)
11
11
  end
12
12
 
13
13
  private
14
14
 
15
- def variables
16
- @variables ||= BB8::VoltosVariables.call
15
+ def bundle
16
+ @bundle ||= BB8::Voltos.current_bundle
17
17
  end
18
18
  end
data/lib/bb8/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module BB8
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
data/lib/bb8/voltos.rb ADDED
@@ -0,0 +1,15 @@
1
+ class BB8::Voltos
2
+ def self.bundles
3
+ api = BB8::Voltos::API.new
4
+ api.get("bundles").collect { |hash|
5
+ BB8::Voltos::Bundle.new hash['name'], api
6
+ }
7
+ end
8
+
9
+ def self.current_bundle
10
+ BB8::Voltos::Bundle.new File.read('.bb8_bundle')
11
+ end
12
+ end
13
+
14
+ require 'bb8/voltos/api'
15
+ require 'bb8/voltos/bundle'
@@ -0,0 +1,46 @@
1
+ class BB8::Voltos::API
2
+ DOMAIN = 'https://api.voltos.io'
3
+ VERSION = 'v1'
4
+ ENDPOINT = "#{DOMAIN}/#{VERSION}"
5
+
6
+ def get(path)
7
+ JSON.parse connection.get("#{VERSION}/#{path}").body
8
+ end
9
+
10
+ def put(path, params)
11
+ JSON.parse connection.put("#{VERSION}/#{path}", params).body
12
+ end
13
+
14
+ def post(path, params)
15
+ JSON.parse connection.post("#{VERSION}/#{path}", params).body
16
+ end
17
+
18
+ def create_bundle(name)
19
+ JSON.parse connection.post("#{VERSION}/bundles", {
20
+ :name => name,
21
+ :token_name => 'BB8'
22
+ }).body
23
+ end
24
+
25
+ private
26
+
27
+ def configuration
28
+ @configuration ||= JSON.parse(
29
+ File.read(File.expand_path('~/.voltos/config.json'))
30
+ )
31
+ end
32
+
33
+ def connection
34
+ @connection ||= Faraday.new(:url => DOMAIN) do |faraday|
35
+ faraday.request :url_encoded
36
+ faraday.adapter Faraday.default_adapter
37
+
38
+ faraday.headers['User-Agent'] = "BB8/#{BB8::VERSION}"
39
+ faraday.headers['Authorization'] = "Token token=#{token}"
40
+ end
41
+ end
42
+
43
+ def token
44
+ configuration['auths']["#{ENDPOINT}"]['auth']
45
+ end
46
+ end
@@ -0,0 +1,39 @@
1
+ class BB8::Voltos::Bundle
2
+ attr_reader :name
3
+
4
+ def self.create(name, api = nil)
5
+ api ||= BB8::Voltos::API.new
6
+ response = api.post("bundles", {
7
+ :name => name,
8
+ :token_name => 'BB8'
9
+ })
10
+
11
+ new name, api, response['token']
12
+ end
13
+
14
+ def initialize(name, api = nil, token = nil)
15
+ @name = name
16
+ @api = api || BB8::Voltos::API.new
17
+ @token = token
18
+ end
19
+
20
+ def set(key, value)
21
+ api.put "/bundles/#{name}", "#{key}=#{value}"
22
+ end
23
+
24
+ def token
25
+ @token || new_token
26
+ end
27
+
28
+ def variables
29
+ @variables ||= api.get "/bundles/#{name}"
30
+ end
31
+
32
+ private
33
+
34
+ attr_reader :api
35
+
36
+ def new_token
37
+ api.post("/bundles/#{name}/token", :name => name)['token']
38
+ end
39
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bb8
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pat Allan
@@ -11,33 +11,19 @@ cert_chain: []
11
11
  date: 2016-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: curb
14
+ name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.9.3
19
+ version: 0.10.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.9.3
27
- - !ruby/object:Gem::Dependency
28
- name: voltos
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.3'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.3'
26
+ version: 0.10.0
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rspec
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -72,7 +58,6 @@ files:
72
58
  - exe/bb8
73
59
  - lib/bb8.rb
74
60
  - lib/bb8/cli.rb
75
- - lib/bb8/commands/environment.rb
76
61
  - lib/bb8/commands/help.rb
77
62
  - lib/bb8/commands/initialise_environment.rb
78
63
  - lib/bb8/commands/initialise_project.rb
@@ -82,8 +67,9 @@ files:
82
67
  - lib/bb8/encrypt.rb
83
68
  - lib/bb8/set_encryption_keys.rb
84
69
  - lib/bb8/version.rb
85
- - lib/bb8/voltos_api.rb
86
- - lib/bb8/voltos_variables.rb
70
+ - lib/bb8/voltos.rb
71
+ - lib/bb8/voltos/api.rb
72
+ - lib/bb8/voltos/bundle.rb
87
73
  homepage: https://github.com/pat/bb8
88
74
  licenses:
89
75
  - MIT
@@ -104,9 +90,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
90
  version: '0'
105
91
  requirements: []
106
92
  rubyforge_project:
107
- rubygems_version: 2.5.1
93
+ rubygems_version: 2.5.2
108
94
  signing_key:
109
95
  specification_version: 4
110
96
  summary: Manage and share Terraform variables, environments, and states securely.
111
97
  test_files: []
112
- has_rdoc:
@@ -1,10 +0,0 @@
1
- class BB8::Commands::Environment
2
- def self.call(environment, command, *arguments)
3
- case command
4
- when 'init'
5
- BB8::Commands::InitialiseEnvironment.call(environment, *arguments)
6
- else
7
- BB8::Commands::Terraform.call(environment, command, *arguments)
8
- end
9
- end
10
- end
@@ -1,34 +0,0 @@
1
- class BB8::VoltosAPI
2
- DOMAIN = 'https://api.voltos.io'
3
- VERSION = 'v1'
4
- ENDPOINT = "#{DOMAIN}/#{VERSION}"
5
-
6
- def bundles
7
- JSON.parse Curl.get("#{ENDPOINT}/bundles") { |http|
8
- http.headers['User-Agent'] = "BB8/#{BB8::VERSION}"
9
- http.headers['Authorization'] = "Token token=#{token}"
10
- }.body_str
11
- end
12
-
13
- def create_bundle(name)
14
- JSON.parse Curl.post("#{ENDPOINT}/bundles", {
15
- :name => name,
16
- :token_name => 'BB8'
17
- }) { |http|
18
- http.headers['User-Agent'] = "BB8/#{BB8::VERSION}"
19
- http.headers['Authorization'] = "Token token=#{token}"
20
- }.body_str
21
- end
22
-
23
- private
24
-
25
- def configuration
26
- @configuration ||= JSON.parse(
27
- File.read(File.expand_path('~/.voltos/config.json'))
28
- )
29
- end
30
-
31
- def token
32
- configuration['auths']["#{ENDPOINT}"]['auth']
33
- end
34
- end
@@ -1,16 +0,0 @@
1
- class BB8::VoltosVariables
2
- def self.call
3
- new.call
4
- end
5
-
6
- def call
7
- Voltos.configuration.api_key = voltos_api_key
8
- Voltos.load
9
- end
10
-
11
- private
12
-
13
- def voltos_api_key
14
- @voltos_api_key ||= File.read('.env')[/VOLTOS_KEY=(\w+)/, 1]
15
- end
16
- end