| #!/bin/bash | 
 | ############################################################################### | 
 | # | 
 | # This script creates an NFS Persistent Volumes(PV) and also claims that PV | 
 | # with a PVC of the same size. | 
 | # Note: PVs can be claimed by one PVC at a time | 
 | # | 
 | ############################################################################### | 
 | # | 
 | # Requirements: | 
 | #  - NFS server with directory to use as path for mount | 
 | #  - Access to an existing Kubernetes Cluster | 
 | #  - Kubectl installed and configured on machine running script | 
 | # | 
 | ############################################################################### | 
 | # | 
 | # The script expects a few variables which are needed to define PV's and PVC's | 
 | #  NS      = Namespace under which to create the mounts on the cluster | 
 | #  NFSIP   = Server IP for NFS server that will be used | 
 | #  NFSPATH = Path of the directory that will be mounted from NFS server | 
 | #  SIZE    = The size of the volume, numeric value followed by Gi or Mi | 
 | #  NAME    = The name of the PV and PVC that will be used by the Kubernetes | 
 | #            system to refer to PV/PVC | 
 | #  MODE    = ReadWriteOnce|ReadOnlyMany|ReadWriteMany | 
 | #            Access Mode used by NFS normally uses ReadWriteMany | 
 | #  RECLAIM = recycle|delete|retain | 
 | #            The policy, defines what occurs when claim on PV is released, can | 
 | #            be either: recycle, delete, or retain. | 
 | # | 
 | # Note: Kubernetes Systems permissions vary by implementation | 
 | #       some will require permissions to create PV's or PVC's | 
 | # | 
 | ############################################################################### | 
 |  | 
 | NS=${NS:-openbmc} | 
 | NFSIP=${NFSIP:-NFS-Server} | 
 | NFSPATH=${NFSPATH:-/san/dir} | 
 | SIZE=${SIZE:-10Gi} | 
 | NAME=${NAME:-placeholder} | 
 | MODE=${MODE:-ReadWriteMany} | 
 | RECLAIM=${RECLAIM:-Retain} | 
 |  | 
 | # Generate the PV | 
 | pv=$(cat << EOF | 
 | apiVersion: v1 | 
 | kind: PersistentVolume | 
 | metadata: | 
 |   labels: | 
 |     app: ${NS} | 
 |   name: ${NAME} | 
 |   namespace: ${NS} | 
 | spec: | 
 |   accessModes: | 
 |   - ${MODE} | 
 |   capacity: | 
 |     storage: ${SIZE} | 
 |   nfs: | 
 |     path: ${NFSPATH} | 
 |     server: ${NFSIP} | 
 |   persistentVolumeReclaimPolicy: ${RECLAIM} | 
 | EOF | 
 | ) | 
 |  | 
 | # create the volume | 
 | if [ -z $(kubectl get pv --namespace=${NS} | grep '^'${NAME}' ' | cut -d " " -f1) ];then | 
 |   echo "Creating Persistent Volume ${NAME}" | 
 |   kubectl create -f - <<< "${pv}" | 
 | else | 
 |   echo "Persistent Volume already Exists" | 
 | fi | 
 |  | 
 |  | 
 | # Generate the PVC | 
 | pvc=$(cat << EOF | 
 | apiVersion: v1 | 
 | kind: PersistentVolumeClaim | 
 | metadata: | 
 |   name: ${NAME} | 
 |   namespace: ${NS} | 
 | spec: | 
 |   accessModes: | 
 |   - ${MODE} | 
 |   resources: | 
 |     requests: | 
 |       storage: ${SIZE} | 
 |   selector: | 
 |     matchLabels: | 
 |       app: ${NS} | 
 | EOF | 
 | ) | 
 |  | 
 | # create PVC's to bind the PV's | 
 | if [ -z $(kubectl get pvc --namespace=${NS} | grep '^'${NAME}' ' | cut -d " " -f1) ];then | 
 |   echo "Creating Persistent Volume Claim ${NAME}" | 
 |   kubectl create -f - <<< "${pvc}" | 
 | else | 
 |   echo "Persistent volume claim already exists." | 
 | fi |