|
| 1 | +#! /bin/bash |
| 2 | + |
| 3 | + |
| 4 | +kctl() { |
| 5 | + if [ ! -z $KUBE_CONFIG_PATH ] ; then |
| 6 | + kubectl --kubeconfig $KUBE_CONFIG_PATH -n $NAMESPACE "$@" |
| 7 | + else |
| 8 | + kubectl -n $NAMESPACE "$@" |
| 9 | + fi |
| 10 | +} |
| 11 | + |
| 12 | +function get_logs |
| 13 | +{ |
| 14 | + C_FETCH="flow" |
| 15 | + if [ $COMPONENT == "all" ] ; then |
| 16 | + C_FETCH="flow" |
| 17 | + else |
| 18 | + C_FETCH=$COMPONENT |
| 19 | + fi |
| 20 | + for i in $(kctl get po|awk '{print $1}'|awk 'NR!=1'|grep $C_FETCH) |
| 21 | + do |
| 22 | + echo "Fetching logs for $i" |
| 23 | + echo "Creating Directory $OUTPUT/$i/logs" |
| 24 | + mkdir -p $OUTPUT/$i/logs |
| 25 | + echo "Copying logs from $i to $OUTPUT/$i/logs" |
| 26 | + kctl cp $i:/opt/cbflow/logs $OUTPUT/$i/logs |
| 27 | + done |
| 28 | + |
| 29 | +} |
| 30 | +function initScript |
| 31 | +{ |
| 32 | + NAMESPACE="" |
| 33 | + COMPONENT="all" |
| 34 | + OUTPUT="/tmp" |
| 35 | + KUBE_CONFIG_PATH="" |
| 36 | + while getopts h:n:c:o:k: opt |
| 37 | + do |
| 38 | + case "$opt" in |
| 39 | + h) usage "";exit 1;; |
| 40 | + n) NAMESPACE=$OPTARG;; |
| 41 | + c) COMPONENT=$OPTARG;; |
| 42 | + o) OUTPUT=$OPTARG;; |
| 43 | + k) KUBE_CONFIG_PATH=$OPTARG;; |
| 44 | + \?) usage "";exit 1;; |
| 45 | + esac |
| 46 | + done |
| 47 | + if [ -z $NAMESPACE ] ; |
| 48 | + then |
| 49 | + echo "$(date) Make sure you provide valid -n NAMESPACE" |
| 50 | + usage "" |
| 51 | + exit 1; |
| 52 | + fi |
| 53 | + |
| 54 | +} |
| 55 | + |
| 56 | +function usage |
| 57 | +{ |
| 58 | + cat <<EOF |
| 59 | +
|
| 60 | + Usage: |
| 61 | + ./get-logs.sh -n <Namespace> -c <Component> -o <Output> -k <kubeconfig-file-path> |
| 62 | +
|
| 63 | + Options: |
| 64 | + -n Namespace: The name of the Kubernetes namespace/project where CD/RO or Software Delievery Automation is deployed |
| 65 | + -c (Optional) Component: The name of component to fetch logs. defaults to all |
| 66 | + all, flow-server, flow-web, flow-devopsinsight, flow-bound-agent, flow-agent |
| 67 | + -o (Optional)Output path to copy logs. default is /tmp. |
| 68 | + -k (Optional)kubeconfig file path to connect to k8s cluster. |
| 69 | +
|
| 70 | + Examples: |
| 71 | + ./get-logs.sh -n flow-demo |
| 72 | + ./get-logs.sh -n flow-demo -c all -o /tmp/flow-logs |
| 73 | + ./get-logs.sh -n flow-demo -c flow-server -o /tmp/flow-logs |
| 74 | + ./get-logs.sh -n flow-demo -c flow-server -k /home/foo/kubeconfigfile |
| 75 | +EOF |
| 76 | +} |
| 77 | + |
| 78 | +function main |
| 79 | +{ |
| 80 | + initScript "$@" |
| 81 | + kctl get ns $NAMESPACE |
| 82 | + exit_code=$? |
| 83 | + if [ $exit_code != 0 ]; |
| 84 | + then |
| 85 | + echo "$(date) Please set valid namespace " |
| 86 | + echo "$(date) Please check kubectl configuration is set correctly. Logging utility not able to reach to k8s cluster" |
| 87 | + echo "$(date) Please set valid kubeconfig file if exist " |
| 88 | + exit 1; |
| 89 | + fi |
| 90 | + get_logs "$@" |
| 91 | +} |
| 92 | + |
| 93 | +main "$@" |
0 commit comments