blob: fa5cc46ae5fb8a6ec51b316bd22f856e5dbc01d6 [file] [log] [blame]
#!/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