Skip to content
Snippets Groups Projects
  • Cedric Caffy's avatar
    fe930409
    Revert "[cta-admin] mount policy add,ch,ls" · fe930409
    Cedric Caffy authored
    This revert is due to the fact that we will probably not put the
    maxdrivesallowed in the mount policy object. We will put it in the
    TAPE_POOL table and in the VIRTUAL_ORGANIZATION table
    
    This reverts commit f48c6cc48eaa9ab9e77fff5a4537a7a4641896b6.
    fe930409
    History
    Revert "[cta-admin] mount policy add,ch,ls"
    Cedric Caffy authored
    This revert is due to the fact that we will probably not put the
    maxdrivesallowed in the mount policy object. We will put it in the
    TAPE_POOL table and in the VIRTUAL_ORGANIZATION table
    
    This reverts commit f48c6cc48eaa9ab9e77fff5a4537a7a4641896b6.
prepare_tests.sh 12.12 KiB
#!/bin/bash

usage() { cat <<EOF 1>&2
Usage: $0 -n <namespace>
EOF
exit 1
}

while getopts "n:" o; do
    case "${o}" in
        n)
            NAMESPACE=${OPTARG}
            ;;
        *)
            usage
            ;;
    esac
done
shift $((OPTIND-1))

if [ -z "${NAMESPACE}" ]; then
    usage
fi

if [ ! -z "${error}" ]; then
    echo -e "ERROR:\n${error}"
    exit 1
fi


# eos instance identified by SSS username
EOSINSTANCE=ctaeos

tempdir=$(mktemp -d) # temporary directory for system test related config
echo -n "Reading library configuration from tpsrv01"
SECONDS_PASSED=0
while test 0 = $(kubectl --namespace ${NAMESPACE} exec tpsrv01 -c taped -- cat /tmp/library-rc.sh | sed -e 's/^export//' | tee ${tempdir}/library-rc.sh | wc -l); do
  sleep 1
  echo -n .
  let SECONDS_PASSED=SECONDS_PASSED+1

  if test ${SECONDS_PASSED} == 30; then
    echo "FAILED"
    echo "Timed out after ${SECONDS_PASSED} seconds waiting for tape library configuration."
    exit 1
  fi
done
echo "OK"

echo "Using this configuration for library:"
cat ${tempdir}/library-rc.sh
. ${tempdir}/library-rc.sh

#clean the  library
#  echo "Clean the library /dev/${LIBRARYDEVICE} if needed"
#    mtx -f /dev/${LIBRARYDEVICE} status | sed -e "s/:/ /g"| grep "Full" | awk '{if ($1=="Data" ) { rewind="mt -f /dev/${DRIVEDEVICES["$4"]} rewind"; print rewind; print "Rewind drive "$4>"/dev/stderr"; unload="mtx -f /dev/${LIBRARYDEVICE} unload "$8" "$4; print unload; print "Unloading to storage slot "$8" from data slot "$4"" >"/dev/stderr";}}' |  source /dev/stdin

ctacliIP=`kubectl --namespace ${NAMESPACE} describe pod ctacli | grep IP | sed -E 's/IP:[[:space:]]+//'`

# Get list of tape drives that have a tape server
TAPEDRIVES_IN_USE=()
for tapeserver in $(kubectl --namespace ${NAMESPACE} get pods | grep tpsrv | awk '{print $1}'); do
  TAPEDRIVES_IN_USE+=($(kubectl --namespace ${NAMESPACE} exec ${tapeserver} -c taped -- cat /etc/cta/TPCONFIG | awk '{print $1}'))
done
NB_TAPEDRIVES_IN_USE=${#TAPEDRIVES_IN_USE[@]}

echo "Preparing CTA configuration for tests"
  # verify the catalogue DB schema
    kubectl --namespace ${NAMESPACE} exec ctafrontend -- cta-catalogue-schema-verify /etc/cta/cta-catalogue.conf
    if [ $? -ne 0 ]; then
      echo "ERROR: failed to verify the catalogue DB schema"
      exit 1
    fi
  kubectl --namespace ${NAMESPACE} exec ctafrontend -- cta-catalogue-admin-user-create /etc/cta/cta-catalogue.conf --username ctaadmin1 -m "docker cli"

echo 'kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin --json version | jq'
kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin --json version | jq

  echo "Cleaning up leftovers from potential previous runs."
  kubectl --namespace ${NAMESPACE} exec ctaeos -- eos rm /eos/ctaeos/cta/*
  kubectl --namespace ${NAMESPACE} exec ctaeos -- eos find -f /eos/ctaeos/preprod/ | xargs -I{} kubectl --namespace ${NAMESPACE} exec ctaeos -- eos rm -rf {}
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin --json tape ls --all  |             \
    jq -r '.[] | .vid ' | xargs -I{} kubectl --namespace ${NAMESPACE} exec ctacli --            \
    cta-admin tape rm -v {}

  kubectl --namespace ${NAMESPACE}  exec ctacli -- cta-admin --json archiveroute ls |           \
    jq '.[] |  " -s " + .storageClass + " -c " + (.copyNumber|tostring)' | \
    xargs -I{} bash -c "kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin archiveroute rm {}"

  kubectl --namespace ${NAMESPACE}  exec ctacli -- cta-admin --json tapepool ls  |              \
    jq -r '.[] | .name' |                                                                       \
    xargs -I{} kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin tapepool rm -n {} 

  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin --json storageclass ls  |           \
    jq -r '.[] | " -n  " + .name'  |                                    \
    xargs -I{} bash -c "kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin storageclass rm {}"

  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin --json vo ls  |           \
    jq -r '.[] | " --vo  " + .name'  |                                    \
    xargs -I{} bash -c "kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin vo rm {}"


  for ((i=0; i<${#TAPEDRIVES_IN_USE[@]}; i++)); do
    kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin logicallibrary add \
      --name ${TAPEDRIVES_IN_USE[${i}]}                                            \
      --comment "ctasystest library mapped to drive ${TAPEDRIVES_IN_USE[${i}]}"
  done

  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin virtualorganization add  \
    --vo vo                                                                          \
    --comment "vo"                                                                   
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin tapepool add       \
    --name ctasystest                                                 \
    --vo vo                                                           \
    --partialtapesnumber 5                                            \
    --encrypted false                                                 \
    --comment "ctasystest"
  # add the media types of the tapes in production
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin mediatype add \
    --name T10K500G  \
    --capacity 500000000000 \
    --primarydensitycode 74 \
    --cartridge "T10000" \
    --comment "Oracle T10000 cartridge formated at 500 GB (for developers only)"
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin mediatype add \
    --name 3592JC7T \
    --capacity 7000000000000 \
    --primarydensitycode 84 \
    --cartridge "3592JC" \
    --comment "IBM 3592JC cartridge formated at 7 TB"
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin mediatype add \
    --name 3592JD15T \
    --capacity 15000000000000 \
    --primarydensitycode 85 \
    --cartridge "3592JD" \
    --comment "IBM 3592JD cartridge formated at 15 TB"
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin mediatype add \
    --name 3592JE20T \
    --capacity 20000000000000 \
    --primarydensitycode 87 \
    --cartridge "3592JE" \
    --comment "IBM 3592JE cartridge formated at 20 TB"
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin mediatype add \
    --name LTO7M \
    --capacity 9000000000000 \
    --primarydensitycode 93 \
    --cartridge "LTO-7" \
    --comment "LTO-7 M8 cartridge formated at 9 TB"
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin mediatype add \
    --name LTO8 \
    --capacity 12000000000000 \
    --primarydensitycode 94 \
    --cartridge "LTO-8" \
    --comment "LTO-8 cartridge formated at 12 TB"
  # add all tapes
  for ((i=0; i<${#TAPES[@]}; i++)); do
    VID=${TAPES[${i}]}
    kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin tape add     \
      --mediatype "T10K500G"                                              \
      --vendor vendor                                                      \
      --logicallibrary ${TAPEDRIVES_IN_USE[${i}%${NB_TAPEDRIVES_IN_USE}]}  \
      --tapepool ctasystest                                                \
      --comment "ctasystest"                                               \
      --vid ${VID}                                                         \
      --full false                                                         \
      --comment "ctasystest"
  done
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin storageclass add   \
    --name ctaStorageClass                                            \
    --copynb 1                                                        \
    --vo vo                                                           \
    --comment "ctasystest"
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin archiveroute add   \
    --storageclass ctaStorageClass                                    \
    --copynb 1                                                        \
    --tapepool ctasystest                                             \
    --comment "ctasystest"
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin mountpolicy add    \
    --name ctasystest                                                 \
    --archivepriority 1                                               \
    --minarchiverequestage 1                                          \
    --retrievepriority 1                                              \
    --minretrieverequestage 1                                         \
    --maxdrivesallowed 1                                              \
    --comment "ctasystest"
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin requestermountrule add \
     --instance ${EOSINSTANCE}                                        \
     --name adm                                                       \
     --mountpolicy ctasystest --comment "ctasystest"
###
# This rule exists to allow users from eosusers group to migrate files to tapes
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin groupmountrule add \
     --instance ${EOSINSTANCE}                                        \
     --name eosusers                                                  \
     --mountpolicy ctasystest --comment "ctasystest"
###
# This rule exists to allow users from powerusers group to recall files from tapes
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin groupmountrule add \
     --instance ${EOSINSTANCE}                                        \
     --name powerusers                                                  \
     --mountpolicy ctasystest --comment "ctasystest"

echo "Labeling tapes:"
  # add all tapes
  for ((i=0; i<${#TAPES[@]}; i++)); do
    VID=${TAPES[${i}]}
    echo "  cta-tape-label --vid ${VID}"
    # for debug use
      # kubectl --namespace ${NAMESPACE} exec tpsrv01 -c taped  -- cta-tape-label --vid ${VID} --debug
    kubectl --namespace ${NAMESPACE} exec tpsrv01 -c taped  -- cta-tape-label --vid ${VID} 
    if [ $? -ne 0 ]; then
      echo "ERROR: failed to label the tape ${VID}"
      exit 1
    fi
  done

echo "Setting drive up: ${DRIVENAMES[${driveslot}]}"
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin drive up ${DRIVENAMES[${driveslot}]}
  kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin drive ls

# A bit of reporting
echo "EOS server version is used:"
  kubectl --namespace ${NAMESPACE} exec ctaeos -- rpm -qa|grep eos-server


# Super client capabilities
echo "Adding super client capabilities"

clientIP=`kubectl --namespace ${NAMESPACE} describe pod client | grep IP | sed -E 's/IP:[[:space:]]+//'`
kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin admin add --username ctaadmin2 --comment "ctaadmin2"

kubectl --namespace=${NAMESPACE} exec kdc cat /root/ctaadmin2.keytab | kubectl --namespace=${NAMESPACE} exec -i client --  bash -c "cat > /root/ctaadmin2.keytab; mkdir -p /tmp/ctaadmin2"
kubectl --namespace=${NAMESPACE} exec kdc cat /root/poweruser1.keytab | kubectl --namespace=${NAMESPACE} exec -i client --  bash -c "cat > /root/poweruser1.keytab; mkdir -p /tmp/poweruser1"
kubectl --namespace=${NAMESPACE} exec kdc cat /root/eosadmin1.keytab | kubectl --namespace=${NAMESPACE} exec -i client --  bash -c "cat > /root/eosadmin1.keytab; mkdir -p /tmp/eosadmin1"

###
# Filling services in DNS on all pods
###
# Generate hosts file for all defined services
TMP_HOSTS=$(mktemp)
KUBERNETES_DOMAIN_NAME='svc.cluster.local'
KUBEDNS_IP=$(kubectl -n kube-system get service kube-dns -o json | jq -r '.spec.clusterIP')
for service in $(kubectl --namespace=${NAMESPACE} get service -o json | jq -r '.items[].metadata.name'); do
  service_IP=$(nslookup -timeout=1 ${service}.${NAMESPACE}.${KUBERNETES_DOMAIN_NAME} ${KUBEDNS_IP} | grep -A1 ${service}.${NAMESPACE} | grep Address | awk '{print $2}')
  echo "${service_IP} ${service}.${NAMESPACE}.${KUBERNETES_DOMAIN_NAME} ${service}"
done > ${TMP_HOSTS}

# push to all Running containers removing already generated entries
kubectl -n ${NAMESPACE} get pods -o json | jq -r '.items[] | select(.status.phase=="Running") | {name: .metadata.name, containers: .spec.containers[].name} | {command: (.name + " -c " + .containers)}|to_entries[]|(.value)' | while read container; do
  cat ${TMP_HOSTS} | grep -v $(echo ${container} | awk '{print $1}')| kubectl -n ${NAMESPACE} exec ${container} -i -- bash -c "cat >> /etc/hosts"
done