#
# Configure the Nuage plugin for neutron.
#
# === Parameters
#
# [*nuage_net_partition_name*]
#   (required) The net partition under which the VMs will be
#   seen in the VSD
#
# [*nuage_vsd_ip*]
#   (required) IP address of the Virtual Services Directory
#
# [*nuage_vsd_username*]
#   (required) Username to be used to log into VSD
#
# [*nuage_vsd_password*]
#   (required) Password to be used to log into VSD
#
# [*nuage_vsd_organization*]
#   (required) Parameter required to log into VSD
#
# [*nuage_base_uri_version*]
#   (required) URI version to be used based on the VSD release
#   For example v3_0
#
# [*nuage_cms_id*]
#   (required) CMS ID generated by the VSD
#
# [*nuage_auth_resource*]
#   (optional) The auth resource value to be use to connect
#   to VSD. The default is /me
#
# [*nuage_server_ssl*]
#   (optional) Flag to determine whether to use ssl connection
#   to connect to VSD. The default is True
#
# [*purge_config*]
#   (optional) Whether to set only the specified config options
#   in the nuage config.
#   Defaults to false.
#
class neutron::plugins::nuage (
  $nuage_net_partition_name,
  $nuage_vsd_ip,
  $nuage_vsd_username,
  $nuage_vsd_password,
  $nuage_vsd_organization,
  $nuage_base_uri_version,
  $nuage_cms_id,
  $nuage_auth_resource    = '/me',
  $nuage_server_ssl       = true,
  $purge_config           = false,
) {

  include neutron::deps
  include neutron::params

  file { '/etc/neutron/plugins/nuage':
    ensure => directory,
    tag    => 'neutron-config-file',
  }

  if $::osfamily == 'Debian' {
    file_line { '/etc/default/neutron-server:NEUTRON_PLUGIN_CONFIG':
      path  => '/etc/default/neutron-server',
      match => '^NEUTRON_PLUGIN_CONFIG=(.*)$',
      line  => "NEUTRON_PLUGIN_CONFIG=${::neutron::params::nuage_config_file}",
      tag   => 'neutron-file-line',
    }
  }

  if $::osfamily == 'Redhat' {
    file { '/etc/neutron/plugin.ini':
      ensure  => link,
      require => File['/etc/neutron/plugins/nuage/plugin.ini'],
      target  => $::neutron::params::nuage_config_file,
      tag     => 'neutron-config-file',
    }
  }

  file { '/etc/neutron/plugins/nuage/plugin.ini':
    ensure  => file,
    owner   => 'root',
    group   => 'neutron',
    require => File['/etc/neutron/plugins/nuage'],
    mode    => '0640',
    tag     => 'neutron-config-file',
  }

  resources { 'neutron_plugin_nuage':
    purge => $purge_config,
  }

  $nuage_base_uri_base = '/nuage/api'
  neutron_plugin_nuage {
    'RESTPROXY/default_net_partition_name': value => $nuage_net_partition_name;
    'RESTPROXY/server':                     value => $nuage_vsd_ip;
    'RESTPROXY/serverauth':                 value => "${nuage_vsd_username}:${nuage_vsd_password}";
    'RESTPROXY/organization':               value => $nuage_vsd_organization;
    'RESTPROXY/auth_resource':              value => $nuage_auth_resource;
    'RESTPROXY/serverssl':                  value => $nuage_server_ssl;
    'RESTPROXY/base_uri':                   value => "${nuage_base_uri_base}/${nuage_base_uri_version}";
    'RESTPROXY/cms_id':                     value => $nuage_cms_id;
  }

  if ($::neutron::core_plugin != 'nuage_neutron.plugins.nuage.plugin.NuagePlugin') and
    ($::neutron::core_plugin != 'nuage') {
    fail('Nuage plugin should be the core_plugin in neutron.conf')
  }
}
