Defined Type: psick::network::netplan::interface

Defined in:
manifests/network/netplan/interface.pp

Overview

Define psick::network::netplan::interface

Define to manage an interface via netplan

Parameters:

  • ensure (Enum['present','absent']) (defaults to: 'present')
  • interface_name (String) (defaults to: $title)
  • config_file_name (String) (defaults to: "50-${title}.yaml")
  • interface_type (String) (defaults to: 'ethernet')
  • interface_options (Hash) (defaults to: {})
  • config_dir_path (Stdlib::Absolutepath) (defaults to: '/etc/netplan')
  • reload_command (Optional[String]) (defaults to: 'netplan apply')
  • renderer (String) (defaults to: 'networkd')
  • version (Numeric) (defaults to: 2)
  • dhcp4 (Psick::Network::NetplanDhcp) (defaults to: false)
  • dhcp6 (Psick::Network::NetplanDhcp) (defaults to: false)
  • macaddress (Optional[Stdlib::MAC]) (defaults to: getvar("networking.interfaces.${interface_name}.mac"))
  • addresses (Variant[Undef,Psick::Network::NetplanAddresses]) (defaults to: undef)
  • routes (Variant[Undef,Array]) (defaults to: undef)
  • gateway4 (Optional[Stdlib::IP::Address::V4]) (defaults to: undef)
  • gateway6 (Optional[Stdlib::IP::Address::V6]) (defaults to: undef)
  • nameservers (Optional[Hash]) (defaults to: undef)
  • parameters (Optional[Hash]) (defaults to: undef)
  • file_content (Optional[String]) (defaults to: undef)
  • file_source (Optional[String]) (defaults to: undef)


5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'manifests/network/netplan/interface.pp', line 5

define psick::network::netplan::interface (
  Enum['present','absent'] $ensure              = 'present',

  String $interface_name                        = $title,
  String $config_file_name                        = "50-${title}.yaml",
  String $interface_type                        = 'ethernet',
  Hash   $interface_options                     = {},

  Stdlib::Absolutepath $config_dir_path         = '/etc/netplan',
  Optional[String] $reload_command              = 'netplan apply', # lint:ignore:optional_default

  String $renderer                              = 'networkd',
  Numeric $version                              = 2,

  Psick::Network::NetplanDhcp $dhcp4            = false,
  Psick::Network::NetplanDhcp $dhcp6            = false,

  Optional[Stdlib::MAC]             $macaddress = getvar("networking.interfaces.${interface_name}.mac"),
  Variant[Undef,Psick::Network::NetplanAddresses] $addresses = undef,
  Variant[Undef,Array]              $routes     = undef,
  Optional[Stdlib::IP::Address::V4] $gateway4      = undef,
  Optional[Stdlib::IP::Address::V6] $gateway6      = undef,
  Optional[Hash]                   $nameservers = undef,
  Optional[Hash]                   $parameters  = undef,

  Optional[String] $file_content                = undef,
  Optional[String] $file_source                 = undef,

) {
  # Define how to restart network service
  if $reload_command {
    $network_notify = 'Exec[psick::network::netplan::interface reload]'
    if !defined(Exec['psick::network::netplan::interface reload']) {
      exec { 'psick::network::netplan::interface reload':
        command     => $reload_command,
        refreshonly => true,
        path        => $facts['path'],
      }
    }
    pick_default($reload_command, $psick::network::manage_config_file_notify)
  } else {
    $network_notify = pick_default($psick::network::manage_config_file_notify)
  }

  $match_values = $macaddress ? {
    undef   => {},
    default => {
      match   => {
        macaddress => $macaddress,
      },
    }
  }

  $default_values = {
    dhcp4       => $dhcp4,
    dhcp6       => $dhcp6,
    addresses   => $addresses,
    gateway4    => $gateway4,
    gateway6    => $gateway6,
    routes      => $routes,
    nameservers => $nameservers,
    parameters  => $parameters,
  }

  $netplan_data = {
    'network' => {
      'version'            => $version,
      "${interface_type}s" => {
        $interface_name => delete_undef_values($default_values + $match_values + $interface_options),
      },
    },
  }

  $real_file_content = $file_source ? {
    undef   => pick($file_content,to_yaml($netplan_data)),
    default => undef,
  }
  file { "${config_dir_path}/${config_file_name}":
    ensure  => $ensure,
    content => $real_file_content,
    source  => $file_source,
    notify  => $network_notify,
  }
}