github.com/verrazzano/verrazzano@v1.7.1/tests/e2e/config/scripts/oci_dns_ops.sh (about)

     1  #!/bin/bash
     2  #
     3  # Copyright (c) 2020, 2022, Oracle and/or its affiliates.
     4  # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
     5  #
     6  
     7  function usage {
     8      echo
     9      echo "usage: $0 [-o operation] [-c compartment_ocid] [-s subdomain_name] "
    10      echo "  -o  operation               'create' or 'delete'. Optional.  Defaults to 'create'."
    11      echo "  -c  compartment_ocid        Compartment OCID. Optional.  Defaults to TIBURON-DEV compartment OCID."
    12      echo "  -s  subdomain_name         subdomain prefix for v8o.io. Required."
    13      echo "  -k DNS scope                Specifies  to operate only on resources that have a matching DNS scope.Optional. GLOBAL, PRIVATE"
    14      echo "  -h                         Help"
    15      echo
    16      exit 1
    17  }
    18  
    19  SUBDOMAIN_NAME=""
    20  COMPARTMENT_OCID="${TF_VAR_compartment_id}"
    21  OPERATION="create"
    22  DNS_SCOPE="GLOBAL"
    23  # view id for phx (default)
    24  VCN_VIEW_ID="${VCN_VIEW_ID}"
    25  log () {
    26    echo "$(date '+[%Y-%m-%d %I:%M:%S %p]') : $1"
    27  }
    28  
    29  while getopts o:c:s:k:h flag
    30  do
    31      case "${flag}" in
    32          o) OPERATION=${OPTARG};;
    33          c) COMPARTMENT_OCID=${OPTARG};;
    34          s) SUBDOMAIN_NAME=${OPTARG};;
    35          k) DNS_SCOPE_INPUT=${OPTARG};;
    36          h) usage;;
    37          *) usage;;
    38      esac
    39  done
    40  
    41  if [ -z "${SUBDOMAIN_NAME}" ] ; then
    42      echo "subdomain name must be set!"
    43      exit 1
    44  fi
    45  
    46  if [ ${TEST_ENV} != "kind_oci_dns" ] && [ ${DNS_SCOPE} == "PRIVATE" ]; then
    47    if [ ${V80_COMPARTMENT_OCID} == "" ]; then
    48        echo "Jenkins runner compartment ocid must be set!"
    49        exit 1
    50    fi
    51  fi
    52  
    53  if [ ${TEST_ENV} != "ocidns_oke" ] && [ ${TEST_ENV} != "kind_oci_dns" ]; then
    54    if [ ${DNS_SCOPE} == "PRIVATE" ];then
    55      echo "Invalid TEST_ENV for DNS_SCOPE=PRIVATE " ${TEST_ENV}
    56      exit 1
    57    fi
    58  fi
    59  
    60  
    61  if [ "${DNS_SCOPE_INPUT:-}" ] ; then
    62    if [ ${DNS_SCOPE_INPUT} == "GLOBAL" ] || [ ${DNS_SCOPE_INPUT} == "PRIVATE" ]; then
    63       DNS_SCOPE=${DNS_SCOPE_INPUT}
    64    fi
    65  fi
    66  
    67  set -o pipefail
    68  if [ ${DNS_SCOPE} == "PRIVATE" ];then
    69    ZONE_NAME="${SUBDOMAIN_NAME}-private.v8o.io"
    70  else
    71    ZONE_NAME="${SUBDOMAIN_NAME}.v8o.io"
    72  fi
    73  
    74  zone_ocid=""
    75  status_code=1
    76  if [ $OPERATION == "create" ]; then
    77    # the installation will require the "patch" command, so will install it now.  If it's already installed yum should
    78    # exit
    79    sudo yum -y install patch >/dev/null 2>&1
    80  
    81    if [ ${DNS_SCOPE} == "PRIVATE" ];then
    82      zone_ocid=$(oci dns zone create -c ${COMPARTMENT_OCID} --name ${ZONE_NAME} --zone-type PRIMARY --scope ${DNS_SCOPE} --view-id ${VCN_VIEW_ID}| jq -r ".data | .[\"id\"]"; exit ${PIPESTATUS[0]})
    83      status_code=$?
    84      if [ ${status_code} -ne 0 ]; then
    85        log "Failed creating private zone, attempting to fetch zone to see if it already exists"
    86        oci dns zone get --zone-name-or-id ${ZONE_NAME}
    87      fi
    88  
    89      if [ ${TEST_ENV} == "ocidns_oke" ]; then
    90        VCN_ID=$(oci network vcn list --compartment-id "${COMPARTMENT_OCID}" --display-name "${TF_VAR_label_prefix}-oke-vcn" | jq -r '.data[0].id')
    91      elif [ ${TEST_ENV} == "kind_oci_dns" ]; then
    92        VCN_ID=$(oci network vcn list --compartment-id "${V80_COMPARTMENT_OCID}" --display-name ${JENKINS_VCN} | jq -r '.data[0].id')
    93      fi
    94      if [ $? -ne 0 ];then
    95          log "Failed to fetch vcn '${TF_VAR_label_prefix}-oke-vcn'"
    96          exit 1
    97      fi
    98  
    99      DNS_RESOLVER_ID=$(oci network vcn-dns-resolver-association get --vcn-id ${VCN_ID} | jq '.data["dns-resolver-id"]' -r)
   100      DNS_UPDATE=$(oci dns resolver update --resolver-id ${DNS_RESOLVER_ID} --attached-views '[{"viewId":"'"${VCN_VIEW_ID}"'"}]' --scope PRIVATE --force)
   101      if [ $? -ne 0 ];then
   102          log "Failed to update vcn '${TF_VAR_label_prefix}-oke-vcn' with private view"
   103          exit 1
   104      fi
   105    else
   106      zone_ocid=$(oci dns zone create -c ${COMPARTMENT_OCID} --name ${ZONE_NAME} --zone-type PRIMARY --scope ${DNS_SCOPE} | jq -r ".data | .[\"id\"]"; exit ${PIPESTATUS[0]})
   107      status_code=$?
   108      if [ ${status_code} -ne 0 ]; then
   109        log "Failed creating public zone, attempting to fetch zone to see if it already exists"
   110        oci dns zone get --zone-name-or-id ${ZONE_NAME}
   111      fi
   112    fi
   113  
   114  elif [ $OPERATION == "delete" ]; then
   115    DNS_ZONE_OCID=`(oci dns zone list --compartment-id ${COMPARTMENT_OCID} --scope ${DNS_SCOPE} --name ${ZONE_NAME} | jq -r '.data[].id')`
   116    oci dns zone delete --zone-name-or-id ${DNS_ZONE_OCID} --scope ${DNS_SCOPE} --force
   117    status_code=$?
   118    if [ ${status_code} -ne 0 ]; then
   119      log "DNS zone deletion failed on first try. Retrying once."
   120      oci dns zone delete --zone-name-or-id ${DNS_ZONE_OCID} --scope ${DNS_SCOPE} --force
   121      status_code=$?
   122    fi
   123  else
   124    log "Unknown operation: ${OPERATION}"
   125    usage
   126  fi
   127  
   128  if [ ${status_code} -eq 0 ]; then
   129    # OCI CLI query succeeded
   130    if [ $OPERATION == "create" ]; then
   131      echo $zone_ocid
   132    else
   133      exit 0
   134    fi
   135  else
   136    # OCI CLI generated an error exit code
   137    log "Error invoking OCI CLI to perform DNS zone operation"
   138    exit 1
   139  fi