require 'fog/azurerm'
require 'yaml'

########################################################################################################################
######################                   Services object required by all actions                  ######################
######################                              Keep it Uncommented!                          ######################
########################################################################################################################

azure_credentials = YAML.load_file('credentials/azure.yml')

rs = Fog::Resources::AzureRM.new(
  tenant_id: azure_credentials['tenant_id'],
  client_id: azure_credentials['client_id'],
  client_secret: azure_credentials['client_secret'],
  subscription_id: azure_credentials['subscription_id']
)

network = Fog::Network::AzureRM.new(
  tenant_id: azure_credentials['tenant_id'],
  client_id: azure_credentials['client_id'],
  client_secret: azure_credentials['client_secret'],
  subscription_id: azure_credentials['subscription_id']
)

########################################################################################################################
######################                                 Prerequisites                              ######################
########################################################################################################################

resource_group = rs.resource_groups.create(
  name: 'TestRG-VN',
  location: 'eastus'
)

########################################################################################################################
######################                   Check Virtual Network name Availability                  ######################
########################################################################################################################

network.virtual_networks.check_if_exists('testVnet', 'TestRG-VN')

########################################################################################################################
######################            Create Virtual Network with complete parameters list            ######################
########################################################################################################################

network.virtual_networks.create(
  name:             'testVnet',
  location:         'eastus',
  resource_group:   resource_group.name,
  subnets:          [{
    name: 'mysubnet',
    address_prefix: '10.1.0.0/24'
  }],
  dns_servers:       ['10.1.0.0', '10.2.0.0'],
  address_prefixes:  ['10.1.0.0/16', '10.2.0.0/16']
)

########################################################################################################################
######################                      List Virtual Network                       #################################
########################################################################################################################

network.virtual_networks(resource_group: resource_group.name)

########################################################################################################################
######################                      Get Virtual Network                       ##################################
########################################################################################################################

vnet = network.virtual_networks.get(resource_group.name, 'testvnet')

########################################################################################################################
######################                Add/Remove DNS Servers to/from Virtual Network           #########################
########################################################################################################################

vnet.add_dns_servers(['10.3.0.0', '10.4.0.0'])

vnet.remove_dns_servers(['10.3.0.0', '10.4.0.0'])

########################################################################################################################
######################                Add/Remove Address Prefixes to/from Virtual Network      #########################
########################################################################################################################

vnet.add_address_prefixes(['10.2.0.0/16', '10.3.0.0/16'])

vnet.remove_address_prefixes(['10.2.0.0/16'])

########################################################################################################################
######################                Add/Remove Subnets to/from Virtual Network           #############################
########################################################################################################################

vnet.add_subnets(
  [
    {
      name: 'test-subnet',
      address_prefix: '10.3.0.0/24'
    }
  ]
)

vnet.remove_subnets(['test-subnet'])

########################################################################################################################
######################                Update Virtual Network                                  ##########################
########################################################################################################################

vnet.update(
  subnets:
    [
      {
        name: 'fog-subnet',
        address_prefix: '10.3.0.0/16'
      }
    ],
  dns_servers: ['10.3.0.0', '10.4.0.0']
)

########################################################################################################################
######################                Destroy Virtual Network                                  #########################
########################################################################################################################

vnet.destroy

########################################################################################################################
######################                                   CleanUp                                  ######################
########################################################################################################################

resource_group.destroy