Merge branch 'master' into merge-master-arno
[genesis.git] / common / puppet-opnfv / manifests / external_net_presetup.pp
1 #Copyright 2015 Open Platform for NFV Project, Inc. and its contributors
2 #
3 #   Licensed under the Apache License, Version 2.0 (the "License");
4 #   you may not use this file except in compliance with the License.
5 #   You may obtain a copy of the License at
6 #
7 #       http://www.apache.org/licenses/LICENSE-2.0
8 #
9 #   Unless required by applicable law or agreed to in writing, software
10 #   distributed under the License is distributed on an "AS IS" BASIS,
11 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 #   See the License for the specific language governing permissions and
13 #   limitations under the License.
14
15 class opnfv::external_net_presetup {
16
17   if $public_gateway == '' { fail('public_gateway is empty') }
18   if $public_dns == '' { fail('public_dns is empty') }
19   if $public_network == '' { fail('public_network is empty') }
20   if $public_subnet == '' { fail('public_subnet is empty') }
21   if $public_allocation_start == '' { fail('public_allocation_start is empty') }
22   if $public_allocation_end == '' { fail('public_allocation_end is empty') }
23   if !$controllers_hostnames_array { fail('controllers_hostnames_array is empty') }
24   $controllers_hostnames_array_str = $controllers_hostnames_array
25   $controllers_hostnames_array = split($controllers_hostnames_array, ',')
26
27   #find public NIC
28   $public_nic = get_nic_from_network("$public_network")
29   $public_nic_ip = get_ip_from_nic("$public_nic")
30   $public_nic_netmask = get_netmask_from_nic("$public_nic")
31
32  if ($public_nic == '') or ($public_nic_ip == '') or ($public_nic == "br-ex") or ($public_nic == "br_ex") {
33   notify {"Skipping augeas, public_nic ${public_nic}, public_nic_ip ${public_nic_ip}":} 
34
35   exec {'ovs-vsctl -t 10 -- --may-exist add-br br-ex':
36        path         => ["/usr/sbin/", "/usr/bin/"],
37        unless       => 'ip addr show br-ex | grep "inet "',
38        before       => Exec['restart-network-public-nic-ip'],
39   }
40   ~>
41   exec {'systemctl restart network':
42        path         => ["/usr/sbin/", "/usr/bin/"],
43        refreshonly  => 'true',
44   }
45
46   exec {'restart-network-public-nic-ip':
47        command      => 'systemctl restart network',
48        path         => ["/usr/sbin/", "/usr/bin/"],
49        onlyif       => 'ip addr show | grep $(ip addr show br-ex | grep -Eo "inet [\.0-9]+" | cut -d " " -f2) | grep -v br-ex',
50   }
51
52  } else {
53   #reconfigure public interface to be ovsport
54   augeas { "main-$public_nic":
55         context => "/files/etc/sysconfig/network-scripts/ifcfg-$public_nic",
56         changes => [
57                 "rm IPADDR",
58                 "rm NETMASK",
59                 "rm GATEWAY",
60                 "rm DNS1",
61                 "rm BOOTPROTO",
62                 "rm DEFROUTE",
63                 "rm IPV6_DEFROUTE",
64                 "rm IPV6_PEERDNS",
65                 "rm IPV6_PEERROUTES",
66                 "rm PEERROUTES",
67                 "set PEERDNS no",
68                 "set BOOTPROTO static",
69                 "set IPV6INIT no",
70                 "set IPV6_AUTOCONF no",
71                 "set ONBOOT yes",
72                 "set TYPE OVSPort",
73                 "set OVS_BRIDGE br-ex",
74                 "set PROMISC yes"
75
76         ],
77         before  => Class["quickstack::pacemaker::params"],
78         require => Service["openvswitch"],
79   }
80
81   ->
82   #create br-ex interface
83   file { 'external_bridge':
84         path => '/etc/sysconfig/network-scripts/ifcfg-br-ex',
85         owner   => 'root',
86         group   => 'root',
87         mode    => '0644',
88         content => template('opnfv/br_ex.erb'),
89         before  => Class["quickstack::pacemaker::params"],
90   }
91   ->
92   exec {'ovs-vsctl -t 10 -- --may-exist add-br br-ex':
93        path         => ["/usr/sbin/", "/usr/bin/"],
94   }
95   ~>
96   exec {'systemctl restart network':
97        path         => ["/usr/sbin/", "/usr/bin/"],
98        refreshonly  => 'true',
99   }
100
101  }
102 }