diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 82b5f62..da39fe9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,28 +21,15 @@ jobs: strategy: matrix: config: - - synlogy-iscsi/default.yaml + - synlogy/iscsi.yaml runs-on: - self-hosted steps: - uses: actions/checkout@v2 - name: csi-sanity run: | - export PATH="/usr/local/lib/nodejs/bin:${PATH}" - # install deps - npm i - - # generate key for paths etc - export CI_BUILD_KEY=$(uuidgen) - - # 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 + # run tests + ci/bin/run.sh env: TEMPLATE_CONFIG_FILE: "./ci/configs/${{ matrix.config }}" SYNOLOGY_HOST: ${{ secrets.SANITY_SYNOLOGY_HOST }} @@ -50,11 +37,56 @@ jobs: SYNOLOGY_USERNAME: ${{ secrets.SANITY_SYNOLOGY_USERNAME }} SYNOLOGY_PASSWORD: ${{ secrets.SANITY_SYNOLOGY_PASSWORD }} SYNOLOGY_VOLUME: ${{ secrets.SANITY_SYNOLOGY_VOLUME }} - TARGET_PORTAL: ${{ secrets.SANITY_SYNOLOGY_TARGET_PORTAL }} + + # api-based drivers + csi-sanity-truenas-scale: + strategy: + matrix: + config: + - truenas/scale-iscsi.yaml + - truenas/scale-nfs.yaml + - 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: + matrix: + config: + - truenas/core-iscsi.yaml + - truenas/core-nfs.yaml + - 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 }} build: needs: - csi-sanity-synology + - csi-sanity-truenas-scale + - csi-sanity-truenas-core runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 diff --git a/ci/bin/launch-server.sh b/ci/bin/launch-server.sh index d59d2b1..52753c3 100755 --- a/ci/bin/launch-server.sh +++ b/ci/bin/launch-server.sh @@ -8,9 +8,10 @@ set -x : ${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:=$(mktemp -t ci-csi-config-XXXXXXXX)} + : ${CONFIG_FILE:=/tmp/csi-config-${CI_BUILD_KEY}.yaml} if [[ "x${TEMPLATE_CONFIG_FILE}" != "x" ]];then envsubst < "${TEMPLATE_CONFIG_FILE}" > "${CONFIG_FILE}" @@ -21,4 +22,5 @@ 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} diff --git a/ci/bin/run.sh b/ci/bin/run.sh new file mode 100755 index 0000000..b951a99 --- /dev/null +++ b/ci/bin/run.sh @@ -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 diff --git a/ci/configs/synlogy-iscsi/default.yaml b/ci/configs/synlogy/iscsi.yaml similarity index 96% rename from ci/configs/synlogy-iscsi/default.yaml rename to ci/configs/synlogy/iscsi.yaml index 6811247..8b58913 100644 --- a/ci/configs/synlogy-iscsi/default.yaml +++ b/ci/configs/synlogy/iscsi.yaml @@ -13,10 +13,10 @@ synology: volume: ${SYNOLOGY_VOLUME} iscsi: - targetPortal: ${TARGET_PORTAL} + targetPortal: ${SYNOLOGY_HOST} targetPortals: [] baseiqn: "iqn.2000-01.com.synology:XpenoDsm62x." - namePrefix: "csi-${CI_BUILD_KEY}" + namePrefix: "csi-${CI_BUILD_KEY}-" nameSuffix: "-ci" lunTemplate: diff --git a/ci/configs/truenas/core-iscsi.yaml b/ci/configs/truenas/core-iscsi.yaml new file mode 100644 index 0000000..05d0359 --- /dev/null +++ b/ci/configs/truenas/core-iscsi.yaml @@ -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 diff --git a/ci/configs/truenas/core-nfs.yaml b/ci/configs/truenas/core-nfs.yaml new file mode 100644 index 0000000..5b0f272 --- /dev/null +++ b/ci/configs/truenas/core-nfs.yaml @@ -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: wheel + shareMapallUser: "" + shareMapallGroup: "" diff --git a/ci/configs/truenas/core-smb.yaml b/ci/configs/truenas/core-smb.yaml new file mode 100644 index 0000000..74964ea --- /dev/null +++ b/ci/configs/truenas/core-smb.yaml @@ -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: diff --git a/ci/configs/truenas/scale-iscsi.yaml b/ci/configs/truenas/scale-iscsi.yaml new file mode 100644 index 0000000..05d0359 --- /dev/null +++ b/ci/configs/truenas/scale-iscsi.yaml @@ -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 diff --git a/ci/configs/truenas/scale-nfs.yaml b/ci/configs/truenas/scale-nfs.yaml new file mode 100644 index 0000000..0e817ce --- /dev/null +++ b/ci/configs/truenas/scale-nfs.yaml @@ -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: "" diff --git a/ci/configs/truenas/scale-smb.yaml b/ci/configs/truenas/scale-smb.yaml new file mode 100644 index 0000000..74964ea --- /dev/null +++ b/ci/configs/truenas/scale-smb.yaml @@ -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: