fog/fog-azure-rm

View on GitHub
lib/fog/azurerm/models/network/network_interface.rb

Summary

Maintainability
B
4 hrs
Test Coverage
F
35%
module Fog
  module Network
    class AzureRM
      # NetworkInterface model class for Network Service
      class NetworkInterface < Fog::Model
        identity :name
        attribute :id
        attribute :location
        attribute :resource_group
        attribute :virtual_machine_id
        attribute :mac_address
        attribute :network_security_group_id
        attribute :ip_configuration_name
        attribute :ip_configuration_id
        attribute :subnet_id
        attribute :private_ip_allocation_method
        attribute :private_ip_address
        attribute :public_ip_address_id
        attribute :load_balancer_backend_address_pools_ids
        attribute :load_balancer_inbound_nat_rules_ids
        attribute :dns_servers
        attribute :applied_dns_servers
        attribute :internal_dns_name_label
        attribute :internal_fqd
        attribute :tags
        attribute :enable_accelerated_networking

        def self.parse(nic)
          hash = {}
          hash['id'] = nic.id
          hash['name'] = nic.name
          hash['location'] = nic.location
          hash['resource_group'] = get_resource_from_resource_id(nic.id, RESOURCE_GROUP_NAME)
          hash['virtual_machine_id'] = nic.virtual_machine.id unless nic.virtual_machine.nil?
          hash['mac_address'] = nic.mac_address unless nic.mac_address.nil?
          hash['network_security_group_id'] = nil
          hash['network_security_group_id'] = nic.network_security_group.id unless nic.network_security_group.nil?
          hash['tags'] = nic.tags
          ip_configuration = nic.ip_configurations[0] unless nic.ip_configurations.nil?
          unless ip_configuration.nil?
            hash['ip_configuration_name'] = ip_configuration.name
            hash['ip_configuration_id'] = ip_configuration.id
            hash['subnet_id'] = ip_configuration.subnet.id unless ip_configuration.subnet.nil?
            hash['private_ip_allocation_method'] = ip_configuration.private_ipallocation_method
            hash['private_ip_address'] = ip_configuration.private_ipaddress
            hash['public_ip_address_id'] = nil
            hash['public_ip_address_id'] = ip_configuration.public_ipaddress.id unless ip_configuration.public_ipaddress.nil?
            hash['load_balancer_backend_address_pools_ids'] = ip_configuration.load_balancer_backend_address_pools.map(&:id) unless ip_configuration.load_balancer_backend_address_pools.nil?
            hash['load_balancer_inbound_nat_rules_ids'] = ip_configuration.load_balancer_inbound_nat_rules.map(&:id) unless ip_configuration.load_balancer_inbound_nat_rules.nil?
          end
          nic_dns_settings = nic.dns_settings
          unless nic_dns_settings.nil?
            hash['dns_servers'] = nic_dns_settings.dns_servers
            hash['applied_dns_servers'] = nic_dns_settings.applied_dns_servers
            hash['internal_dns_name_label'] = nic_dns_settings.internal_dns_name_label
            hash['internal_fqd'] = nic_dns_settings.internal_fqdn
          end
          hash['enable_accelerated_networking'] = nic.enable_accelerated_networking
          hash
        end

        def save(async = false)
          requires :name
          requires :location
          requires :resource_group
          requires :subnet_id
          requires :ip_configuration_name
          requires :private_ip_allocation_method

          nic_response = service.create_or_update_network_interface(resource_group, name, location, subnet_id, public_ip_address_id, network_security_group_id, ip_configuration_name, private_ip_allocation_method, private_ip_address, load_balancer_backend_address_pools_ids, load_balancer_inbound_nat_rules_ids, tags, enable_accelerated_networking, async)

          if async
            nic_response
          else
            merge_attributes(Fog::Network::AzureRM::NetworkInterface.parse(nic_response))
          end
        end

        def update(updated_attributes = {})
          validate_update_attributes!(updated_attributes)
          merge_attributes(updated_attributes)
          nic = service.create_or_update_network_interface(resource_group, name, location, subnet_id, public_ip_address_id, network_security_group_id, ip_configuration_name, private_ip_allocation_method, private_ip_address)
          merge_attributes(Fog::Network::AzureRM::NetworkInterface.parse(nic))
        end

        def attach_subnet(subnet_id)
          raise 'Subnet ID can not be nil.' if subnet_id.nil?
          nic = service.attach_resource_to_nic(resource_group, name, SUBNET, subnet_id)
          merge_attributes(Fog::Network::AzureRM::NetworkInterface.parse(nic))
        end

        def attach_public_ip(public_ip_id)
          raise 'Public-IP ID can not be nil.' if public_ip_id.nil?
          nic = service.attach_resource_to_nic(resource_group, name, PUBLIC_IP, public_ip_id)
          merge_attributes(Fog::Network::AzureRM::NetworkInterface.parse(nic))
        end

        def attach_network_security_group(network_security_group_id)
          raise 'Network-Security-Group ID can not be nil.' if network_security_group_id.nil?
          nic = service.attach_resource_to_nic(resource_group, name, NETWORK_SECURITY_GROUP, network_security_group_id)
          merge_attributes(Fog::Network::AzureRM::NetworkInterface.parse(nic))
        end

        def detach_public_ip
          raise "Error detaching Public IP. No Public IP is attached to Network Interface #{name}" if public_ip_address_id.nil?
          nic = service.detach_resource_from_nic(resource_group, name, PUBLIC_IP)
          merge_attributes(Fog::Network::AzureRM::NetworkInterface.parse(nic))
        end

        def detach_network_security_group
          raise "Error detaching Network Security Group. No Security Group is attached to Network Interface #{name}" if network_security_group_id.nil?
          nic = service.detach_resource_from_nic(resource_group, name, NETWORK_SECURITY_GROUP)
          merge_attributes(Fog::Network::AzureRM::NetworkInterface.parse(nic))
        end

        def destroy
          service.delete_network_interface(resource_group, name)
        end

        def validate_update_attributes!(hash)
          restricted_attributes = [:name, :id, :resource_group, :location, :ip_configuration_name, :ip_configuration_id]
          hash_keys = hash.keys
          invalid_attributes = restricted_attributes & hash_keys
          raise "Attributes #{invalid_attributes.join(', ')} can not be updated." unless invalid_attributes.empty?
        end
      end
    end
  end
end