diff --git a/src/vnm_mad/remotes/elastic/elastic.rb b/src/vnm_mad/remotes/elastic/elastic.rb index ceba0a6927..1c09b3e175 100644 --- a/src/vnm_mad/remotes/elastic/elastic.rb +++ b/src/vnm_mad/remotes/elastic/elastic.rb @@ -73,7 +73,7 @@ class ElasticDriver < VNMMAD::VNMDriver process_all do |nic| next if attach_nic_id && attach_nic_id != nic[:nic_id] - cmds.add :ip, "route add #{nic[:ip]}/32 dev #{nic[:bridge]}" + cmds.add :ip, "route add #{nic[:ip]}/32 dev #{nic[:bridge]} ||:" cmds.add :ip, "neighbour add proxy #{nic[:gateway]} dev #{nic[:bridge]}" provider.activate(cmds, nic) if provider.respond_to? :activate diff --git a/src/vnm_mad/remotes/elastic/packet_vnm.rb b/src/vnm_mad/remotes/elastic/packet_vnm.rb index 6801c0b0ac..40250ea5fc 100644 --- a/src/vnm_mad/remotes/elastic/packet_vnm.rb +++ b/src/vnm_mad/remotes/elastic/packet_vnm.rb @@ -55,6 +55,12 @@ class PacketProvider def assign(_ip, external, _opts = {}) @client.assign_cidr_device("#{external}/32", @deploy_id) 0 + rescue Packet::Error => e + # potential VM poweroff(itself) + resume + return 0 if e.message == '{"errors"=>["Address has already been taken"]}' + + OpenNebula.log_error("Error assiging #{external}:#{e.message}") + 1 rescue StandardError => e OpenNebula.log_error("Error assiging #{external}:#{e.message}") 1 @@ -87,4 +93,5 @@ class PacketProvider cmds.add :iptables, "-t nat -D PREROUTING -d #{nic[:external_ip]} -j DNAT"\ " --to-destination #{nic[:ip]}" end + end