| #!/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 | 
 | #  mode     ReadWriteOnce|ReadOnlyMany|ReadWriteMany | 
 | #           Access Mode used by NFS normally uses ReadWriteMany | 
 | #           Default: ReadWriteMany | 
 | #  name     The name of the PV and PVC that will be used by the Kubernetes | 
 | #           system to refer to PV/PVC | 
 | #           Default: "placeholder" | 
 | #  nfs_ip   Server IP for NFS server that will be used | 
 | #           Default: "NFS-Server" | 
 | #  nfs_path Path of the directory that will be mounted from NFS server | 
 | #           Default: "/san/dir" | 
 | #  ns       Namespace under which to create the mounts on the cluster | 
 | #           Default: "openbmc" | 
 | #  reclaim  recycle|delete|retain | 
 | #           The policy, defines what occurs when claim on PV is released, can | 
 | #           be either: recycle, delete, or retain. | 
 | #           Default: "Retain" | 
 | #  size     The size of the volume, numeric value followed by Gi or Mi | 
 | #           Default: "10Gi" | 
 | # | 
 | # Note: Kubernetes Systems permissions vary by implementation | 
 | #       some will require permissions to create PV's or PVC's | 
 | # | 
 | ############################################################################### | 
 |  | 
 | mode=${mode:-ReadWriteMany} | 
 | name=${name:-placeholder} | 
 | nfs_ip=${nfs_ip:-NFS-Server} | 
 | nfs_path=${nfs_path:-/san/dir} | 
 | ns=${ns:-openbmc} | 
 | reclaim=${reclaim:-Retain} | 
 | size=${size:-10Gi} | 
 |  | 
 | # Generate the PV | 
 | pv=$(cat << EOF | 
 | apiVersion: v1 | 
 | kind: PersistentVolume | 
 | metadata: | 
 |   labels: | 
 |     app: ${name} | 
 |   name: ${name} | 
 |   namespace: ${ns} | 
 | spec: | 
 |   accessModes: | 
 |   - ${mode} | 
 |   capacity: | 
 |     storage: ${size} | 
 |   nfs: | 
 |     path: ${nfs_path} | 
 |     server: ${nfs_ip} | 
 |   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: ${name} | 
 | 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 |