aboutsummaryrefslogtreecommitdiffstats
path: root/common/puppet-opnfv/manifests/external_net_presetup.pp
blob: b7c7c5f07a07fb65bd0f38ac24b7eb76e51e90ed (plain)
1
2
3
4
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#Copyright 2015 Open Platform for NFV Project, Inc. and its contributors
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

class opnfv::external_net_presetup {

  if $public_gateway == '' { fail('public_gateway is empty') }
  if $public_dns == '' { fail('public_dns is empty') }
  if $public_network == '' { fail('public_network is empty') }
  if $public_subnet == '' { fail('public_subnet is empty') }
  if $public_allocation_start == '' { fail('public_allocation_start is empty') }
  if $public_allocation_end == '' { fail('public_allocation_end is empty') }
  if !$controllers_hostnames_array { fail('controllers_hostnames_array is empty') }
  $controllers_hostnames_array_str = $controllers_hostnames_array
  $controllers_hostnames_array = split($controllers_hostnames_array, ',')

  #find public NIC
  $public_nic = get_nic_from_network("$public_network")
  $public_nic_ip = get_ip_from_nic("$public_nic")
  $public_nic_netmask = get_netmask_from_nic("$public_nic")

 if ($public_nic == '') or ($public_nic_ip == '') or ($public_nic == "br-ex") or ($public_nic == "br_ex") {
  notify {"Skipping augeas, public_nic ${public_nic}, public_nic_ip ${public_nic_ip}":} 

  exec {'ovs-vsctl -t 10 -- --may-exist add-br br-ex':
       path         => ["/usr/sbin/", "/usr/bin/"],
       unless       => 'ip addr show br-ex | grep "inet "',
       before       => Exec['restart-network-public-nic-ip'],
  }
  ~>
  exec {'systemctl restart network':
       path         => ["/usr/sbin/", "/usr/bin/"],
       refreshonly  => 'true',
  }

  exec {'restart-network-public-nic-ip':
       command      => 'systemctl restart network',
       path         => ["/usr/sbin/", "/usr/bin/"],
       onlyif       => 'ip addr show | grep $(ip addr show br-ex | grep -Eo "inet [\.0-9]+" | cut -d " " -f2) | grep -v br-ex',
  }

 } else {
  #reconfigure public interface to be ovsport
  augeas { "main-$public_nic":
        context => "/files/etc/sysconfig/network-scripts/ifcfg-$public_nic",
        changes => [
                "rm IPADDR",
                "rm NETMASK",
                "rm GATEWAY",
                "rm DNS1",
                "rm BOOTPROTO",
                "rm DEFROUTE",
                "rm IPV6_DEFROUTE",
                "rm IPV6_PEERDNS",
                "rm IPV6_PEERROUTES",
                "rm PEERROUTES",
                "set PEERDNS no",
                "set BOOTPROTO static",
                "set IPV6INIT no",
                "set IPV6_AUTOCONF no",
                "set ONBOOT yes",
                "set TYPE OVSPort",
                "set OVS_BRIDGE br-ex",
                "set PROMISC yes"

        ],
        before  => Class["quickstack::pacemaker::params"],
        require => Service["openvswitch"],
  }

  ->
  #create br-ex interface
  file { 'external_bridge':
        path => '/etc/sysconfig/network-scripts/ifcfg-br-ex',
        owner   => 'root',
        group   => 'root',
        mode    => '0644',
        content => template('trystack/br_ex.erb'),
        before  => Class["quickstack::pacemaker::params"],
  }
  ->
  exec {'ovs-vsctl -t 10 -- --may-exist add-br br-ex':
       path         => ["/usr/sbin/", "/usr/bin/"],
  }
  ~>
  exec {'systemctl restart network':
       path         => ["/usr/sbin/", "/usr/bin/"],
       refreshonly  => 'true',
  }

 }
}