Method: Fog::Compute::Ecloud::Server#ips

Defined in:
lib/rackspace-fog/ecloud/models/compute/server.rb

#ipsObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/rackspace-fog/ecloud/models/compute/server.rb', line 39

def ips
  network_hash = ip_addresses[:AssignedIpAddresses][:Networks]
  network_hash[:Network] = network_hash[:Network].is_a?(Hash) ? [network_hash[:Network]] : network_hash[:Network]
  network_hash[:Network].each do |network|
    network[:IpAddresses][:IpAddress] = network[:IpAddresses][:IpAddress].is_a?(String) ? [network[:IpAddresses][:IpAddress]] : network[:IpAddresses][:IpAddress]
  end
  @ips = nil
  networks = Fog::Compute::Ecloud::Networks.new(:connection => connection, :href => "/cloudapi/ecloud/virtualMachines/#{id}/assignedIps")
  networks.each do |network|
    if networks.index(network) == 0
      if @ips.nil?
        @ips = network.ips.select do |ip|
          network_hash[:Network].any? do |network|
            network[:IpAddresses][:IpAddress].include?(ip.name)
          end
        end
      else
        network.ips.each do |ip|
          network_hash[:Network].any? do |network|
            network[:IpAddresses][:IpAddress].each do |i|
              @ips << ip if i == ip.name
            end
          end
        end
      end
    else
      network.ips.each do |ip|
        network_hash[:Network].each do |network|
          network[:IpAddresses][:IpAddress].each do |i|
            @ips << ip if i == ip.name
          end
        end
      end
    end
  end
  @ips
end