local-hostpath driver
Signed-off-by: Travis Glenn Hansen <travisghansen@yahoo.com>
This commit is contained in:
		
							parent
							
								
									ee549cc694
								
							
						
					
					
						commit
						d35feec00c
					
				|  | @ -18,7 +18,7 @@ jobs: | ||||||
|           access_token: ${{ github.token }} |           access_token: ${{ github.token }} | ||||||
| 
 | 
 | ||||||
|   build-npm: |   build-npm: | ||||||
|     name: build |     name: build-npm | ||||||
|     runs-on: |     runs-on: | ||||||
|       - self-hosted |       - self-hosted | ||||||
|     steps: |     steps: | ||||||
|  | @ -33,6 +33,7 @@ jobs: | ||||||
|           name: node-modules |           name: node-modules | ||||||
|           #path: node_modules/ |           #path: node_modules/ | ||||||
|           path: node_modules.tar.gz |           path: node_modules.tar.gz | ||||||
|  |           retention-days: 7 | ||||||
| 
 | 
 | ||||||
|   csi-sanity-synology: |   csi-sanity-synology: | ||||||
|     needs: |     needs: | ||||||
|  | @ -156,7 +157,6 @@ jobs: | ||||||
|           TRUENAS_USERNAME: ${{ secrets.SANITY_TRUENAS_USERNAME }} |           TRUENAS_USERNAME: ${{ secrets.SANITY_TRUENAS_USERNAME }} | ||||||
|           TRUENAS_PASSWORD: ${{ secrets.SANITY_TRUENAS_PASSWORD }} |           TRUENAS_PASSWORD: ${{ secrets.SANITY_TRUENAS_PASSWORD }} | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|   # ssh-based drivers |   # ssh-based drivers | ||||||
|   csi-sanity-zfs-generic: |   csi-sanity-zfs-generic: | ||||||
|     needs: |     needs: | ||||||
|  | @ -210,6 +210,30 @@ jobs: | ||||||
|         env: |         env: | ||||||
|           TEMPLATE_CONFIG_FILE: "./ci/configs/${{ matrix.config }}" |           TEMPLATE_CONFIG_FILE: "./ci/configs/${{ matrix.config }}" | ||||||
| 
 | 
 | ||||||
|  |   # zfs-local drivers | ||||||
|  |   csi-sanity-local-hostpath: | ||||||
|  |     needs: | ||||||
|  |       - build-npm | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         config: | ||||||
|  |           - local-hostpath/basic.yaml | ||||||
|  |     runs-on: | ||||||
|  |       - self-hosted | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v2 | ||||||
|  |       - uses: actions/download-artifact@v2 | ||||||
|  |         with: | ||||||
|  |           name: node-modules | ||||||
|  |       - name: csi-sanity | ||||||
|  |         run: | | ||||||
|  |           # run tests | ||||||
|  |           ci/bin/run.sh | ||||||
|  |         env: | ||||||
|  |           TEMPLATE_CONFIG_FILE: "./ci/configs/${{ matrix.config }}" | ||||||
|  |           CSI_SANITY_SKIP: "should fail when requesting to create a snapshot with already existing name and different source volume ID|should fail when requesting to create a volume with already existing name and different capacity" | ||||||
|  | 
 | ||||||
|   build-docker: |   build-docker: | ||||||
|     needs: |     needs: | ||||||
|       - csi-sanity-synology |       - csi-sanity-synology | ||||||
|  |  | ||||||
|  | @ -34,6 +34,8 @@ csi-sanity --csi.endpoint "unix://${CSI_ENDPOINT}" \ | ||||||
| --csi.mountdir "${CSI_SANITY_TEMP_DIR}/mnt" \ | --csi.mountdir "${CSI_SANITY_TEMP_DIR}/mnt" \ | ||||||
| --csi.stagingdir "${CSI_SANITY_TEMP_DIR}/stage" \ | --csi.stagingdir "${CSI_SANITY_TEMP_DIR}/stage" \ | ||||||
| --csi.testvolumeexpandsize 2147483648 \ | --csi.testvolumeexpandsize 2147483648 \ | ||||||
| --csi.testvolumesize 1073741824 | --csi.testvolumesize 1073741824 \ | ||||||
|  | -ginkgo.skip "${CSI_SANITY_SKIP}" \ | ||||||
|  | -ginkgo.focus "${CSI_SANITY_FOCUS}" | ||||||
| 
 | 
 | ||||||
| rm -rf "${CSI_SANITY_TEMP_DIR}" | rm -rf "${CSI_SANITY_TEMP_DIR}" | ||||||
|  |  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | driver: local-hostpath | ||||||
|  | instance_id: | ||||||
|  | local-hostpath: | ||||||
|  |   shareBasePath:      "/tmp/local-hostpath/${CI_BUILD_KEY}/controller" | ||||||
|  |   controllerBasePath: "/tmp/local-hostpath/${CI_BUILD_KEY}/controller" | ||||||
|  |   dirPermissionsMode: "0777" | ||||||
|  |   dirPermissionsUser: root | ||||||
|  |   dirPermissionsGroup: wheel | ||||||
|  | @ -41,7 +41,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { | ||||||
| 
 | 
 | ||||||
|       options.service.identity.capabilities.volume_expansion = [ |       options.service.identity.capabilities.volume_expansion = [ | ||||||
|         //"UNKNOWN",
 |         //"UNKNOWN",
 | ||||||
|         "ONLINE", |         //"ONLINE",
 | ||||||
|         //"OFFLINE"
 |         //"OFFLINE"
 | ||||||
|       ]; |       ]; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,65 @@ | ||||||
|  | const _ = require("lodash"); | ||||||
|  | 
 | ||||||
|  | const { ControllerClientCommonDriver } = require("../controller-client-common"); | ||||||
|  | 
 | ||||||
|  | const NODE_TOPOLOGY_KEY_NAME = "org.democratic-csi.topology/node"; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Crude local-hostpath driver which simply creates directories to be mounted | ||||||
|  |  * and uses rsync for cloning/snapshots | ||||||
|  |  */ | ||||||
|  | class ControllerLocalHostpathDriver extends ControllerClientCommonDriver { | ||||||
|  |   constructor(ctx, options) { | ||||||
|  |     const i_caps = _.get( | ||||||
|  |       options, | ||||||
|  |       "service.identity.capabilities.service", | ||||||
|  |       false | ||||||
|  |     ); | ||||||
|  |     super(...arguments); | ||||||
|  | 
 | ||||||
|  |     if (!i_caps) { | ||||||
|  |       this.ctx.logger.debug("setting local-hostpath identity service caps"); | ||||||
|  | 
 | ||||||
|  |       options.service.identity.capabilities.service = [ | ||||||
|  |         //"UNKNOWN",
 | ||||||
|  |         "CONTROLLER_SERVICE", | ||||||
|  |         "VOLUME_ACCESSIBILITY_CONSTRAINTS", | ||||||
|  |       ]; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   getConfigKey() { | ||||||
|  |     return "local-hostpath"; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   getVolumeContext(name) { | ||||||
|  |     const driver = this; | ||||||
|  |     const config_key = driver.getConfigKey(); | ||||||
|  |     return { | ||||||
|  |       node_attach_driver: "hostpath", | ||||||
|  |       path: driver.getShareVolumePath(name), | ||||||
|  |     }; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   getFsTypes() { | ||||||
|  |     return []; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /** | ||||||
|  |    * Add node topologies | ||||||
|  |    * | ||||||
|  |    * @param {*} call | ||||||
|  |    * @returns | ||||||
|  |    */ | ||||||
|  |   async NodeGetInfo(call) { | ||||||
|  |     const response = await super.NodeGetInfo(...arguments); | ||||||
|  |     response.accessible_topology = { | ||||||
|  |       segments: { | ||||||
|  |         [NODE_TOPOLOGY_KEY_NAME]: response.node_id, | ||||||
|  |       }, | ||||||
|  |     }; | ||||||
|  |     return response; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports.ControllerLocalHostpathDriver = ControllerLocalHostpathDriver; | ||||||
|  | @ -1,5 +1,8 @@ | ||||||
| const { FreeNASSshDriver } = require("./freenas/ssh"); | const { FreeNASSshDriver } = require("./freenas/ssh"); | ||||||
| const { FreeNASApiDriver } = require("./freenas/api"); | const { FreeNASApiDriver } = require("./freenas/api"); | ||||||
|  | const { | ||||||
|  |   ControllerLocalHostpathDriver, | ||||||
|  | } = require("./controller-local-hostpath"); | ||||||
| const { ControllerZfsGenericDriver } = require("./controller-zfs-generic"); | const { ControllerZfsGenericDriver } = require("./controller-zfs-generic"); | ||||||
| const { ControllerZfsLocalDriver } = require("./controller-zfs-local"); | const { ControllerZfsLocalDriver } = require("./controller-zfs-local"); | ||||||
| const { | const { | ||||||
|  | @ -41,6 +44,8 @@ function factory(ctx, options) { | ||||||
|       return new ControllerSmbClientDriver(ctx, options); |       return new ControllerSmbClientDriver(ctx, options); | ||||||
|     case "nfs-client": |     case "nfs-client": | ||||||
|       return new ControllerNfsClientDriver(ctx, options); |       return new ControllerNfsClientDriver(ctx, options); | ||||||
|  |     case "local-hostpath": | ||||||
|  |       return new ControllerLocalHostpathDriver(ctx, options); | ||||||
|     case "lustre-client": |     case "lustre-client": | ||||||
|       return new ControllerLustreClientDriver(ctx, options); |       return new ControllerLustreClientDriver(ctx, options); | ||||||
|     case "node-manual": |     case "node-manual": | ||||||
|  |  | ||||||
|  | @ -575,6 +575,17 @@ class CsiBaseDriver { | ||||||
|             ); |             ); | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|  |         break; | ||||||
|  |       case "hostpath": | ||||||
|  |         result = await mount.pathIsMounted(staging_target_path); | ||||||
|  |         // if not mounted, mount
 | ||||||
|  |         if (!result) { | ||||||
|  |           await mount.bindMount(volume_context.path, staging_target_path); | ||||||
|  |           return {}; | ||||||
|  |         } else { | ||||||
|  |           return {}; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         break; |         break; | ||||||
|       case "oneclient": |       case "oneclient": | ||||||
|         let oneclient = new OneClient(); |         let oneclient = new OneClient(); | ||||||
|  | @ -1119,6 +1130,8 @@ class CsiBaseDriver { | ||||||
|       case "nfs": |       case "nfs": | ||||||
|       case "smb": |       case "smb": | ||||||
|       case "lustre": |       case "lustre": | ||||||
|  |       case "oneclient": | ||||||
|  |       case "hostpath": | ||||||
|       case "iscsi": |       case "iscsi": | ||||||
|       case "zfs-local": |       case "zfs-local": | ||||||
|         // ensure appropriate directories/files
 |         // ensure appropriate directories/files
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue