vagrant-haipa 0.0.1 → 0.2.1

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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +11 -0
  3. data/.gitignore +49 -16
  4. data/.rspec_status +5 -0
  5. data/.vscode/launch.json +13 -3
  6. data/Gemfile +6 -2
  7. data/Gemfile.lock +181 -0
  8. data/LICENSE +21 -373
  9. data/Rakefile +7 -16
  10. data/lib/vagrant-haipa/action/converge_machine.rb +44 -0
  11. data/lib/vagrant-haipa/{actions → action}/delete_machine.rb +3 -10
  12. data/lib/vagrant-haipa/action/is_created.rb +19 -0
  13. data/lib/vagrant-haipa/action/is_running.rb +20 -0
  14. data/lib/vagrant-haipa/{actions → action}/message_already_created.rb +1 -1
  15. data/lib/vagrant-haipa/{actions → action}/message_not_created.rb +1 -1
  16. data/lib/vagrant-haipa/{actions → action}/message_will_not_destroy.rb +1 -1
  17. data/lib/vagrant-haipa/action/read_state.rb +19 -0
  18. data/lib/vagrant-haipa/{actions → action}/set_name.rb +3 -6
  19. data/lib/vagrant-haipa/action/start_machine.rb +24 -0
  20. data/lib/vagrant-haipa/action/stop_machine.rb +25 -0
  21. data/lib/vagrant-haipa/{actions → action}/wait_for_ip_address.rb +4 -4
  22. data/lib/vagrant-haipa/{actions.rb → action.rb} +78 -106
  23. data/lib/vagrant-haipa/config.rb +17 -15
  24. data/lib/vagrant-haipa/driver.rb +139 -0
  25. data/lib/vagrant-haipa/errors.rb +4 -36
  26. data/lib/vagrant-haipa/plugin.rb +8 -7
  27. data/lib/vagrant-haipa/provider.rb +44 -63
  28. data/lib/vagrant-haipa/version.rb +2 -2
  29. data/lib/vagrant-haipa.rb +11 -7
  30. data/locales/en.yml +2 -70
  31. data/spec/spec_helper.rb +20 -0
  32. data/spec/unit/provider_spec.rb +38 -0
  33. data/test/Vagrantfile +23 -14
  34. data/test/console.key +27 -0
  35. data/vagrant +27 -27
  36. data/vagrant-haipa.gemspec +3 -4
  37. metadata +32 -53
  38. data/README.md +0 -111
  39. data/lib/vagrant-haipa/actions/check_state.rb +0 -19
  40. data/lib/vagrant-haipa/actions/connect_haipa.rb +0 -24
  41. data/lib/vagrant-haipa/actions/create_machine.rb +0 -56
  42. data/lib/vagrant-haipa/actions/is_created.rb +0 -18
  43. data/lib/vagrant-haipa/actions/is_stopped.rb +0 -18
  44. data/lib/vagrant-haipa/actions/modify_provision_path.rb +0 -38
  45. data/lib/vagrant-haipa/actions/shut_down.rb +0 -33
  46. data/lib/vagrant-haipa/actions/start_machine.rb +0 -34
  47. data/lib/vagrant-haipa/actions/stop_machine.rb +0 -33
  48. data/lib/vagrant-haipa/helpers/client.rb +0 -111
  49. data/lib/vagrant-haipa/helpers/result.rb +0 -40
  50. data/test/cookbooks/test/recipes/default.rb +0 -1
  51. data/test/scripts/provision.sh +0 -3
  52. data/test/test.sh +0 -13
  53. data/test/test_id_rsa +0 -27
  54. data/test/test_id_rsa.pub +0 -1
data/README.md DELETED
@@ -1,111 +0,0 @@
1
- Haipa Vagrant Provider
2
- =================================
3
-
4
-
5
- `vagrant-haipa` is a Vagrant provider plugin that supports the management of Hyper-V virtual machines with [Haipa](http://www.haipa.io).
6
-
7
- Features include:
8
- - Create and destroy Haipa Machines
9
- - Power on and off Haipa Machines
10
-
11
-
12
- Install
13
- -------
14
- Install the provider plugin using the Vagrant command-line interface:
15
-
16
- `vagrant plugin install vagrant-haipa`
17
-
18
-
19
- Configure
20
- ---------
21
- Once the provider has been installed, you will need to configure your project to use it. See the following example for a basic `Vagrantfile` implementation:
22
-
23
- ```ruby
24
- config.vm.define :ubuntu do |ubuntu|
25
- ubuntu.vm.provider :haipa do |provider|
26
- provider.vm_config = {
27
- 'Memory' => {
28
- 'Startup' => 2048
29
- },
30
- 'Disks' => [
31
- {
32
- "Template" => 'c:\hyperv-templates\ubuntu-xenial.vhdx',
33
- "Size" => 20
34
- }
35
- ],
36
- 'NetworkAdapters' => [
37
- {
38
- "Name" => "eth0",
39
- "SwitchName" => "Default Switch",
40
- }
41
- ]
42
- }
43
- end
44
- end
45
- end
46
- ```
47
-
48
-
49
- **Supported Configuration Attributes**
50
-
51
- The following attributes are available to further configure the provider:
52
- - `provider.vm_config`
53
- * A Hash with the Haipa vm configuration
54
- - `provider.provision`
55
- * A Hash with the Haipa provision configuration
56
-
57
- Run
58
- ---
59
- After creating your project's `Vagrantfile` with the required configuration
60
- attributes described above, you may create a new Machine with the following
61
- command:
62
-
63
- $ vagrant up --provider=haipa
64
-
65
- This command will create a new machine, setup your SSH key for authentication,
66
- create a new user account, and run the provisioners you have configured.
67
-
68
- **Supported Commands**
69
-
70
- The provider supports the following Vagrant sub-commands:
71
- - `vagrant destroy` - Destroys the machine instance.
72
- - `vagrant ssh` - Logs into the machine instance using the configured user account.
73
- - `vagrant halt` - Powers off the machine instance.
74
- - `vagrant provision` - Runs the configured provisioners and rsyncs any specified `config.vm.synced_folder`.
75
- - `vagrant status` - Outputs the status (active, off, not created) for the machine instance.
76
-
77
-
78
- Troubleshooting
79
- ---------------
80
- Before submitting a GitHub issue, please ensure both Vagrant and vagrant-haipa are fully up-to-date.
81
- * For the latest Vagrant version, please visit the [Vagrant](https://www.vagrantup.com/) website
82
- * To update Vagrant plugins, run the following command: `vagrant plugin update`
83
-
84
-
85
- Contribute
86
- ----------
87
- To contribute, fork then clone the repository, and then the following:
88
-
89
- **Developing**
90
-
91
- 1. Install [Bundler](http://bundler.io/)
92
- 2. Currently the Bundler version is locked to 1.7.9, please install this version.
93
- * `sudo gem install bundler -v '1.7.9'`
94
- 3. Then install vagrant-haipa dependencies:
95
- * `bundle _1.7.9_ install`
96
- 4. Do your development and run a few commands, one to get started would be:
97
- * `bundle _1.7.9_ exec vagrant haipa-list images`
98
- 5. You can then run a test:
99
- * `bundle _1.7.9_ exec rake test`
100
- 6. Once you are satisfied with your changes, please submit a pull request.
101
-
102
- **Testing**
103
-
104
- 1. Build and package your newly developed code:
105
- * `rake gem:build`
106
- 2. Then install the packaged plugin:
107
- * `vagrant plugin install pkg/vagrant-haipa-*.gem`
108
- 3. Once you're done testing, roll-back to the latest released version:
109
- * `vagrant plugin uninstall vagrant-haipa`
110
- * `vagrant plugin install vagrant-haipa`
111
- 4. Once you're satisfied developing and testing your new code, please submit a pull request for review.
@@ -1,19 +0,0 @@
1
- module VagrantPlugins
2
- module Haipa
3
- module Actions
4
- class CheckState
5
- def initialize(app, env)
6
- @app = app
7
- @machine = env[:machine]
8
- @logger = Log4r::Logger.new('vagrant::haipa::check_state')
9
- end
10
-
11
- def call(env)
12
- env[:machine_state] = @machine.state.id
13
- @logger.info "Machine state is '#{@machine.state.id}'"
14
- @app.call(env)
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,24 +0,0 @@
1
- require 'vagrant-haipa'
2
-
3
- module VagrantPlugins
4
- module Haipa
5
- module Actions
6
- class ConnectHaipa
7
- include Helpers::Client
8
-
9
- def initialize(app, env)
10
- @app = app
11
- @machine = env[:machine]
12
- @client = client
13
- @logger = Log4r::Logger.new('vagrant::haipa::ConnectHaipa')
14
- end
15
-
16
- def call(env)
17
- @app.call(env)
18
- end
19
- end
20
- end
21
- end
22
- end
23
-
24
-
@@ -1,56 +0,0 @@
1
- require 'vagrant-haipa/helpers/client'
2
-
3
- module VagrantPlugins
4
- module Haipa
5
- module Actions
6
- class CreateMachine
7
- include Helpers::Client
8
- include Vagrant::Util::Retryable
9
-
10
- def initialize(app, env)
11
- @app = app
12
- @machine = env[:machine]
13
- @client = client
14
- @logger = Log4r::Logger.new('vagrant::haipa::create_machine')
15
- end
16
-
17
- def call(env)
18
- ssh_key_id = [env[:ssh_key_id]]
19
-
20
- # submit new machine request
21
- result = @client.post('/odata/Machines', {
22
-
23
- 'Name' => env[:generated_name],
24
- 'VM' => @machine.provider_config.vm_config,
25
- "Provisioning" => @machine.provider_config.provision
26
- })
27
-
28
- # wait for request to complete
29
- env[:ui].info I18n.t('vagrant_haipa.info.creating')
30
- @client.wait_for_event(env, result['Id'])
31
-
32
- # assign the machine id for reference in other commands
33
- operation_result = @client.request("odata/Operations(#{result['Id']})")
34
- @machine.id = operation_result['MachineGuid'].to_s
35
-
36
- @app.call(env)
37
- end
38
-
39
- # Both the recover and terminate are stolen almost verbatim from
40
- # the Vagrant AWS provider up action
41
- def recover(env)
42
- return if env['vagrant.error'].is_a?(Vagrant::Errors::VagrantError)
43
- terminate(env) if @machine.state.id != :not_created
44
- end
45
-
46
- def terminate(env)
47
- destroy_env = env.dup
48
- destroy_env.delete(:interrupted)
49
- destroy_env[:config_validate] = false
50
- destroy_env[:force_confirm_destroy] = true
51
- env[:action_runner].run(Actions.action_destroy, destroy_env)
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,18 +0,0 @@
1
- module VagrantPlugins
2
- module Haipa
3
- module Actions
4
- class IsCreated
5
- def initialize(app, env)
6
- @app = app
7
- @machine = env[:machine]
8
- @logger = Log4r::Logger.new('vagrant::haipa::is_created')
9
- end
10
-
11
- def call(env)
12
- env[:result] = env[:machine].state.id != :not_created
13
- @app.call(env)
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- module VagrantPlugins
2
- module Haipa
3
- module Actions
4
- class IsStopped
5
- def initialize(app, env)
6
- @app = app
7
- @machine = env[:machine]
8
- @logger = Log4r::Logger.new('vagrant::haipa::is_stopped')
9
- end
10
-
11
- def call(env)
12
- env[:result] = env[:machine].state.id == :Stopped
13
- @app.call(env)
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,38 +0,0 @@
1
- module VagrantPlugins
2
- module Haipa
3
- module Actions
4
- class ModifyProvisionPath
5
- def initialize(app, env)
6
- @app = app
7
- @machine = env[:machine]
8
- @logger =
9
- Log4r::Logger.new('vagrant::haipa::modify_provision_path')
10
- end
11
-
12
- def call(env)
13
- # check if provisioning is enabled
14
- enabled = true
15
- enabled = env[:provision_enabled] if env.has_key?(:provision_enabled)
16
- return @app.call(env) if !enabled
17
-
18
- username = @machine.ssh_info()[:username]
19
-
20
- # change ownership of the provisioning path recursively to the
21
- # ssh user
22
- #
23
- # TODO submit patch to vagrant to set appropriate permissions
24
- # based on ssh username
25
- @machine.config.vm.provisioners.each do |provisioner|
26
- cfg = provisioner.config
27
- path = cfg.upload_path if cfg.respond_to? :upload_path
28
- path = cfg.provisioning_path if cfg.respond_to? :provisioning_path
29
- @machine.communicate.sudo("chown -R #{username} #{path}",
30
- :error_check => false)
31
- end
32
-
33
- @app.call(env)
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,33 +0,0 @@
1
- require 'vagrant-haipa'
2
-
3
- module VagrantPlugins
4
- module Haipa
5
- module Actions
6
- class ShutDown
7
- include Helpers::Client
8
-
9
- def initialize(app, env)
10
- @app = app
11
- @machine = env[:machine]
12
- @client = client
13
- @logger = Log4r::Logger.new('vagrant::haipa::shut_down')
14
- end
15
-
16
- def call(env)
17
- # submit shutdown machine request
18
- result = @client.post("/odata/Machines(#{@machine.id})/Stop")
19
-
20
- # wait for request to complete
21
- env[:ui].info I18n.t('vagrant_haipa.info.shutting_down')
22
- @client.wait_for_event(env, result['Id'])
23
-
24
- # refresh machine state with provider
25
- Provider.haipa_machine(@machine, :refresh => true)
26
-
27
- @app.call(env)
28
- end
29
- end
30
- end
31
- end
32
- end
33
-
@@ -1,34 +0,0 @@
1
- require 'vagrant-haipa'
2
-
3
- module VagrantPlugins
4
- module Haipa
5
- module Actions
6
- class StartMachine
7
- include Helpers::Client
8
-
9
- def initialize(app, env)
10
- @app = app
11
- @machine = env[:machine]
12
- @client = client
13
- @logger = Log4r::Logger.new('vagrant::haipa::power_on')
14
- end
15
-
16
- def call(env)
17
- # submit power on machine request
18
- result = @client.post("/odata/Machines(#{@machine.id})/Start")
19
-
20
- # wait for request to complete
21
- env[:ui].info I18n.t('vagrant_haipa.info.powering_on')
22
- @client.wait_for_event(env, result['Id'])
23
-
24
- # refresh machine state with provider
25
- Provider.haipa_machine(@machine, :refresh => true)
26
-
27
- @app.call(env)
28
- end
29
- end
30
- end
31
- end
32
- end
33
-
34
-
@@ -1,33 +0,0 @@
1
- require 'vagrant-haipa'
2
- #TODO: --force
3
- module VagrantPlugins
4
- module Haipa
5
- module Actions
6
- class StopMachine
7
- include Helpers::Client
8
-
9
- def initialize(app, env)
10
- @app = app
11
- @machine = env[:machine]
12
- @client = client
13
- @logger = Log4r::Logger.new('vagrant::haipa::power_off')
14
- end
15
-
16
- def call(env)
17
- # submit power off machine request
18
- result = @client.post("/odata/Machines(#{@machine.id})/Stop")
19
-
20
- # wait for request to complete
21
- env[:ui].info I18n.t('vagrant_haipa.info.powering_off')
22
- @client.wait_for_event(env, result['Id'])
23
-
24
- # refresh machine state with provider
25
- Provider.haipa_machine(@machine, :refresh => true)
26
-
27
- @app.call(env)
28
- end
29
- end
30
- end
31
- end
32
- end
33
-
@@ -1,111 +0,0 @@
1
- require 'vagrant-haipa/helpers/result'
2
- require 'faraday'
3
- require 'json'
4
- module VagrantPlugins
5
- module Haipa
6
- module Helpers
7
- module Client
8
- def client
9
- @client ||= ApiClient.new(@machine)
10
- end
11
- end
12
-
13
- class ApiClient
14
- include Vagrant::Util::Retryable
15
-
16
- def initialize(machine)
17
- @logger = Log4r::Logger.new('vagrant::haipa::apiclient')
18
- @config = machine.provider_config
19
- @client = Faraday.new({
20
- :url => 'http://localhost:62189/',
21
- :ssl => {
22
- :ca_file => @config.ca_path
23
- }
24
- })
25
- end
26
-
27
- def delete(path, params = {})
28
- request(path, params, :delete)
29
- end
30
-
31
- def post(path, params = {})
32
- @client.headers['Content-Type'] = 'application/json'
33
- request(path, params, :post)
34
- end
35
-
36
- def request(path, params = {}, method = :get)
37
- begin
38
- @logger.info "Request: #{path}"
39
- result = @client.send(method) do |req|
40
- req.url path
41
- req.body = params.to_json unless method == :get
42
- req.params = params if method == :get
43
-
44
- req.headers['Authorization'] = "Bearer #{@config.token}"
45
- end
46
- rescue Faraday::Error::ConnectionFailed => e
47
- # TODO this is suspect but because farady wraps the exception
48
- # in something generic there doesn't appear to be another
49
- # way to distinguish different connection errors :(
50
- if e.message =~ /certificate verify failed/
51
- raise Errors::CertificateError
52
- end
53
-
54
- raise e
55
- end
56
-
57
- begin
58
- body = JSON.parse(result.body)
59
- body.delete_if { |key, _| key == '@odata.context' }
60
-
61
- @logger.info "Response: #{body}"
62
- rescue JSON::ParserError => e
63
- raise(Errors::JSONError, {
64
- :message => e.message,
65
- :path => path,
66
- :params => params,
67
- :response => result.body
68
- })
69
- end
70
-
71
- unless /^2\d\d$/ =~ result.status.to_s
72
- raise(Errors::APIStatusError, {
73
- :path => path,
74
- :params => params,
75
- :status => result.status,
76
- :response => body.inspect
77
- })
78
- end
79
- Result.new(body)
80
- end
81
-
82
- def wait_for_event(env, id)
83
- timestamp = '2018-09-01T23:47:17.50094+02:00'
84
-
85
- operation_error = nil
86
- retryable(:tries => 20, :sleep => 5) do
87
- # stop waiting if interrupted
88
- next if env[:interrupted]
89
-
90
- # check action status
91
- result = request("odata/Operations(#{id})", '$expand' => "LogEntries($filter=Timestamp gt #{timestamp})")
92
-
93
- result['LogEntries'].each do |entry|
94
- env[:ui].info(entry['Message'])
95
-
96
- timestamp = entry['Timestamp']
97
- end
98
-
99
- yield result if block_given?
100
-
101
- raise 'Operation not completed' if result['Status'] == 'Running' || result['Status'] == 'Queued'
102
- operation_error = result['StatusMessage'] if result['Status'] == 'Failed'
103
- end
104
-
105
- raise "Operation failed: #{operation_error}" if operation_error
106
-
107
- end
108
- end
109
- end
110
- end
111
- end
@@ -1,40 +0,0 @@
1
- module VagrantPlugins
2
- module Haipa
3
- module Helpers
4
- class Result
5
- def initialize(body)
6
- @result = body
7
- end
8
-
9
- def [](key)
10
- @result[key.to_s]
11
- end
12
-
13
- def find_id(sub_obj, search) #:ssh_keys, {:name => 'ijin (vagrant)'}
14
- find(sub_obj, search)['id']
15
- end
16
-
17
- def find(sub_obj, search)
18
- key = search.keys.first #:slug
19
- value = search[key].to_s #sfo1
20
- key = key.to_s #slug
21
-
22
- result = @result[sub_obj.to_s].inject(nil) do |result2, obj|
23
- obj[key] == value ? obj : result2
24
- end
25
-
26
- result || error(sub_obj, key, value)
27
- end
28
-
29
- def error(sub_obj, key, value)
30
- raise(Errors::ResultMatchError, {
31
- :key => key,
32
- :value => value,
33
- :collection_name => sub_obj.to_s,
34
- :sub_obj => @result[sub_obj.to_s]
35
- })
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1 +0,0 @@
1
- log 'Testing 1 2 3!'
@@ -1,3 +0,0 @@
1
- #!/bin/bash
2
-
3
- echo 'Testing 1 2 3!'
data/test/test.sh DELETED
@@ -1,13 +0,0 @@
1
- # if ! bundle exec vagrant box list | grep haipa 1>/dev/null; then
2
- # bundle exec vagrant box add haipa box/haipa.box
3
- # fi
4
-
5
- cd test
6
-
7
- bundle exec vagrant up --provider=haipa
8
- bundle exec vagrant up
9
- bundle exec vagrant provision
10
- bundle exec vagrant halt
11
- bundle exec vagrant destroy
12
-
13
- cd ..
data/test/test_id_rsa DELETED
@@ -1,27 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIEowIBAAKCAQEAmxZRyfvgXFxlPW9ivoxffdK9erqpCp1oitghUtDxbzPSCbNw
3
- qBoiJcnPVA/TuCxMnruUcNEXYgKfTL8lD3A1Hom8N1pTAhSed5m4qAGqTMubT15s
4
- cSR+SnDdriShErB/9YSb9LVn1aR0MsFS3H/+x1j4w5d6hBas8BhDfuVd16shvoaA
5
- OKy0ywy+NBuvGy/6Au3q3t7M9wdelODRnYLSWWqaLeYExRKxWWc7ape+oduQoe4r
6
- BNVwGmIOjWOM9aFPEPVHdLGO+LQyPExdeuS0rW96a39U4p8GjGzsrkNcKzVOGjM3
7
- pIsGs3qOi7RzJ3z48HiBj9NT8I2fFpGHERerbQIDAQABAoIBABXsIcObhyuHJAh7
8
- JkopLZZro70lhZ+qgIyf4JYEUxyVBqu4YcRhbVJKJLSNSDBQksQdX+5SoCuKk1oV
9
- 6vcztU6Lyb9JVVKF96CQajnVgm04msutXUbhEbkUG0Hyi5JIwM3D4QfGXNcmWAaU
10
- rVHeBfXH7eI4F2l0ix2lUGUvpwRFRDq9HgpOjXzyc57B4jeF7na/UTnt+Uoi4hzZ
11
- FjjQ7nSLqEJLXtQBqt4EnAZu6/9JlAApunyMOX2oTqRNn8XGmD0Rc+AouipHM+Mc
12
- 9/fN9oqVxxXw2MdJA6S/sEFLEDrbifmyyHOereuZtOjdWLqsCdZwewYl8nuBnYEU
13
- GjVzYgECgYEAx+efis7xma28HWqtW9GLvjBcFAD/f+MDDeqX9TKFwf+91tUq0QZi
14
- SqXvmIvCnpsO8I70WEskT+pPwJWReAbZBrCbCVDbH34KEkAHywH9sK6chWnB8OpU
15
- 0mp0gH89A4bq/tedKVHCQ2sAbKgbIc1zf3zpmMQiV+smMDQXU1fTg/kCgYEAxpst
16
- BD2cYftFjxFZE1v8fx6t6oHtzYRtNNFTYzfxzzRBaTTRRzdhSfh0tLFueyg/fcKR
17
- oCXUxbfCYRLk+zHP2p/AyyN9R5p2AMAc6lOZPpBj7u9kjjDVnk76DYnLDqP3Da2s
18
- i7b0DNYxm2gt1VSZfOuJHv7z85SLcJQsg+3ymBUCgYBrOpFX0d3Cw3COjvRitiox
19
- YJtjl411uf2fb2EHg4xAHcBlBn8rFDOROyUkPIOutBn1a5kh61yVCWiyMwiOy42K
20
- ixz+iEKhx+f7FiGYAX9lUKRg4/PGGMxa+gN4EchWpf5TqLCCw3pi03is0BeNsDjt
21
- /8EF0t9hLZ+UZ7zDVe79cQKBgGTPi5AlfeW2V96BHcfX31jfR8RLY1v4pj4zKrKo
22
- SRO2IKW4a6pMkBOuC/9UORJGocPCKY0y5sfduMrxfk2LQUhl4sS6JPNdkhxbZ9IB
23
- 0T2SqUc1OMN8QlJzIDYTBYFO9S56Q6U/nq2NY+zQesNYh/iCzj1viIDRm93vOJFX
24
- DNbpAoGBALlQvzzMsT3/fPYn8moQiUCJ9XRZ4X2qwYy5Q8J8QvutI+j9o9+pJBhc
25
- 3zSlB8HHa7asf27GUbYtv7oFDpqqcC6EFtvfp1OCiX/OjBIJA1YXTFG3YWC5ngC4
26
- JPxyTn4MdoX0enm8PRDg7CSZwa4AK1MIYetbiuJgWJ2wKXDFxuGH
27
- -----END RSA PRIVATE KEY-----
data/test/test_id_rsa.pub DELETED
@@ -1 +0,0 @@
1
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCbFlHJ++BcXGU9b2K+jF990r16uqkKnWiK2CFS0PFvM9IJs3CoGiIlyc9UD9O4LEyeu5Rw0RdiAp9MvyUPcDUeibw3WlMCFJ53mbioAapMy5tPXmxxJH5KcN2uJKESsH/1hJv0tWfVpHQywVLcf/7HWPjDl3qEFqzwGEN+5V3XqyG+hoA4rLTLDL40G68bL/oC7ere3sz3B16U4NGdgtJZapot5gTFErFZZztql76h25Ch7isE1XAaYg6NY4z1oU8Q9Ud0sY74tDI8TF165LStb3prf1TinwaMbOyuQ1wrNU4aMzekiwazeo6LtHMnfPjweIGP01PwjZ8WkYcRF6tt digital_ocean provider test key