commit
a02640bec5
|
|
@ -6,3 +6,4 @@ node_modules
|
||||||
Dockerfile*
|
Dockerfile*
|
||||||
TODO.md
|
TODO.md
|
||||||
.git
|
.git
|
||||||
|
/ci
|
||||||
|
|
|
||||||
|
|
@ -9,14 +9,115 @@ on:
|
||||||
- next
|
- next
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
cancel-previous-runs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Cancel Previous Runs
|
- name: Cancel Previous Runs
|
||||||
uses: styfle/cancel-workflow-action@0.6.0
|
uses: styfle/cancel-workflow-action@0.6.0
|
||||||
with:
|
with:
|
||||||
access_token: ${{ github.token }}
|
access_token: ${{ github.token }}
|
||||||
|
|
||||||
|
csi-sanity-synology:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
config:
|
||||||
|
- synlogy/iscsi.yaml
|
||||||
|
runs-on:
|
||||||
|
- self-hosted
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: csi-sanity
|
||||||
|
run: |
|
||||||
|
# run tests
|
||||||
|
ci/bin/run.sh
|
||||||
|
env:
|
||||||
|
TEMPLATE_CONFIG_FILE: "./ci/configs/${{ matrix.config }}"
|
||||||
|
SYNOLOGY_HOST: ${{ secrets.SANITY_SYNOLOGY_HOST }}
|
||||||
|
SYNOLOGY_PORT: ${{ secrets.SANITY_SYNOLOGY_PORT }}
|
||||||
|
SYNOLOGY_USERNAME: ${{ secrets.SANITY_SYNOLOGY_USERNAME }}
|
||||||
|
SYNOLOGY_PASSWORD: ${{ secrets.SANITY_SYNOLOGY_PASSWORD }}
|
||||||
|
SYNOLOGY_VOLUME: ${{ secrets.SANITY_SYNOLOGY_VOLUME }}
|
||||||
|
|
||||||
|
# api-based drivers
|
||||||
|
csi-sanity-truenas-scale:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
config:
|
||||||
|
- truenas/scale-iscsi.yaml
|
||||||
|
- truenas/scale-nfs.yaml
|
||||||
|
# 80 char limit
|
||||||
|
#- truenas/scale-smb.yaml
|
||||||
|
runs-on:
|
||||||
|
- self-hosted
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: csi-sanity
|
||||||
|
run: |
|
||||||
|
# run tests
|
||||||
|
ci/bin/run.sh
|
||||||
|
env:
|
||||||
|
TEMPLATE_CONFIG_FILE: "./ci/configs/${{ matrix.config }}"
|
||||||
|
TRUENAS_HOST: ${{ secrets.SANITY_TRUENAS_SCALE_HOST }}
|
||||||
|
TRUENAS_USERNAME: ${{ secrets.SANITY_TRUENAS_SCALE_USERNAME }}
|
||||||
|
TRUENAS_PASSWORD: ${{ secrets.SANITY_TRUENAS_SCALE_PASSWORD }}
|
||||||
|
|
||||||
|
# ssh-based drivers
|
||||||
|
csi-sanity-truenas-core:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
config:
|
||||||
|
# 63 char limit
|
||||||
|
#- truenas/core-iscsi.yaml
|
||||||
|
- truenas/core-nfs.yaml
|
||||||
|
# 80 char limit
|
||||||
|
#- truenas/core-smb.yaml
|
||||||
|
runs-on:
|
||||||
|
- self-hosted
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: csi-sanity
|
||||||
|
run: |
|
||||||
|
# run tests
|
||||||
|
ci/bin/run.sh
|
||||||
|
env:
|
||||||
|
TEMPLATE_CONFIG_FILE: "./ci/configs/${{ matrix.config }}"
|
||||||
|
TRUENAS_HOST: ${{ secrets.SANITY_TRUENAS_CORE_HOST }}
|
||||||
|
TRUENAS_USERNAME: ${{ secrets.SANITY_TRUENAS_CORE_USERNAME }}
|
||||||
|
TRUENAS_PASSWORD: ${{ secrets.SANITY_TRUENAS_CORE_PASSWORD }}
|
||||||
|
|
||||||
|
# ssh-based drivers
|
||||||
|
csi-sanity-zfs-generic:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
config:
|
||||||
|
- zfs-generic/iscsi.yaml
|
||||||
|
- zfs-generic/nfs.yaml
|
||||||
|
runs-on:
|
||||||
|
- self-hosted
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: csi-sanity
|
||||||
|
run: |
|
||||||
|
# run tests
|
||||||
|
ci/bin/run.sh
|
||||||
|
env:
|
||||||
|
TEMPLATE_CONFIG_FILE: "./ci/configs/${{ matrix.config }}"
|
||||||
|
SERVER_HOST: ${{ secrets.SANITY_ZFS_GENERIC_HOST }}
|
||||||
|
SERVER_USERNAME: ${{ secrets.SANITY_ZFS_GENERIC_USERNAME }}
|
||||||
|
SERVER_PASSWORD: ${{ secrets.SANITY_ZFS_GENERIC_PASSWORD }}
|
||||||
|
|
||||||
|
build:
|
||||||
|
needs:
|
||||||
|
- csi-sanity-synology
|
||||||
|
- csi-sanity-truenas-scale
|
||||||
|
- csi-sanity-truenas-core
|
||||||
|
- csi-sanity-zfs-generic
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: docker build
|
- name: docker build
|
||||||
run: |
|
run: |
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,10 @@
|
||||||
|
# v1.4.2
|
||||||
|
|
||||||
|
Released 2021-09-29
|
||||||
|
|
||||||
|
- general improvements to help ci
|
||||||
|
- cover most drivers with ci
|
||||||
|
|
||||||
# v1.4.1
|
# v1.4.1
|
||||||
|
|
||||||
Released 2021-09-21
|
Released 2021-09-21
|
||||||
|
|
|
||||||
|
|
@ -368,3 +368,5 @@ A special shout out to the wonderful sponsors of the project!
|
||||||
- https://github.com/nmaupu/freenas-provisioner
|
- https://github.com/nmaupu/freenas-provisioner
|
||||||
- https://github.com/travisghansen/freenas-iscsi-provisioner
|
- https://github.com/travisghansen/freenas-iscsi-provisioner
|
||||||
- https://datamattsson.tumblr.com/post/624751011659202560/welcome-truenas-core-container-storage-provider
|
- https://datamattsson.tumblr.com/post/624751011659202560/welcome-truenas-core-container-storage-provider
|
||||||
|
- https://github.com/dravanet/truenas-csi
|
||||||
|
- https://github.com/SynologyOpenSource/synology-csi
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ const PROTO_PATH = __dirname + "/../csi_proto/csi-v1.5.0.proto";
|
||||||
//var grpc = require("grpc-uds");
|
//var grpc = require("grpc-uds");
|
||||||
var grpc = require("@grpc/grpc-js");
|
var grpc = require("@grpc/grpc-js");
|
||||||
var protoLoader = require("@grpc/proto-loader");
|
var protoLoader = require("@grpc/proto-loader");
|
||||||
const { rsort } = require("semver");
|
|
||||||
// Suggested options for similarity to existing grpc.load behavior
|
// Suggested options for similarity to existing grpc.load behavior
|
||||||
var packageDefinition = protoLoader.loadSync(PROTO_PATH, {
|
var packageDefinition = protoLoader.loadSync(PROTO_PATH, {
|
||||||
keepCase: true,
|
keepCase: true,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -x
|
||||||
|
|
||||||
|
: ${CI_BUILD_KEY:="local"}
|
||||||
|
: ${CSI_ENDPOINT:=/tmp/csi-${CI_BUILD_KEY}.sock}
|
||||||
|
: ${CSI_SANITY_TEMP_DIR:=$(mktemp -d -t ci-csi-sanity-tmp-XXXXXXXX)}
|
||||||
|
|
||||||
|
if [[ ! -S "${CSI_ENDPOINT}" ]];then
|
||||||
|
echo "csi socket: ${CSI_ENDPOINT} does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
trap ctrl_c INT
|
||||||
|
|
||||||
|
function ctrl_c() {
|
||||||
|
echo "Trapped CTRL-C"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
chmod g+w,o+w "${CSI_ENDPOINT}";
|
||||||
|
mkdir -p "${CSI_SANITY_TEMP_DIR}";
|
||||||
|
rm -rf "${CSI_SANITY_TEMP_DIR}"/*;
|
||||||
|
chmod -R 777 "${CSI_SANITY_TEMP_DIR}";
|
||||||
|
|
||||||
|
# https://github.com/kubernetes-csi/csi-test/tree/master/cmd/csi-sanity
|
||||||
|
# FOR DEBUG: --ginkgo.v
|
||||||
|
# --csi.secrets=<path to secrets file>
|
||||||
|
# expand size 2073741824 to have mis-alignments
|
||||||
|
# expand size 2147483648 to have everything line up nicely
|
||||||
|
|
||||||
|
csi-sanity --csi.endpoint "unix://${CSI_ENDPOINT}" \
|
||||||
|
--csi.mountdir "${CSI_SANITY_TEMP_DIR}/mnt" \
|
||||||
|
--csi.stagingdir "${CSI_SANITY_TEMP_DIR}/stage" \
|
||||||
|
--csi.testvolumeexpandsize 2147483648 \
|
||||||
|
--csi.testvolumesize 1073741824
|
||||||
|
|
||||||
|
rm -rf "${CSI_SANITY_TEMP_DIR}"
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -x
|
||||||
|
|
||||||
|
: ${CI_BUILD_KEY:="local"}
|
||||||
|
: ${TEMPLATE_CONFIG_FILE:=${1}}
|
||||||
|
: ${CSI_MODE:=""}
|
||||||
|
: ${CSI_VERSION:="1.5.0"}
|
||||||
|
: ${CSI_ENDPOINT:=/tmp/csi-${CI_BUILD_KEY}.sock}
|
||||||
|
: ${LOG_PATH:=/tmp/csi-${CI_BUILD_KEY}.log}
|
||||||
|
|
||||||
|
if [[ "x${CONFIG_FILE}" == "x" ]];then
|
||||||
|
: ${CONFIG_FILE:=/tmp/csi-config-${CI_BUILD_KEY}.yaml}
|
||||||
|
|
||||||
|
if [[ "x${TEMPLATE_CONFIG_FILE}" != "x" ]];then
|
||||||
|
envsubst < "${TEMPLATE_CONFIG_FILE}" > "${CONFIG_FILE}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "x${CSI_MODE}" != "x" ]];then
|
||||||
|
EXTRA_ARGS="--csi-mode ${CSI_MODE} ${EXTRA_ARGS}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# > "${LOG_PATH}" 2>&1
|
||||||
|
./bin/democratic-csi --log-level debug --driver-config-file "${CONFIG_FILE}" --csi-version "${CSI_VERSION}" --csi-name "driver-test" --server-socket "${CSI_ENDPOINT}" ${EXTRA_ARGS}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -x
|
||||||
|
|
||||||
|
export PATH="/usr/local/lib/nodejs/bin:${PATH}"
|
||||||
|
# install deps
|
||||||
|
npm i
|
||||||
|
|
||||||
|
# generate key for paths etc
|
||||||
|
export CI_BUILD_KEY=$(uuidgen | cut -d "-" -f 1)
|
||||||
|
|
||||||
|
# launch the server
|
||||||
|
sudo -E ci/bin/launch-server.sh &
|
||||||
|
|
||||||
|
# wait for server to launch
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# launch csi-sanity
|
||||||
|
sudo -E ci/bin/launch-csi-sanity.sh
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
driver: synology-iscsi
|
||||||
|
httpConnection:
|
||||||
|
protocol: http
|
||||||
|
host: ${SYNOLOGY_HOST}
|
||||||
|
port: ${SYNOLOGY_PORT}
|
||||||
|
username: ${SYNOLOGY_USERNAME}
|
||||||
|
password: ${SYNOLOGY_PASSWORD}
|
||||||
|
allowInsecure: true
|
||||||
|
session: "democratic-csi-${CI_BUILD_KEY}"
|
||||||
|
serialize: true
|
||||||
|
|
||||||
|
synology:
|
||||||
|
volume: ${SYNOLOGY_VOLUME}
|
||||||
|
|
||||||
|
iscsi:
|
||||||
|
targetPortal: ${SYNOLOGY_HOST}
|
||||||
|
targetPortals: []
|
||||||
|
baseiqn: "iqn.2000-01.com.synology:XpenoDsm62x."
|
||||||
|
namePrefix: "csi-${CI_BUILD_KEY}-"
|
||||||
|
nameSuffix: "-ci"
|
||||||
|
|
||||||
|
lunTemplate:
|
||||||
|
# btrfs thin provisioning
|
||||||
|
type: "BLUN"
|
||||||
|
# tpws = Hardware-assisted zeroing
|
||||||
|
# caw = Hardware-assisted locking
|
||||||
|
# 3pc = Hardware-assisted data transfer
|
||||||
|
# tpu = Space reclamation
|
||||||
|
# can_snapshot = Snapshot
|
||||||
|
#dev_attribs:
|
||||||
|
#- dev_attrib: emulate_tpws
|
||||||
|
# enable: 1
|
||||||
|
#- dev_attrib: emulate_caw
|
||||||
|
# enable: 1
|
||||||
|
#- dev_attrib: emulate_3pc
|
||||||
|
# enable: 1
|
||||||
|
#- dev_attrib: emulate_tpu
|
||||||
|
# enable: 0
|
||||||
|
#- dev_attrib: can_snapshot
|
||||||
|
# enable: 1
|
||||||
|
|
||||||
|
# btfs thick provisioning
|
||||||
|
# only zeroing and locking supported
|
||||||
|
#type: "BLUN_THICK"
|
||||||
|
# tpws = Hardware-assisted zeroing
|
||||||
|
# caw = Hardware-assisted locking
|
||||||
|
#dev_attribs:
|
||||||
|
#- dev_attrib: emulate_tpws
|
||||||
|
# enable: 1
|
||||||
|
#- dev_attrib: emulate_caw
|
||||||
|
# enable: 1
|
||||||
|
|
||||||
|
# ext4 thinn provisioning UI sends everything with enabled=0
|
||||||
|
#type: "THIN"
|
||||||
|
|
||||||
|
# ext4 thin with advanced legacy features set
|
||||||
|
# can only alter tpu (all others are set as enabled=1)
|
||||||
|
#type: "ADV"
|
||||||
|
#dev_attribs:
|
||||||
|
#- dev_attrib: emulate_tpu
|
||||||
|
# enable: 1
|
||||||
|
|
||||||
|
# ext4 thick
|
||||||
|
# can only alter caw
|
||||||
|
#type: "FILE"
|
||||||
|
#dev_attribs:
|
||||||
|
#- dev_attrib: emulate_caw
|
||||||
|
# enable: 1
|
||||||
|
|
||||||
|
lunSnapshotTemplate:
|
||||||
|
is_locked: true
|
||||||
|
# https://kb.synology.com/en-me/DSM/tutorial/What_is_file_system_consistent_snapshot
|
||||||
|
is_app_consistent: true
|
||||||
|
|
||||||
|
targetTemplate:
|
||||||
|
auth_type: 0
|
||||||
|
max_sessions: 0
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
driver: freenas-iscsi
|
||||||
|
|
||||||
|
httpConnection:
|
||||||
|
protocol: http
|
||||||
|
host: ${TRUENAS_HOST}
|
||||||
|
port: 80
|
||||||
|
#apiKey:
|
||||||
|
username: ${TRUENAS_USERNAME}
|
||||||
|
password: ${TRUENAS_PASSWORD}
|
||||||
|
|
||||||
|
sshConnection:
|
||||||
|
host: ${TRUENAS_HOST}
|
||||||
|
port: 22
|
||||||
|
username: ${TRUENAS_USERNAME}
|
||||||
|
password: ${TRUENAS_PASSWORD}
|
||||||
|
|
||||||
|
zfs:
|
||||||
|
datasetParentName: tank/ci/${CI_BUILD_KEY}/v
|
||||||
|
detachedSnapshotsDatasetParentName: tank/ci/${CI_BUILD_KEY}/s
|
||||||
|
|
||||||
|
zvolCompression:
|
||||||
|
zvolDedup:
|
||||||
|
zvolEnableReservation: false
|
||||||
|
zvolBlocksize:
|
||||||
|
|
||||||
|
iscsi:
|
||||||
|
targetPortal: ${TRUENAS_HOST}
|
||||||
|
interface: ""
|
||||||
|
namePrefix: "csi-ci-${CI_BUILD_KEY}"
|
||||||
|
nameSuffix: ""
|
||||||
|
targetGroups:
|
||||||
|
- targetGroupPortalGroup: 1
|
||||||
|
targetGroupInitiatorGroup: 1
|
||||||
|
targetGroupAuthType: None
|
||||||
|
targetGroupAuthGroup:
|
||||||
|
# 0-100 (0 == ignore)
|
||||||
|
extentAvailThreshold: 0
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
driver: freenas-nfs
|
||||||
|
|
||||||
|
httpConnection:
|
||||||
|
protocol: http
|
||||||
|
host: ${TRUENAS_HOST}
|
||||||
|
port: 80
|
||||||
|
#apiKey:
|
||||||
|
username: ${TRUENAS_USERNAME}
|
||||||
|
password: ${TRUENAS_PASSWORD}
|
||||||
|
|
||||||
|
sshConnection:
|
||||||
|
host: ${TRUENAS_HOST}
|
||||||
|
port: 22
|
||||||
|
username: ${TRUENAS_USERNAME}
|
||||||
|
password: ${TRUENAS_PASSWORD}
|
||||||
|
|
||||||
|
zfs:
|
||||||
|
datasetParentName: tank/ci/${CI_BUILD_KEY}/v
|
||||||
|
detachedSnapshotsDatasetParentName: tank/ci/${CI_BUILD_KEY}/s
|
||||||
|
|
||||||
|
datasetEnableQuotas: true
|
||||||
|
datasetEnableReservation: true
|
||||||
|
datasetPermissionsMode: "0777"
|
||||||
|
datasetPermissionsUser: 0
|
||||||
|
datasetPermissionsGroup: 0
|
||||||
|
|
||||||
|
nfs:
|
||||||
|
shareHost: ${TRUENAS_HOST}
|
||||||
|
shareAlldirs: false
|
||||||
|
shareAllowedHosts: []
|
||||||
|
shareAllowedNetworks: []
|
||||||
|
shareMaprootUser: root
|
||||||
|
shareMaprootGroup: wheel
|
||||||
|
shareMapallUser: ""
|
||||||
|
shareMapallGroup: ""
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
driver: freenas-smb
|
||||||
|
|
||||||
|
httpConnection:
|
||||||
|
protocol: http
|
||||||
|
host: ${TRUENAS_HOST}
|
||||||
|
port: 80
|
||||||
|
#apiKey:
|
||||||
|
username: ${TRUENAS_USERNAME}
|
||||||
|
password: ${TRUENAS_PASSWORD}
|
||||||
|
|
||||||
|
sshConnection:
|
||||||
|
host: ${TRUENAS_HOST}
|
||||||
|
port: 22
|
||||||
|
username: ${TRUENAS_USERNAME}
|
||||||
|
password: ${TRUENAS_PASSWORD}
|
||||||
|
|
||||||
|
zfs:
|
||||||
|
datasetProperties:
|
||||||
|
# smb options
|
||||||
|
#aclmode: restricted
|
||||||
|
#casesensitivity: mixed
|
||||||
|
|
||||||
|
datasetParentName: tank/ci/${CI_BUILD_KEY}/v
|
||||||
|
detachedSnapshotsDatasetParentName: tank/ci/${CI_BUILD_KEY}/s
|
||||||
|
|
||||||
|
datasetEnableQuotas: true
|
||||||
|
datasetEnableReservation: true
|
||||||
|
datasetPermissionsMode: "0777"
|
||||||
|
datasetPermissionsUser: 0
|
||||||
|
datasetPermissionsGroup: 0
|
||||||
|
|
||||||
|
# for smb with guest
|
||||||
|
#datasetPermissionsUser: nobody
|
||||||
|
#datasetPermissionsGroup: nobody
|
||||||
|
|
||||||
|
#datasetPermissionsGroup: root
|
||||||
|
#datasetPermissionsAcls:
|
||||||
|
#- "-m everyone@:full_set:allow"
|
||||||
|
|
||||||
|
#datasetPermissionsAcls:
|
||||||
|
#- "-m u:kube:full_set:allow"
|
||||||
|
|
||||||
|
smb:
|
||||||
|
shareHost: ${TRUENAS_HOST}
|
||||||
|
#nameTemplate: ""
|
||||||
|
namePrefix: "csi-ci-${CI_BUILD_KEY}"
|
||||||
|
nameSuffix: ""
|
||||||
|
shareAuxiliaryConfigurationTemplate: |
|
||||||
|
#guest ok = yes
|
||||||
|
#guest only = yes
|
||||||
|
shareHome: false
|
||||||
|
shareAllowedHosts: []
|
||||||
|
shareDeniedHosts: []
|
||||||
|
#shareDefaultPermissions: true
|
||||||
|
shareGuestOk: true
|
||||||
|
#shareGuestOnly: true
|
||||||
|
#shareShowHiddenFiles: true
|
||||||
|
shareRecycleBin: true
|
||||||
|
shareBrowsable: false
|
||||||
|
shareAccessBasedEnumeration: true
|
||||||
|
shareTimeMachine: false
|
||||||
|
#shareStorageTask:
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
driver: freenas-api-iscsi
|
||||||
|
|
||||||
|
httpConnection:
|
||||||
|
protocol: http
|
||||||
|
host: ${TRUENAS_HOST}
|
||||||
|
port: 80
|
||||||
|
#apiKey:
|
||||||
|
username: ${TRUENAS_USERNAME}
|
||||||
|
password: ${TRUENAS_PASSWORD}
|
||||||
|
|
||||||
|
zfs:
|
||||||
|
datasetParentName: tank/ci/${CI_BUILD_KEY}/v
|
||||||
|
detachedSnapshotsDatasetParentName: tank/ci/${CI_BUILD_KEY}/s
|
||||||
|
|
||||||
|
zvolCompression:
|
||||||
|
zvolDedup:
|
||||||
|
zvolEnableReservation: false
|
||||||
|
zvolBlocksize:
|
||||||
|
|
||||||
|
iscsi:
|
||||||
|
targetPortal: ${TRUENAS_HOST}
|
||||||
|
interface: ""
|
||||||
|
namePrefix: "csi-ci-${CI_BUILD_KEY}"
|
||||||
|
nameSuffix: ""
|
||||||
|
targetGroups:
|
||||||
|
- targetGroupPortalGroup: 1
|
||||||
|
targetGroupInitiatorGroup: 1
|
||||||
|
targetGroupAuthType: None
|
||||||
|
targetGroupAuthGroup:
|
||||||
|
# 0-100 (0 == ignore)
|
||||||
|
extentAvailThreshold: 0
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
driver: freenas-api-nfs
|
||||||
|
|
||||||
|
httpConnection:
|
||||||
|
protocol: http
|
||||||
|
host: ${TRUENAS_HOST}
|
||||||
|
port: 80
|
||||||
|
#apiKey:
|
||||||
|
username: ${TRUENAS_USERNAME}
|
||||||
|
password: ${TRUENAS_PASSWORD}
|
||||||
|
|
||||||
|
zfs:
|
||||||
|
datasetParentName: tank/ci/${CI_BUILD_KEY}/v
|
||||||
|
detachedSnapshotsDatasetParentName: tank/ci/${CI_BUILD_KEY}/s
|
||||||
|
|
||||||
|
datasetEnableQuotas: true
|
||||||
|
datasetEnableReservation: true
|
||||||
|
datasetPermissionsMode: "0777"
|
||||||
|
datasetPermissionsUser: 0
|
||||||
|
datasetPermissionsGroup: 0
|
||||||
|
|
||||||
|
nfs:
|
||||||
|
shareHost: ${TRUENAS_HOST}
|
||||||
|
shareAlldirs: false
|
||||||
|
shareAllowedHosts: []
|
||||||
|
shareAllowedNetworks: []
|
||||||
|
shareMaprootUser: root
|
||||||
|
shareMaprootGroup: root
|
||||||
|
shareMapallUser: ""
|
||||||
|
shareMapallGroup: ""
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
driver: freenas-api-smb
|
||||||
|
|
||||||
|
httpConnection:
|
||||||
|
protocol: http
|
||||||
|
host: ${TRUENAS_HOST}
|
||||||
|
port: 80
|
||||||
|
#apiKey:
|
||||||
|
username: ${TRUENAS_USERNAME}
|
||||||
|
password: ${TRUENAS_PASSWORD}
|
||||||
|
|
||||||
|
zfs:
|
||||||
|
datasetProperties:
|
||||||
|
# smb options
|
||||||
|
#aclmode: restricted
|
||||||
|
#casesensitivity: mixed
|
||||||
|
|
||||||
|
datasetParentName: tank/ci/${CI_BUILD_KEY}/v
|
||||||
|
detachedSnapshotsDatasetParentName: tank/ci/${CI_BUILD_KEY}/s
|
||||||
|
|
||||||
|
datasetEnableQuotas: true
|
||||||
|
datasetEnableReservation: true
|
||||||
|
datasetPermissionsMode: "0777"
|
||||||
|
datasetPermissionsUser: 0
|
||||||
|
datasetPermissionsGroup: 0
|
||||||
|
|
||||||
|
# for smb with guest
|
||||||
|
#datasetPermissionsUser: nobody
|
||||||
|
#datasetPermissionsGroup: nobody
|
||||||
|
|
||||||
|
#datasetPermissionsGroup: root
|
||||||
|
#datasetPermissionsAcls:
|
||||||
|
#- "-m everyone@:full_set:allow"
|
||||||
|
|
||||||
|
#datasetPermissionsAcls:
|
||||||
|
#- "-m u:kube:full_set:allow"
|
||||||
|
|
||||||
|
smb:
|
||||||
|
shareHost: ${TRUENAS_HOST}
|
||||||
|
#nameTemplate: ""
|
||||||
|
namePrefix: "csi-ci-${CI_BUILD_KEY}"
|
||||||
|
nameSuffix: ""
|
||||||
|
shareAuxiliaryConfigurationTemplate: |
|
||||||
|
#guest ok = yes
|
||||||
|
#guest only = yes
|
||||||
|
shareHome: false
|
||||||
|
shareAllowedHosts: []
|
||||||
|
shareDeniedHosts: []
|
||||||
|
#shareDefaultPermissions: true
|
||||||
|
shareGuestOk: true
|
||||||
|
#shareGuestOnly: true
|
||||||
|
#shareShowHiddenFiles: true
|
||||||
|
shareRecycleBin: true
|
||||||
|
shareBrowsable: false
|
||||||
|
shareAccessBasedEnumeration: true
|
||||||
|
shareTimeMachine: false
|
||||||
|
#shareStorageTask:
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
driver: zfs-generic-iscsi
|
||||||
|
|
||||||
|
sshConnection:
|
||||||
|
host: ${SERVER_HOST}
|
||||||
|
port: 22
|
||||||
|
username: ${SERVER_USERNAME}
|
||||||
|
password: ${SERVER_PASSWORD}
|
||||||
|
|
||||||
|
zfs:
|
||||||
|
datasetParentName: tank/ci/${CI_BUILD_KEY}/v
|
||||||
|
detachedSnapshotsDatasetParentName: tank/ci/${CI_BUILD_KEY}/s
|
||||||
|
|
||||||
|
zvolCompression:
|
||||||
|
zvolDedup:
|
||||||
|
zvolEnableReservation: false
|
||||||
|
zvolBlocksize:
|
||||||
|
|
||||||
|
iscsi:
|
||||||
|
targetPortal: ${SERVER_HOST}
|
||||||
|
interface: ""
|
||||||
|
namePrefix: "csi-ci-${CI_BUILD_KEY}"
|
||||||
|
nameSuffix: ""
|
||||||
|
shareStrategy: "targetCli"
|
||||||
|
shareStrategyTargetCli:
|
||||||
|
basename: "iqn.2003-01.org.linux-iscsi.ubuntu-19.x8664"
|
||||||
|
tpg:
|
||||||
|
attributes:
|
||||||
|
authentication: 0
|
||||||
|
generate_node_acls: 1
|
||||||
|
cache_dynamic_acls: 1
|
||||||
|
demo_mode_write_protect: 0
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
driver: zfs-generic-nfs
|
||||||
|
|
||||||
|
sshConnection:
|
||||||
|
host: ${SERVER_HOST}
|
||||||
|
port: 22
|
||||||
|
username: ${SERVER_USERNAME}
|
||||||
|
password: ${SERVER_PASSWORD}
|
||||||
|
|
||||||
|
zfs:
|
||||||
|
datasetParentName: tank/ci/${CI_BUILD_KEY}/v
|
||||||
|
detachedSnapshotsDatasetParentName: tank/ci/${CI_BUILD_KEY}/s
|
||||||
|
|
||||||
|
datasetEnableQuotas: true
|
||||||
|
datasetEnableReservation: true
|
||||||
|
datasetPermissionsMode: "0777"
|
||||||
|
datasetPermissionsUser: 0
|
||||||
|
datasetPermissionsGroup: 0
|
||||||
|
|
||||||
|
nfs:
|
||||||
|
shareHost: ${SERVER_HOST}
|
||||||
|
shareStrategy: "setDatasetProperties"
|
||||||
|
shareStrategySetDatasetProperties:
|
||||||
|
properties:
|
||||||
|
sharenfs: "on"
|
||||||
|
|
@ -28,8 +28,11 @@ fi
|
||||||
|
|
||||||
echo "I am installing node $NODE_VERSION $NODE_DISTRO"
|
echo "I am installing node $NODE_VERSION $NODE_DISTRO"
|
||||||
|
|
||||||
|
if [[ "x${NODE_TARGET_DIR}" == "x" ]]; then
|
||||||
|
NODE_TARGET_DIR="/usr/local/lib/nodejs"
|
||||||
|
fi
|
||||||
|
|
||||||
wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${NODE_DISTRO}.tar.xz >/dev/null 2>&1
|
wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${NODE_DISTRO}.tar.xz >/dev/null 2>&1
|
||||||
mkdir -p /usr/local/lib/nodejs
|
mkdir -p ${NODE_TARGET_DIR}
|
||||||
tar -xJf node-${NODE_VERSION}-${NODE_DISTRO}.tar.xz -C /usr/local/lib/nodejs --strip-components=1
|
tar -xJf node-${NODE_VERSION}-${NODE_DISTRO}.tar.xz -C ${NODE_TARGET_DIR} --strip-components=1
|
||||||
rm node-${NODE_VERSION}-${NODE_DISTRO}.tar.xz
|
rm node-${NODE_VERSION}-${NODE_DISTRO}.tar.xz
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
set -x
|
|
||||||
|
|
||||||
PLATFORM=$TARGETPLATFORM
|
|
||||||
|
|
||||||
if [[ "x${PLATFORM}" == "x" ]]; then
|
|
||||||
PLATFORM="linux/amd64"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$PLATFORM" = "linux/amd64" ]; then
|
|
||||||
export NODE_ARCH="x64"
|
|
||||||
elif [ "$PLATFORM" = "linux/arm64" ]; then
|
|
||||||
export NODE_ARCH="arm64"
|
|
||||||
elif [ "$PLATFORM" = "linux/arm/v7" ]; then
|
|
||||||
export NODE_ARCH="armv7l"
|
|
||||||
else
|
|
||||||
echo "unsupported/unknown PLATFORM ${PLATFORM}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
npm install --target_arch="${NODE_ARCH}"
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "democratic-csi",
|
"name": "democratic-csi",
|
||||||
"version": "1.4.1",
|
"version": "1.4.2",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "democratic-csi",
|
"name": "democratic-csi",
|
||||||
"version": "1.4.1",
|
"version": "1.4.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@grpc/grpc-js": "^1.3.6",
|
"@grpc/grpc-js": "^1.3.6",
|
||||||
|
|
@ -419,9 +419,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "16.9.6",
|
"version": "16.10.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz",
|
||||||
"integrity": "sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ=="
|
"integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ=="
|
||||||
},
|
},
|
||||||
"node_modules/@types/request": {
|
"node_modules/@types/request": {
|
||||||
"version": "2.48.7",
|
"version": "2.48.7",
|
||||||
|
|
@ -2383,9 +2383,9 @@
|
||||||
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
|
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
|
||||||
},
|
},
|
||||||
"node_modules/is-core-module": {
|
"node_modules/is-core-module": {
|
||||||
"version": "2.6.0",
|
"version": "2.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz",
|
||||||
"integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
|
"integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"has": "^1.0.3"
|
"has": "^1.0.3"
|
||||||
},
|
},
|
||||||
|
|
@ -2411,9 +2411,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-glob": {
|
"node_modules/is-glob": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.2.tgz",
|
||||||
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
|
"integrity": "sha512-ZZTOjRcDjuAAAv2cTBQP/lL59ZTArx77+7UzHdWW/XB1mrfp7DEaVpKmZ0XIzx+M7AxfhKcqV+nMetUQmFifwg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"is-extglob": "^2.1.1"
|
"is-extglob": "^2.1.1"
|
||||||
|
|
@ -3948,9 +3948,9 @@
|
||||||
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
|
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
|
||||||
},
|
},
|
||||||
"node_modules/yargs": {
|
"node_modules/yargs": {
|
||||||
"version": "17.2.0",
|
"version": "17.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz",
|
||||||
"integrity": "sha512-UPeZv4h9Xv510ibpt5rdsUNzgD78nMa1rhxxCgvkKiq06hlKCEHJLiJ6Ub8zDg/wR6hedEI6ovnd2vCvJ4nusA==",
|
"integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cliui": "^7.0.2",
|
"cliui": "^7.0.2",
|
||||||
"escalade": "^3.1.1",
|
"escalade": "^3.1.1",
|
||||||
|
|
@ -4315,9 +4315,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "16.9.6",
|
"version": "16.10.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz",
|
||||||
"integrity": "sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ=="
|
"integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ=="
|
||||||
},
|
},
|
||||||
"@types/request": {
|
"@types/request": {
|
||||||
"version": "2.48.7",
|
"version": "2.48.7",
|
||||||
|
|
@ -5813,9 +5813,9 @@
|
||||||
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
|
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
|
||||||
},
|
},
|
||||||
"is-core-module": {
|
"is-core-module": {
|
||||||
"version": "2.6.0",
|
"version": "2.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz",
|
||||||
"integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
|
"integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"has": "^1.0.3"
|
"has": "^1.0.3"
|
||||||
}
|
}
|
||||||
|
|
@ -5832,9 +5832,9 @@
|
||||||
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
|
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
|
||||||
},
|
},
|
||||||
"is-glob": {
|
"is-glob": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.2.tgz",
|
||||||
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
|
"integrity": "sha512-ZZTOjRcDjuAAAv2cTBQP/lL59ZTArx77+7UzHdWW/XB1mrfp7DEaVpKmZ0XIzx+M7AxfhKcqV+nMetUQmFifwg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"is-extglob": "^2.1.1"
|
"is-extglob": "^2.1.1"
|
||||||
|
|
@ -7008,9 +7008,9 @@
|
||||||
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
|
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
|
||||||
},
|
},
|
||||||
"yargs": {
|
"yargs": {
|
||||||
"version": "17.2.0",
|
"version": "17.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz",
|
||||||
"integrity": "sha512-UPeZv4h9Xv510ibpt5rdsUNzgD78nMa1rhxxCgvkKiq06hlKCEHJLiJ6Ub8zDg/wR6hedEI6ovnd2vCvJ4nusA==",
|
"integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"cliui": "^7.0.2",
|
"cliui": "^7.0.2",
|
||||||
"escalade": "^3.1.1",
|
"escalade": "^3.1.1",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "democratic-csi",
|
"name": "democratic-csi",
|
||||||
"version": "1.4.1",
|
"version": "1.4.2",
|
||||||
"description": "kubernetes csi driver framework",
|
"description": "kubernetes csi driver framework",
|
||||||
"main": "bin/democratic-csi",
|
"main": "bin/democratic-csi",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
const { ControllerZfsSshBaseDriver } = require("../controller-zfs-ssh");
|
const { ControllerZfsSshBaseDriver } = require("../controller-zfs-ssh");
|
||||||
const { GrpcError, grpc } = require("../../utils/grpc");
|
const { GrpcError, grpc } = require("../../utils/grpc");
|
||||||
|
const sleep = require("../../utils/general").sleep;
|
||||||
|
|
||||||
const Handlebars = require("handlebars");
|
const Handlebars = require("handlebars");
|
||||||
|
|
||||||
|
|
@ -202,6 +203,24 @@ create /backstores/block/${iscsiName}
|
||||||
case "zfs-generic-nfs":
|
case "zfs-generic-nfs":
|
||||||
switch (this.options.nfs.shareStrategy) {
|
switch (this.options.nfs.shareStrategy) {
|
||||||
case "setDatasetProperties":
|
case "setDatasetProperties":
|
||||||
|
for (let key of ["share", "sharenfs"]) {
|
||||||
|
if (
|
||||||
|
this.options.nfs.shareStrategySetDatasetProperties.properties[
|
||||||
|
key
|
||||||
|
]
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
await zb.zfs.inherit(datasetName, key);
|
||||||
|
} catch (err) {
|
||||||
|
if (err.toString().includes("dataset does not exist")) {
|
||||||
|
// do nothing
|
||||||
|
} else {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await sleep(2000); // let things settle
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new GrpcError(
|
throw new GrpcError(
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
const { CsiBaseDriver } = require("../index");
|
const { CsiBaseDriver } = require("../index");
|
||||||
const SshClient = require("../../utils/ssh").SshClient;
|
const SshClient = require("../../utils/ssh").SshClient;
|
||||||
const { GrpcError, grpc } = require("../../utils/grpc");
|
const { GrpcError, grpc } = require("../../utils/grpc");
|
||||||
|
const sleep = require("../../utils/general").sleep;
|
||||||
|
|
||||||
const { Zetabyte, ZfsSshProcessManager } = require("../../utils/zfs");
|
const { Zetabyte, ZfsSshProcessManager } = require("../../utils/zfs");
|
||||||
|
|
||||||
|
|
@ -1243,7 +1244,27 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver {
|
||||||
// NOTE: -R will recursively delete items + dependent filesets
|
// NOTE: -R will recursively delete items + dependent filesets
|
||||||
// delete dataset
|
// delete dataset
|
||||||
try {
|
try {
|
||||||
await zb.zfs.destroy(datasetName, { recurse: true, force: true });
|
let max_tries = 5;
|
||||||
|
let sleep_time = 3000;
|
||||||
|
let current_try = 1;
|
||||||
|
let success = false;
|
||||||
|
while(!success && current_try <= max_tries) {
|
||||||
|
try {
|
||||||
|
await zb.zfs.destroy(datasetName, { recurse: true, force: true });
|
||||||
|
success = true;
|
||||||
|
} catch (err) {
|
||||||
|
if (err.toString().includes("dataset is busy")) {
|
||||||
|
current_try++;
|
||||||
|
if (current_try > max_tries) {
|
||||||
|
throw err;
|
||||||
|
} else {
|
||||||
|
await sleep(sleep_time);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err.toString().includes("filesystem has dependent clones")) {
|
if (err.toString().includes("filesystem has dependent clones")) {
|
||||||
throw new GrpcError(
|
throw new GrpcError(
|
||||||
|
|
@ -1403,6 +1424,10 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver {
|
||||||
|
|
||||||
const datasetName = datasetParentName;
|
const datasetName = datasetParentName;
|
||||||
|
|
||||||
|
await zb.zfs.create(datasetName, {
|
||||||
|
parents: true,
|
||||||
|
});
|
||||||
|
|
||||||
let properties;
|
let properties;
|
||||||
try {
|
try {
|
||||||
properties = await zb.zfs.get(datasetName, ["avail"]);
|
properties = await zb.zfs.get(datasetName, ["avail"]);
|
||||||
|
|
|
||||||
|
|
@ -2964,6 +2964,10 @@ class FreeNASApiDriver extends CsiBaseDriver {
|
||||||
|
|
||||||
const datasetName = datasetParentName;
|
const datasetName = datasetParentName;
|
||||||
|
|
||||||
|
await httpApiClient.DatasetCreate(datasetName, {
|
||||||
|
create_ancestors: true,
|
||||||
|
});
|
||||||
|
|
||||||
let properties;
|
let properties;
|
||||||
properties = await httpApiClient.DatasetGet(datasetName, ["available"]);
|
properties = await httpApiClient.DatasetGet(datasetName, ["available"]);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue