Class: Pec::Network::Port
- Inherits:
-
Object
- Object
- Pec::Network::Port
- Extended by:
- Query
- Defined in:
- lib/pec/network/port.rb
Constant Summary collapse
- @@use_ip_list =
[]
Class Method Summary collapse
- .assign(name, ip, subnet, security_group_ids) ⇒ Object
- .create(ip, subnet, security_group_ids) ⇒ Object
- .delete(ip) ⇒ Object
- .fetch_by_ip(ip_addr) ⇒ Object
- .fetch_free_port(subnet) ⇒ Object
- .get_free_port_ip(ip, subnet) ⇒ Object
- .recreate(ip, subnet, security_group_ids) ⇒ Object
- .request_any_address?(ip, subnet) ⇒ Boolean
- .set_fixed_ip(options, subnet, ip) ⇒ Object
- .set_security_group(security_group_ids) ⇒ Object
Methods included from Query
Class Method Details
.assign(name, ip, subnet, security_group_ids) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/pec/network/port.rb', line 9 def assign(name, ip, subnet, security_group_ids) ip = get_free_port_ip(ip, subnet) if request_any_address?(ip, subnet) port_state = Pec::Network::PortState.new(name, fetch_by_ip(ip.to_addr)) assign_port = case when port_state.exists? && !port_state.used? recreate(ip, subnet, security_group_ids) when !port_state.exists? create(ip, subnet, security_group_ids) when port_state.used? raise(Pec::Errors::Port, "ip:#{ip.to_addr} is used!") end Pec::Network::PortState.new(name, assign_port) end |
.create(ip, subnet, security_group_ids) ⇒ Object
29 30 31 32 33 34 35 36 37 38 |
# File 'lib/pec/network/port.rb', line 29 def create(ip, subnet, security_group_ids) = set_security_group(security_group_ids) = set_fixed_ip(, subnet, ip) response = Pec::Resource.get.create_port(subnet["network_id"], ) raise(Pec::Errors::Port, "ip:#{ip.to_addr} is not created!") unless response @@use_ip_list << response.data[:body]["port"]["fixed_ips"][0]["ip_address"] response.data[:body]["port"] end |
.delete(ip) ⇒ Object
48 49 50 51 |
# File 'lib/pec/network/port.rb', line 48 def delete(ip) target_port = fetch_by_ip(ip.to_addr) response = Pec::Resource.get.delete_port(target_port["id"]) if target_port end |
.fetch_by_ip(ip_addr) ⇒ Object
61 62 63 |
# File 'lib/pec/network/port.rb', line 61 def fetch_by_ip(ip_addr) list.find {|p| p["fixed_ips"][0]["ip_address"] == ip_addr } end |
.fetch_free_port(subnet) ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/pec/network/port.rb', line 65 def fetch_free_port(subnet) list.find do |p| p["fixed_ips"][0]["subnet_id"] == subnet["id"] && p["device_owner"].empty? && p["admin_state_up"] && !@@use_ip_list.include?(p["fixed_ips"][0]["ip_address"]) end end |
.get_free_port_ip(ip, subnet) ⇒ Object
24 25 26 27 |
# File 'lib/pec/network/port.rb', line 24 def get_free_port_ip(ip, subnet) port = fetch_free_port(subnet) port ? IP.new("#{port["fixed_ips"][0]["ip_address"]}/#{ip.pfxlen}") : ip end |
.recreate(ip, subnet, security_group_ids) ⇒ Object
53 54 55 |
# File 'lib/pec/network/port.rb', line 53 def recreate(ip, subnet, security_group_ids) create(ip, subnet, security_group_ids) if delete(ip) end |
.request_any_address?(ip, subnet) ⇒ Boolean
57 58 59 |
# File 'lib/pec/network/port.rb', line 57 def request_any_address?(ip, subnet) ip.to_s == subnet["cidr"] end |
.set_fixed_ip(options, subnet, ip) ⇒ Object
44 45 46 |
# File 'lib/pec/network/port.rb', line 44 def set_fixed_ip(, subnet, ip) ip.to_s != subnet["cidr"] ? .merge({ fixed_ips: [{ subnet_id: subnet["id"], ip_address: ip.to_addr}]}) : end |
.set_security_group(security_group_ids) ⇒ Object
40 41 42 |
# File 'lib/pec/network/port.rb', line 40 def set_security_group(security_group_ids) { security_groups: security_group_ids } end |