Do not cache host resolution in DCAEGEN2 nginx
[oom.git] / kubernetes / config / docker / init / src / config / dcaegen2 / heat / entrypoint.sh
1 #/bin/bash
2 set -x
3
4 function configure_dns_designate() {
5     # Check whether the SIMPLEDEMO_ONAP_ORG_ZONE_ID exists
6     EXISTING_ZONES=`openstack zone list -f=yaml -c=name | awk ' { print$3 } '`
7     if [[ $EXISTING_ZONES =~ (^|[[:space:]])$SIMPLEDEMO_ONAP_ORG_ZONE_NAME($|[[:space:]]) ]]
8     then
9         echo "Zone $SIMPLEDEMO_ONAP_ORG_ZONE_NAME already exist, retrieving it's ID."
10         SIMPLEDEMO_ONAP_ORG_ZONE_ID=`openstack zone list -f=yaml --name=simpledemo.onap.org. -c=id | awk ' { print $3 } '`
11         echo "Zone $SIMPLEDEMO_ONAP_ORG_ZONE_NAME id is: $SIMPLEDEMO_ONAP_ORG_ZONE_ID"
12     else
13         echo "Zone $SIMPLEDEMO_ONAP_ORG_ZONE_NAME doens't exist, creating ..."
14         SIMPLEDEMO_ONAP_ORG_ZONE_ID=`openstack zone create --email=oom@onap.org --description="DNS zone bridging DCAE and OOM" --type=PRIMARY $SIMPLEDEMO_ONAP_ORG_ZONE_NAME -f=yaml -c id | awk '{ print $2} '`
15
16         echo "Create recordSet for $SIMPLEDEMO_ONAP_ORG_ZONE_NAME"
17         openstack recordset create --type=A --ttl=10 --records=$NODE_IP $SIMPLEDEMO_ONAP_ORG_ZONE_ID vm1.aai
18         openstack recordset create --type=A --ttl=10 --records=$NODE_IP $SIMPLEDEMO_ONAP_ORG_ZONE_ID vm1.sdc
19         openstack recordset create --type=A --ttl=10 --records=$NODE_IP $SIMPLEDEMO_ONAP_ORG_ZONE_ID vm1.mr
20         openstack recordset create --type=A --ttl=10 --records=$NODE_IP $SIMPLEDEMO_ONAP_ORG_ZONE_ID vm1.policy
21         openstack recordset create --type=A --ttl=10 --records=$NODE_IP $SIMPLEDEMO_ONAP_ORG_ZONE_ID vm1.openo
22
23         echo "Create CNAMEs for $SIMPLEDEMO_ONAP_ORG_ZONE_NAME"
24         # AAI
25         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.aai.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c1.vm1.aai.simpledemo.onap.org.
26         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.aai.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c2.vm1.aai.simpledemo.onap.org.
27         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.aai.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c3.vm1.aai.simpledemo.onap.org.
28         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.aai.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID aai.api.simpledemo.onap.org.
29         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.aai.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID aai.ui.simpledemo.onap.org.
30         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.aai.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID aai.searchservice.simpledemo.onap.org.
31
32         # SDC
33         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.sdc.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c1.vm1.sdc.simpledemo.onap.org.
34         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.sdc.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c2.vm1.sdc.simpledemo.onap.org.
35         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.sdc.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c3.vm1.sdc.simpledemo.onap.org.
36         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.sdc.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c4.vm1.sdc.simpledemo.onap.org.
37
38         # Policy
39         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.policy.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c1.vm1.policy.simpledemo.onap.org.
40         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.policy.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c2.vm1.policy.simpledemo.onap.org.
41         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.policy.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c3.vm1.policy.simpledemo.onap.org.
42         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.policy.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c4.vm1.policy.simpledemo.onap.org.
43         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.policy.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c5.vm1.policy.simpledemo.onap.org.
44         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.policy.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c6.vm1.policy.simpledemo.onap.org.
45         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.policy.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c7.vm1.policy.simpledemo.onap.org.
46         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.policy.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID c8.vm1.policy.simpledemo.onap.org.
47         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.policy.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID policy.api.simpledemo.onap.org.
48
49         # MR
50         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.mr.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID ueb.api.simpledemo.onap.org.
51
52         # Open-O
53         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.openo.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID msb.api.simpledemo.onap.org.
54         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.openo.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID mvim.api.simpledemo.onap.org.
55         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.openo.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID vnfsdk.api.simpledemo.onap.org.
56         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.openo.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID vfc.api.simpledemo.onap.org.
57         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.openo.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID uui.api.simpledemo.onap.org.
58         openstack recordset create --type=CNAME --ttl=86400 --records=vm1.openo.simpledemo.onap.org. $SIMPLEDEMO_ONAP_ORG_ZONE_ID esr.api.simpledemo.onap.org.
59     fi
60 }
61
62 function monitor_nginx_node_ip() {
63     echo "Monitor DCAE nginx host ip..."
64     while true
65     do
66         # Get the Kubernetes Node IP hosting the DCAE NGINX pod
67         NODE_IP=`kubectl get services dcaegen2 -o jsonpath='{.status.loadBalancer.ingress[0].ip}'`
68
69         # Lookup the IP for the first DNS record entry
70         # Assumption is made all entried are sharing the same IP, hence if the first one is different
71         # We update the whole table
72         CURRENT_NODE_IP=`openstack recordset list $SIMPLEDEMO_ONAP_ORG_ZONE_ID -c records --type=A -f yaml | head -n 1 | awk ' { print $3 } '`
73
74         if [ "$NODE_IP" != "$CURRENT_NODE_IP" ]; then
75             refresh_dns_records
76         fi
77
78         # refresh every 10 seconds
79         sleep 10
80     done
81 }
82
83 function refresh_dns_records() {
84     echo "DCAE nginx host ip has changed, update DNS records..."
85     # Get the Kubernetes Node IP hosting the DCAE NGINX pod
86     NODE_IP=`kubectl get services dcaegen2 -o jsonpath='{.status.loadBalancer.ingress[0].ip}'`
87
88     # Update all the simpledemo record
89     SIMPLEDEMO_ONAP_ORG_RECORD_TYPE_A_IDS=`openstack recordset list $SIMPLEDEMO_ONAP_ORG_ZONE_ID --type=A -c=id -f=yaml | awk ' { print $3 } '`
90     for record_id in $SIMPLEDEMO_ONAP_ORG_RECORD_TYPE_A_IDS
91     do
92         openstack recordset set --records=$NODE_IP $SIMPLEDEMO_ONAP_ORG_ZONE_ID $record_id
93     done
94 }
95
96 #############################################################################################################
97 #                                           Script starts here                                              #
98 #############################################################################################################
99
100 # Retrieve the namespace
101 if [ "$#" -ne 1 ]; then
102         echo "Usage: $(basename $0) <namespace>"
103         exit 1
104 fi
105 NAMESPACE=$1
106
107 # K8S variable
108 MR_ZONE="$NAMESPACE-message-router"
109
110 # Heat variable
111 STACK_NAME="dcae"
112
113 # DNS variables
114 SIMPLEDEMO_ONAP_ORG_ZONE_NAME="simpledemo.onap.org."
115 SIMPLEDEMO_ONAP_ORG_ZONE_ID=""
116
117 # Install required packages to interfact with OpenStack CLIs
118 apt update -y
119 apt -y install python-pip
120 pip install python-openstackclient
121 pip install python-heatclient
122 pip install python-designateclient
123
124 # Instal kubectl commands
125 apt -y install curl
126 curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
127 chmod +x ./kubectl
128 mv ./kubectl /usr/local/bin/kubectl
129
130 # Get the Kubernetes Node IP hosting the DCAE NGINX pod
131 NODE_IP=`kubectl get services dcaegen2 -o jsonpath='{.status.loadBalancer.ingress[0].ip}'`
132
133 # Source OpenStack parameters to deploy DCAE
134 if [ "DCAE_OS_API_VERSION_HERE" = "v2.0" ]
135 then
136     source /opt/heat/DCAE-openrc-v2.sh
137 else
138     source /opt/heat/DCAE-openrc-v3.sh
139 fi
140
141 # Create stasck if doens't exist
142 EXISTING_STACKS=`openstack stack list -c 'Stack Name' -f yaml | awk '{ print $4}'`
143 if ! [[ $EXISTING_STACKS =~ (^|[[:space:]])$STACK_NAME($|[[:space:]]) ]]
144 then
145     # create the DCAE stack
146     openstack stack create -t /opt/heat/onap_dcae.yaml -e /opt/heat/onap_dcae.env $STACK_NAME
147
148     # wait 10 seconds to let the stack start, so the ips have been assigned.
149     sleep 10
150
151     # get the DCAE Boostrap VM ip, to configure Robot with it, for Healthcheck
152     DCAE_CONTROLLER_IP=`openstack stack output show dcae dcae_floating_ip -c output_value -f yaml | awk '{ print $2}'`
153     sed -i -e "s/DCAE_CONTROLLER_IP_HERE/$DCAE_CONTROLLER_IP/g" /opt/robot/vm_properties.py;
154 fi
155
156 # Source OpenStack parameters for DNS Designate
157 if [ "DNSAAS_API_VERSION_HERE" = "v2.0" ]
158 then
159     source /opt/heat/DNS-openrc-v2.sh
160 else
161     source /opt/heat/DNS-openrc-v3.sh
162 fi
163
164 configure_dns_designate
165
166 monitor_nginx_node_ip