Fixed bug in nat_osm when sourcing common/all_funcs
[osm/devops.git] / installers / nat_osm
1 #!/bin/bash
2 #   Copyright 2016 Telefónica Investigación y Desarrollo S.A.U.
3 #
4 #   Licensed under the Apache License, Version 2.0 (the "License");
5 #   you may not use this file except in compliance with the License.
6 #   You may obtain a copy of the License at
7 #
8 #       http://www.apache.org/licenses/LICENSE-2.0
9 #
10 #   Unless required by applicable law or agreed to in writing, software
11 #   distributed under the License is distributed on an "AS IS" BASIS,
12 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 #   See the License for the specific language governing permissions and
14 #   limitations under the License.
15
16 ############
17 # Functions
18 ############
19 usage(){
20     echo -e "usage: $0 [OPTIONS]"
21     echo -e "Install NAT rules for OSM"
22     echo -e "  OPTIONS"
23     echo -e "     -u:  UI/SO (rift) IP address"
24     echo -e "     -r:  RO (openmano) IP address"
25     echo -e "     -v:  VCA (juju) IP address"
26     echo -e "     -h:  show this help"
27 }
28
29 ###################
30 # End of functions
31 ###################
32
33 #Check root privileges
34 [ "$USER" != "root" ] && echo "Needed root privileges (run with sudo)" >&2 && exit 1
35
36 HERE=$(realpath $(dirname $0))
37 OSM_DEVOPS=$(dirname $HERE)
38 OSM_JENKINS="$OSM_DEVOPS/jenkins"
39 . $OSM_JENKINS/common/all_funcs
40
41 #Get default IP address
42 . $OSM_DEVOPS/installers/export_ips
43
44 UI_IP=$DEFAULT_IP
45 RO_IP=$DEFAULT_IP
46 VCA_IP=$DEFAULT_IP
47
48 #read input options
49 while getopts ":u:r:v:h-:" o; do
50     case "${o}" in
51         u)
52             export UI_IP="$OPTARG"
53             ;;
54         r)
55             export RO_IP="$OPTARG"
56             ;;
57         v)
58             export VCA_IP="$OPTARG"
59             ;;
60         h)
61             usage && exit 0
62             ;;
63         -)
64             [ "${OPTARG}" == "help" ] && usage && exit 0
65             echo -e "Invalid option: '--$OPTARG'\nTry $0 --help for more information" >&2
66             exit 1
67             ;;
68         \?)
69             echo -e "Invalid option: '-$OPTARG'\nTry $0 --help for more information" >&2
70             exit 1
71             ;;
72         :)
73             echo -e "Option '-$OPTARG' requires an argument\nTry $0 --help for more information" >&2
74             exit 1
75             ;;
76         *)
77             usage >&2
78             exit -1
79             ;;
80     esac
81 done
82
83 #############
84 # NAT port forwarding configuration
85 #############
86 echo
87 echo "*** Configuring iptables rules ***"
88
89 awk -v RO_IP="$RO_IP" -v VCA_IP="$VCA_IP" -v UI_IP="$UI_IP" -v openmano_ip="$RO_CONTAINER_IP" -v rift_ip="$SO_CONTAINER_IP" -v juju_ip="$VCA_CONTAINER_IP" '
90 BEGIN {innat=0; innatpre=0; osmpre=0; donepre=0; innatpost=0; osmpost=0; donepost=0}
91 /^\*nat/ {
92     innat=1;
93     print;
94     next
95 }
96 innat==1 && /\:PREROUTING/ {
97     innatpre=1;
98     print;
99     next;
100 }
101 innatpre==1 && /\#Autogenerated by nat_osm/ {
102     osmpre=1;
103     next;
104 }
105 osmpre==1 && /#End autogeneration by nat_osm/ {
106     print "#Autogenerated by nat_osm"
107     print "-A PREROUTING -d "RO_IP" -p tcp -m tcp --dport 9090 -j DNAT --to-destination "openmano_ip
108     print "-A PREROUTING -d "UI_IP" -p tcp -m tcp --dport 8000 -j DNAT --to-destination "rift_ip
109     print "-A PREROUTING -d "UI_IP" -p tcp -m tcp --dport 4567 -j DNAT --to-destination "rift_ip
110     print "-A PREROUTING -d "UI_IP" -p tcp -m tcp --dport 8443 -j DNAT --to-destination "rift_ip
111     #print "-A PREROUTING -d "VCA_IP" -p tcp -m tcp --dport 443 -j DNAT --to-destination "juju_ip
112     #print "-A PREROUTING -d "VCA_IP" -p tcp -m tcp --dport 17070 -j DNAT --to-destination "juju_ip
113     print "#End autogeneration by nat_osm"
114     osmpre=0;
115     donepre=1;
116     next;
117 }
118 osmpre==1 {next;}
119 innatpre==1 && /\:INPUT/ {
120     innatpre=0;
121     if (donepre==0) {
122         print "#Autogenerated by nat_osm"
123         print "-A PREROUTING -d "RO_IP" -p tcp -m tcp --dport 9090 -j DNAT --to-destination "openmano_ip
124         print "-A PREROUTING -d "UI_IP" -p tcp -m tcp --dport 8000 -j DNAT --to-destination "rift_ip
125         print "-A PREROUTING -d "UI_IP" -p tcp -m tcp --dport 4567 -j DNAT --to-destination "rift_ip
126         print "-A PREROUTING -d "UI_IP" -p tcp -m tcp --dport 8443 -j DNAT --to-destination "rift_ip
127         #print "-A PREROUTING -d "VCA_IP" -p tcp -m tcp --dport 443 -j DNAT --to-destination "juju_ip
128         #print "-A PREROUTING -d "VCA_IP" -p tcp -m tcp --dport 17070 -j DNAT --to-destination "juju_ip
129         print "#End autogeneration by nat_osm"
130         donepre=1;
131     }
132     print;
133     next;
134 }
135
136 innat==1 && /\:POSTROUTING/ {
137     innatpost=1;
138     print;
139     next;
140 }
141 innatpost==1 && /\#Autogenerated by nat_osm/ {
142     osmpost=1;
143     next;
144 }
145 osmpost==1 && /#End autogeneration by nat_osm/ {
146     #print "#Autogenerated by nat_osm"
147     #print "-A POSTROUTING -s "rift_ip" -p tcp -m tcp --dport 9090 -d "openmano_ip" -j SNAT --to "UI_IP
148     #print "-A POSTROUTING -s "rift_ip" -p tcp -m tcp --dport 17070 -d "juju_ip" -j SNAT --to "UI_IP
149     #print "#End autogeneration by nat_osm"
150     osmpost=0;
151     donepost=1;
152     next;
153 }
154 osmpost==1 {next;}
155 innatpost==1 && /COMMIT/ {
156     innatpost=0;
157     innat=0;
158     if (donepost==0) {
159         #print "#Autogenerated by nat_osm"
160         #print "-A POSTROUTING -s "rift_ip" -p tcp -m tcp --dport 9090 -d "openmano_ip" -j SNAT --to "UI_IP
161         #print "-A POSTROUTING -s "rift_ip" -p tcp -m tcp --dport 17070 -d "juju_ip" -j SNAT --to "UI_IP
162         #print "#End autogeneration by nat_osm"
163         donepost=1;
164     }
165     print;
166     next;
167 }
168 {
169     print
170 }
171 ' /etc/iptables/rules.v4 > testfile.tmp && mv testfile.tmp /etc/iptables/rules.v4
172
173 service netfilter-persistent restart
174