-
Notifications
You must be signed in to change notification settings - Fork 11
/
maak8DR-apply.sh
104 lines (93 loc) · 5.11 KB
/
maak8DR-apply.sh
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
#!/bin/bash
## maak8DR-apply.sh script version 1.0.
##
## Copyright (c) 2023 Oracle and/or its affiliates
## Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
##
### This script will creat a ta backup of artifacts in an origin K8s cluster, shipt to a remote K8s cluster
### and apply/create all of them in that target cluster.
### It uses variables defined in maak8s.env. For this script the following variables need to be edited
### maak8DR-apply.env:
### sechost
### This is the node that will be used to access the secondary K8s cluster. It needs to be configured
### to run kubectl operations
### user_sec
### This is the OS user that will be used to ssh into the bastion node
### ssh_key
### This is the ssh key to be used to log into the bastion node
###
### The rest of the variables can be defaulted or altered if the application requires other resources
### Usage:
###
### ./maak8DR-apply.sh [NAMESPACE LIST (optional)]
### Where:
### NAMESPACE LIST
### Is an optional parameter that allows specifying a list of namespaces to be replicated
### If no list is provided, the script will replicate all namespaces except the infrastructure
### ones listed in exclude_list
### Example:
### ./maak8DR-apply.sh "traefik soans opns"
### Copies all artifacts in the traefik, soans and opns namespaces in the origin K8s cluster to
### the target cluster (as entereed in the maak8DR-apply.env file). Notice that if
### there are dependencies between namespaces it is required to use an ordered list of namespaces
### to restore properly (i.e. list first the namespaces on which others depend)
### ./maak8DR-apply.sh
### Copies all artifacts in ALL the namespaces (except the infrastructure ones listed in the
### ./maak8DR-apply.env exclude_list variable) in the source K8s cluster to the target
### cluster (as entereed in the maak8DR-apply.env file). Notice that if
### there are dependencies between namespaces it is required to use an ordered list of namespaces
### to restore properly (i.e. list first the namespaces on which others depend)
rootdt=`date +%y-%m-%d-%H-%M-%S`
export basedir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "**** SYNCHRONIZATION OF TWO K8s CLUSTERS BASED ON YAML EXTRACTION AND APPLY ****"
echo "Make sure you have provided the required information in the env file $basedir/maak8DR-apply.env"
. $basedir/maak8DR-apply.env
tmp_dir=/tmp/backup.$rootdt
if [[ $# -eq 0 ]]; then
export namespace_list=
echo "Synchronizing clusters for all namespaces except $exclude_list ..."
elif [[ $# -eq 1 ]]; then
export namespace_list=$1
echo "Synchronizing clusters for $namespace_list namespaces ..."
else
echo ""
echo "ERROR: Incorrect number of parameters used: Expected 0 or 1 got $#"
echo ""
echo "Usage:"
echo " $0 [NAMESPACE LIST]"
echo ""
echo "Example: "
echo " $0 "
echo "Synchronizes all namespaces and non-namespaced artifacts $nons_artifacts_types in k8s cluster except $exclude_list"
echo "Example: "
echo " $0 'ns1 ns2 ns3'"
echo "Synchronizes namespaces ns1, ns2, ns3 and non-namespaced artifacts $nons_artifacts_types in k8s cluster except $exclude_list"
exit 1
fi
mkdir $tmp_dir
echo "Creating backup in source cluster..."
${basedir}/maak8-get-all-artifacts.sh ${tmp_dir} "$namespace_list"
tarball_with_path=`${basedir}/maak8-get-all-artifacts.sh ${tmp_dir} "$namespace_list" | grep "packaged at" | awk -F'packaged at' '{print $2}'`
tar_file=`basename $tarball_with_path`
echo "Backup tar: $tarball_with_path"
#echo "TAR FILE: $tar_file"
ssh -i $ssh_key_sec $user_sec@$sechost "mkdir $tmp_dir"
echo "Shipping backup to secondary..."
scp -i $ssh_key_sec ${tarball_with_path} $user_sec@${sechost}:${tmp_dir}/
scp -i $ssh_key_sec $basedir/maak8-push-all-artifacts.sh $user_sec@$sechost:/tmp/
scp -i $ssh_key_sec $basedir/removeyamlblock.sh $user_sec@$sechost:/tmp/
scp -i $ssh_key_sec $basedir/maak8-get-all-artifacts.sh $user_sec@$sechost:/tmp/
scp -i $ssh_key_sec $basedir/apply-artifacts.sh $user_sec@$sechost:/tmp/
scp -i $ssh_key_sec $basedir/maak8DR-apply.env $user_sec@$sechost:/tmp/
ssh -i $ssh_key_sec $user_sec@$sechost "chmod +x /tmp/maak8-push-all-artifacts.sh"
ssh -i $ssh_key_sec $user_sec@$sechost "chmod +x /tmp/maak8-get-all-artifacts.sh"
ssh -i $ssh_key_sec $user_sec@$sechost "chmod +x /tmp/removeyamlblock.sh"
ssh -i $ssh_key_sec $user_sec@$sechost "chmod +x /tmp/apply-artifacts.sh"
echo "Restoring in target cluster...This may take several minutes..."
echo "Restore log can be found at $tmp_dir/restore.log in the remote node"
ssh -i $ssh_key_sec $user_sec@$sechost "/tmp/maak8-push-all-artifacts.sh $tmp_dir/$tar_file $tmp_dir > $tmp_dir/restore.log 2>&1"
echo "*****************************RESTORED CLUSTER STATUS*****************************"
ssh -i $ssh_key_sec $user_sec@$sechost "kubectl get all -A"
ssh -i $ssh_key_sec $user_sec@$sechost "kubectl get pv -A"
ssh -i $ssh_key_sec $user_sec@$sechost "kubectl get pvc -A"
echo "All done!"