vagrant-1cloud 1.0.8 → 1.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f6b158d2a5ebd6ba2844225d9b1b8a5f01e30a36
4
- data.tar.gz: 579da12b738510cdb4ec94000480543108f5c130
3
+ metadata.gz: f707ed0657b4714d685b8430fc3b29b8d941373e
4
+ data.tar.gz: e3366df7e2408f5932631877ec9cbbf5c9b8fbc8
5
5
  SHA512:
6
- metadata.gz: cb6b3ab49082434521372f91dbc3aaecffbee9840537cd095b10712d748d9ab042e89e5ddc6418d3d0b94b766e27df6288dd52339e99250a56538f5953b115db
7
- data.tar.gz: 5ebf0e8bafad0d97d9e741cb51f7171be1337c6facaacb75e46afc148e488f1e91c516fa707d8450736ffc3232e6c098cbd8090dc8a4325c9e7600bda6b1ab36
6
+ metadata.gz: 9651c55c3be75ea4d99ca8577f6a205f3231f0930fef12bb4361824bcda99b9cf0e17bf53fe001f783fc0f843341c12fb160bea43c89520d5bfae3a1f2ba3e7a
7
+ data.tar.gz: d31e13aadf3cd4eeb66efc5b02d7425873d3035a1674da296c15ed71207599df852768d6f31b45cce04f67d9a8a85897876831a43a979a89d8133d7b877d8d0c
data/README.md CHANGED
@@ -12,6 +12,7 @@ Features include:
12
12
  - Setup a SSH public key for authentication
13
13
  - Create a new user account during VPS creation
14
14
  - Create private network
15
+ - Add VPS to private network
15
16
  - Rebuild VPS
16
17
 
17
18
 
@@ -97,6 +98,7 @@ The provider supports the following Vagrant sub-commands:
97
98
  - `vagrant reload` - Reboots the VPS instance.
98
99
  - `vagrant status` - Outputs the status (active, off, not created) for the VPS instance.
99
100
  - `vagrant create-network` - Creates private network.
101
+ - `vagrant add-network` - Adds VPS to specified private network.
100
102
  - `vagrant rebuild` - Rebuilds the VPS.
101
103
 
102
104
  Troubleshooting
@@ -22,15 +22,15 @@ module VagrantPlugins
22
22
  builder.use ConfigValidate
23
23
  builder.use Call, CheckState do |env, b|
24
24
  case env[:machine_state]
25
- when :not_created
26
- env[:ui].info I18n.t('vagrant_1cloud.info.not_created')
27
- else
28
- b.use Call, DestroyConfirm do |env2, b2|
29
- if env2[:result]
30
- b2.use Destroy
31
- b2.use ProvisionerCleanup if defined?(ProvisionerCleanup)
25
+ when :not_created
26
+ env[:ui].info I18n.t('vagrant_1cloud.info.not_created')
27
+ else
28
+ b.use Call, DestroyConfirm do |env2, b2|
29
+ if env2[:result]
30
+ b2.use Destroy
31
+ b2.use ProvisionerCleanup if defined?(ProvisionerCleanup)
32
+ end
32
33
  end
33
- end
34
34
  end
35
35
  end
36
36
  end
@@ -41,12 +41,12 @@ module VagrantPlugins
41
41
  builder.use ConfigValidate
42
42
  builder.use Call, CheckState do |env, b|
43
43
  case env[:machine_state]
44
- when :Active
45
- b.use SSHExec
46
- when :off
47
- env[:ui].info I18n.t('vagrant_1cloud.info.off')
48
- when :not_created
49
- env[:ui].info I18n.t('vagrant_1cloud.info.not_created')
44
+ when :Active
45
+ b.use SSHExec
46
+ when :off
47
+ env[:ui].info I18n.t('vagrant_1cloud.info.off')
48
+ when :not_created
49
+ env[:ui].info I18n.t('vagrant_1cloud.info.not_created')
50
50
  end
51
51
  end
52
52
  end
@@ -73,14 +73,30 @@ module VagrantPlugins
73
73
  builder.use ConfigValidate
74
74
  builder.use Call, CheckState do |env, b|
75
75
  case env[:machine_state]
76
- when :Active
77
- b.use Provision
78
- b.use ModifyProvisionPath
79
- b.use SyncedFolders
80
- when :off
81
- env[:ui].info I18n.t('vagrant_1cloud.info.off')
82
- when :not_created
83
- env[:ui].info I18n.t('vagrant_1cloud.info.not_created')
76
+ when :Active
77
+ b.use Provision
78
+ b.use ModifyProvisionPath
79
+ b.use SyncedFolders
80
+ when :off
81
+ env[:ui].info I18n.t('vagrant_1cloud.info.off')
82
+ when :not_created
83
+ env[:ui].info I18n.t('vagrant_1cloud.info.not_created')
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ def self.addnet
90
+ return Vagrant::Action::Builder.new.tap do |builder|
91
+ builder.use ConfigValidate
92
+ builder.use Call, CheckState do |env, b|
93
+ case env[:machine_state]
94
+ when :Active
95
+ b.use PrivateNetwork
96
+ when :off
97
+ env[:ui].info I18n.t('vagrant_1cloud.info.off')
98
+ when :not_created
99
+ env[:ui].info I18n.t('vagrant_1cloud.info.not_created')
84
100
  end
85
101
  end
86
102
  end
@@ -91,18 +107,18 @@ module VagrantPlugins
91
107
  builder.use ConfigValidate
92
108
  builder.use Call, CheckState do |env, b|
93
109
  case env[:machine_state]
94
- when :Active
95
- env[:ui].info I18n.t('vagrant_1cloud.info.already_active')
96
- when :off
97
- b.use PowerOn
98
- b.use provision
99
- when :not_created
100
- b.use SetupKey
101
- b.use Create
102
- b.use PrivateNetwork
103
- b.use SetupSudo
104
- b.use SetupUser
105
- b.use provision
110
+ when :Active
111
+ env[:ui].info I18n.t('vagrant_1cloud.info.already_active')
112
+ when :off
113
+ b.use PowerOn
114
+ b.use provision
115
+ when :not_created
116
+ b.use SetupKey
117
+ b.use Create
118
+ b.use PrivateNetwork
119
+ b.use SetupSudo
120
+ b.use SetupUser
121
+ b.use provision
106
122
  end
107
123
  end
108
124
  end
@@ -113,16 +129,16 @@ module VagrantPlugins
113
129
  builder.use ConfigValidate
114
130
  builder.use Call, CheckState do |env, b|
115
131
  case env[:machine_state]
116
- when :Active
117
- if env[:force_halt]
118
- b.use PowerOff
119
- else
120
- b.use ShutDown
121
- end
122
- when :off
123
- env[:ui].info I18n.t('vagrant_1cloud.info.already_off')
124
- when :not_created
125
- env[:ui].info I18n.t('vagrant_1cloud.info.not_created')
132
+ when :Active
133
+ if env[:force_halt]
134
+ b.use PowerOff
135
+ else
136
+ b.use ShutDown
137
+ end
138
+ when :off
139
+ env[:ui].info I18n.t('vagrant_1cloud.info.already_off')
140
+ when :not_created
141
+ env[:ui].info I18n.t('vagrant_1cloud.info.not_created')
126
142
  end
127
143
  end
128
144
  end
@@ -133,13 +149,13 @@ module VagrantPlugins
133
149
  builder.use ConfigValidate
134
150
  builder.use Call, CheckState do |env, b|
135
151
  case env[:machine_state]
136
- when :Active
137
- b.use Reload
138
- b.use provision
139
- when :off
140
- env[:ui].info I18n.t('vagrant_1cloud.info.off')
141
- when :not_created
142
- env[:ui].info I18n.t('vagrant_1cloud.info.not_created')
152
+ when :Active
153
+ b.use Reload
154
+ b.use provision
155
+ when :off
156
+ env[:ui].info I18n.t('vagrant_1cloud.info.off')
157
+ when :not_created
158
+ env[:ui].info I18n.t('vagrant_1cloud.info.not_created')
143
159
  end
144
160
  end
145
161
  end
@@ -24,7 +24,7 @@ module VagrantPlugins
24
24
  :RAM => @machine.provider_config.ram,
25
25
  :DCLocation => @machine.provider_config.region,
26
26
  :ImageID => @machine.provider_config.image,
27
- :Name => @machine.config.vm.hostname || @machine.name,
27
+ :Name => @machine.name,
28
28
  :SshKeys => ssh_key_id,
29
29
  :isHighPerformance => @machine.provider_config.hi_perf
30
30
  }.delete_if { |k, v| v.nil? })
@@ -58,7 +58,7 @@ module VagrantPlugins
58
58
 
59
59
  ifdown -a
60
60
  export INTERFACE=eth0
61
- export MATCHADDR=$(ifconfig -a | grep eth0 | awk '{print $NF}')
61
+ export MATCHADDR=$(ifconfig eth0 | awk 'NR==1{print $NF}')
62
62
  export MATCHID=$(udevadm info /sys/class/net/eth0 | grep P: | awk -F/ '{print $(NF-2)}')
63
63
  /lib/udev/write_net_rules
64
64
  udevadm control --reload-rules && udevadm trigger
@@ -18,6 +18,7 @@ module VagrantPlugins
18
18
  @client.delete("/server/#{@machine.id}")
19
19
 
20
20
  env[:ui].info I18n.t('vagrant_1cloud.info.destroying')
21
+ @client.wait_for_destroy(env, @machine.id)
21
22
 
22
23
  # set the machine id to nil to cleanup local vagrant state
23
24
  @machine.id = nil
@@ -26,8 +26,17 @@ module VagrantPlugins
26
26
 
27
27
  raise "Private network #{net} is not created" if !private_network
28
28
 
29
+ # Checking if machine is already added to network
30
+ result = @client.request("/server/#{@machine.id}")
31
+ linked_network = result['body']['LinkedNetworks'].find { |network| network['NetworkID'] == private_network['ID'] }
32
+
33
+ if linked_network
34
+ env[:ui].info I18n.t('vagrant_1cloud.info.already_connected', network: net)
35
+ next
36
+ end
37
+
29
38
  # Adding server to specified network
30
- result = @client.post("/Server/#{@machine.id}/Action", {
39
+ result = @client.post("/server/#{@machine.id}/Action", {
31
40
  :Type => "AddNetwork",
32
41
  :NetworkID => private_network['ID']
33
42
  })
@@ -0,0 +1,59 @@
1
+ require 'optparse'
2
+
3
+ module VagrantPlugins
4
+ module OneCloud
5
+ module Commands
6
+ class AddNetwork < Vagrant.plugin('2', :command)
7
+
8
+ # Show description when `vagrant list-commands` is triggered
9
+ def self.synopsis
10
+ "plugin: vagrant-1cloud: adds VPS to specific private network"
11
+ end
12
+
13
+ def execute
14
+ options = {}
15
+
16
+ optparse = OptionParser.new do |opts|
17
+ opts.banner = 'Usage: vagrant add-network [vm-name] [options]'
18
+
19
+ opts.on('-n', '--net NETNAME', 'Network name') do |net|
20
+ options[:Net] = net
21
+ end
22
+
23
+ options[:IP] = nil
24
+ opts.on('-i', '--ip [IP]', 'Private IP address') do |ip|
25
+ options[:IP] = ip
26
+ end
27
+
28
+ opts.on('-h', '--help', 'Display this screen') do
29
+ puts opts
30
+ exit
31
+ end
32
+ end
33
+
34
+ begin
35
+ optparse.parse!
36
+ mandatory = [:Net]
37
+ missing = mandatory.select{ |param| options[param].nil? }
38
+ unless missing.empty?
39
+ raise OptionParser::MissingArgument.new(missing.join(', '))
40
+ end
41
+ rescue OptionParser::InvalidOption, OptionParser::MissingArgument
42
+ puts $!.to_s
43
+ puts optparse
44
+ exit
45
+ end
46
+
47
+ argv = parse_options(optparse)
48
+
49
+ with_target_vms(argv) do |machine|
50
+ machine.provider_config.private_net = {options[:Net] => options[:IP]}
51
+ machine.action(:addnet)
52
+ end
53
+
54
+ 0
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -94,6 +94,43 @@ module VagrantPlugins
94
94
  end
95
95
  end
96
96
 
97
+ def wait_for_destroy(env, id)
98
+ retryable(:tries => 400, :sleep => 10) do
99
+ # stop waiting if interrupted
100
+ next if env[:interrupted]
101
+
102
+ # check action status
103
+ begin
104
+ result = @client.send(:get) do |req|
105
+ req.url "/server/#{id}"
106
+ req.headers['Authorization'] = "Bearer #{@config.token}"
107
+ end
108
+ rescue Faraday::Error::ConnectionFailed => e
109
+ # TODO this is suspect but because faraday wraps the exception
110
+ # in something generic there doesn't appear to be another
111
+ # way to distinguish different connection errors :(
112
+ if e.message =~ /certificate verify failed/
113
+ raise Errors::CertificateError
114
+ end
115
+ raise e
116
+ end
117
+ begin
118
+ body = JSON.parse(%Q[{"body":#{result.body}}])
119
+ @logger.info "Response: #{body}"
120
+ rescue JSON::ParserError => e
121
+ raise(Errors::JSONError, {
122
+ :message => e.message,
123
+ :path => path,
124
+ :params => params,
125
+ :response => result.body
126
+ })
127
+ end
128
+ result = Result.new(body)
129
+ yield result if block_given?
130
+ raise 'Destroy is not completed' if result['body']['Message'] != 'Server not found'
131
+ end
132
+ end
133
+
97
134
  def wait_for_network(env, net_id)
98
135
  retryable(:tries => 400, :sleep => 10) do
99
136
  # stop waiting if interrupted
@@ -22,6 +22,11 @@ module VagrantPlugins
22
22
  Commands::Rebuild
23
23
  end
24
24
 
25
+ command("add-network") do
26
+ require_relative 'commands/add_network'
27
+ Commands::AddNetwork
28
+ end
29
+
25
30
  command("create-network") do
26
31
  require_relative 'commands/create_network'
27
32
  Commands::CreateNetwork
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module OneCloud
3
- VERSION = '1.0.8'
3
+ VERSION = '1.1.0'
4
4
  end
5
5
  end
@@ -27,6 +27,7 @@ en:
27
27
  request: "Request: %{path}"
28
28
  params: "Parameters: %{params}"
29
29
  response: "Response: %{body}"
30
+ already_connected: "VPS is already connected to %{network} network"
30
31
  config:
31
32
  token: "Token is required"
32
33
  private_key: "SSH private key path is required"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-1cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bulat Yusupov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-28 00:00:00.000000000 Z
11
+ date: 2017-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -79,6 +79,7 @@ files:
79
79
  - lib/vagrant-1cloud/actions/setup_sudo.rb
80
80
  - lib/vagrant-1cloud/actions/setup_user.rb
81
81
  - lib/vagrant-1cloud/actions/shut_down.rb
82
+ - lib/vagrant-1cloud/commands/add_network.rb
82
83
  - lib/vagrant-1cloud/commands/create_network.rb
83
84
  - lib/vagrant-1cloud/commands/rebuild.rb
84
85
  - lib/vagrant-1cloud/config.rb