{"id":37093246,"url":"https://github.com/errordeveloper/gocsi","last_synced_at":"2026-01-14T11:20:31.685Z","repository":{"id":57653254,"uuid":"436259778","full_name":"errordeveloper/gocsi","owner":"errordeveloper","description":"A Container Storage Interface (CSI) library, client, and other helpful utilities created with Go.","archived":false,"fork":true,"pushed_at":"2021-12-08T13:36:04.000Z","size":13346,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-06-20T10:22:28.118Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"rexray/gocsi","license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/errordeveloper.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/contributing.md","funding":null,"license":"LICENSE","code_of_conduct":".github/code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-08T13:35:56.000Z","updated_at":"2023-03-08T04:59:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/errordeveloper/gocsi","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/errordeveloper/gocsi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/errordeveloper%2Fgocsi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/errordeveloper%2Fgocsi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/errordeveloper%2Fgocsi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/errordeveloper%2Fgocsi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/errordeveloper","download_url":"https://codeload.github.com/errordeveloper/gocsi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/errordeveloper%2Fgocsi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28418223,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:47:48.104Z","status":"ssl_error","status_checked_at":"2026-01-14T10:46:19.031Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-14T11:20:30.893Z","updated_at":"2026-01-14T11:20:31.667Z","avatar_url":"https://github.com/errordeveloper.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GoCSI\nThe Container Storage Interface\n([CSI](https://github.com/container-storage-interface/spec))\nis an industry standard specification for creating storage plug-ins\nfor container orchestrators. GoCSI aids in the development and testing\nof CSI storage plug-ins (SP):\n\n| Component | Description |\n|-----------|-------------|\n| [csc](./csc/) | CSI command line interface (CLI) client |\n| [gocsi](#bootstrapper) | Go-based CSI SP bootstrapper  |\n| [mock](./mock) | Mock CSI SP |\n\n## Quick Start\nThe following example illustrates using Docker in combination with the\nGoCSI SP bootstrapper to create a new CSI SP from scratch, serve it on a\nUNIX socket, and then use the GoCSI command line client [`csc`](./csc/) to\ninvoke the `GetPluginInfo` RPC:\n\n```shell\n$ docker run -it golang:latest sh -c \\\n  \"go get github.com/rexray/gocsi \u0026\u0026 \\\n  make -C src/github.com/rexray/gocsi csi-sp\"\n```\n\n\u003ca name=\"bootstrapper\"\u003e\u003c/a\u003e\n## Bootstrapping a Storage Plug-in\nThe root of the GoCSI project enables storage administrators and developers\nalike to bootstrap a CSI SP:\n\n```shell\n$ ./gocsi.sh\nusage: ./gocsi.sh GO_IMPORT_PATH\n```\n\n### Bootstrap Example\nThe GoCSI [Mock SP](./mock) illustrates the features and configuration options\navailable via the bootstrapping method. The following example demonstrates\ncreating a new SP at the Go import path `github.com/rexray/csi-sp`:\n\n```shell\n$ ./gocsi.sh github.com/rexray/csi-sp\ncreating project directories:\n  /home/akutz/go/src/github.com/rexray/csi-sp\n  /home/akutz/go/src/github.com/rexray/csi-sp/provider\n  /home/akutz/go/src/github.com/rexray/csi-sp/service\ncreating project files:\n  /home/akutz/go/src/github.com/rexray/csi-sp/main.go\n  /home/akutz/go/src/github.com/rexray/csi-sp/provider/provider.go\n  /home/akutz/go/src/github.com/rexray/csi-sp/service/service.go\n  /home/akutz/go/src/github.com/rexray/csi-sp/service/controller.go\n  /home/akutz/go/src/github.com/rexray/csi-sp/service/identity.go\n  /home/akutz/go/src/github.com/rexray/csi-sp/service/node.go\nuse golang/dep? Enter yes (default) or no and press [ENTER]:\n  downloading golang/dep@v0.3.2\n  executing dep init\nbuilding csi-sp:\n  success!\n  example: CSI_ENDPOINT=csi.sock \\\n           /home/akutz/go/src/github.com/rexray/csi-sp/csi-sp\n```\n\nThe new SP adheres to the following structure:\n\n```\n|-- provider\n|   |\n|   |-- provider.go\n|\n|-- service\n|   |\n|   |-- controller.go\n|   |-- identity.go\n|   |-- node.go\n|   |-- service.go\n|\n|-- main.go\n```\n\n### Provider\nThe `provider` package leverages GoCSI to construct an SP from the CSI\nservices defined in `service` package. The file `provider.go` may be\nmodified to:\n\n* Supply default values for the SP's environment variable configuration properties\n\nPlease see the Mock SP's [`provider.go`](./mock/provider/provider.go) file\nfor a more complete example.\n\n### Service\nThe `service` package is where the business logic occurs. The files `controller.go`,\n`identity.go`, and `node.go` each correspond to their eponymous CSI services. A\ndeveloper creating a new CSI SP with GoCSI will work mostly in these files. Each\nof the files have a complete skeleton implementation for their respective service's\nremote procedure calls (RPC).\n\n### Main\nThe root, or `main`, package leverages GoCSI to launch the SP as a stand-alone\nserver process. The only requirement is that the environment variable `CSI_ENDPOINT`\nmust be set, otherwise a help screen is emitted that lists all of the SP's available\nconfiguration options (environment variables).\n\n## Configuration\nAll CSI SPs created using this package are able to leverage the following\nenvironment variables:\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eName\u003c/th\u003e\n      \u003cth\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eCSI_ENDPOINT\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eThe CSI endpoint may also be specified by the environment variable\n        CSI_ENDPOINT. The endpoint should adhere to Go's network address\n        pattern:\u003c/p\u003e\n        \u003cul\u003e\n          \u003cli\u003e\u003ccode\u003etcp://host:port\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eunix:///path/to/file.sock\u003c/code\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n        \u003cp\u003eIf the network type is omitted then the value is assumed to be an\n        absolute or relative filesystem path to a UNIX socket file.\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_MODE\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eSpecifies the service mode of the storage plug-in. Valid\n        values are:\u003c/p\u003e\n        \u003cul\u003e\n          \u003cli\u003e\u003ccode\u003e\u0026lt;empty\u0026gt;\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003econtroller\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003enode\u003c/code\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n        \u003cp\u003eIf unset or set to an empty value the storage plug-in activates\n        both controller and node services. The identity service is always\n        activated.\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_ENDPOINT_PERMS\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eWhen \u003ccode\u003eCSI_ENDPOINT\u003c/code\u003e is set to a UNIX socket file\n        this environment variable may be used to specify the socket's file\n        permissions. Please note this value has no effect if\n        \u003ccode\u003eCSI_ENDPOINT\u003c/code\u003e specifies a TCP socket.\u003c/p\u003e\n        \u003cp\u003eThe default value is 0755.\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_ENDPOINT_USER\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eWhen \u003ccode\u003eCSI_ENDPOINT\u003c/code\u003e is set to a UNIX socket file\n        this environment variable may be used to specify the UID or name\n        of the user that owns the file. Please note this value has no effect\n        if \u003ccode\u003eCSI_ENDPOINT\u003c/code\u003e specifies a TCP socket.\u003c/p\u003e\n        \u003cp\u003eThe default value is the user that starts the process.\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_ENDPOINT_GROUP\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eWhen \u003ccode\u003eCSI_ENDPOINT\u003c/code\u003e is set to a UNIX socket file\n        this environment variable may be used to specify the GID or name\n        of the group that owns the file. Please note this value has no effect\n        if \u003ccode\u003eCSI_ENDPOINT\u003c/code\u003e specifies a TCP socket.\u003c/p\u003e\n        \u003cp\u003eThe default value is the group that starts the process.\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_DEBUG\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA \u003ccode\u003etrue\u003c/code\u003e value is equivalent to:\n        \u003cul\u003e\n          \u003cli\u003e\u003ccode\u003eX_CSI_LOG_LEVEL=debug\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eX_CSI_REQ_LOGGING=true\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eX_CSI_REP_LOGGING=true\u003c/code\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_LOG_LEVEL\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eThe log level. Valid values include:\u003c/p\u003e\n        \u003cul\u003e\n          \u003cli\u003e\u003ccode\u003ePANIC\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eFATAL\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eERROR\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eWARN\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eINFO\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eDEBUG\u003c/code\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n        \u003cp\u003eThe default value is \u003ccode\u003eWARN\u003c/code\u003e.\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REQ_LOGGING\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cp\u003eA flag that enables logging of incoming requests to\n      \u003ccode\u003eSTDOUT\u003c/code\u003e.\u003c/p\u003e\n      \u003cp\u003eEnabling this option sets \u003ccode\u003eX_CSI_REQ_ID_INJECTION=true\u003c/code\u003e.\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REP_LOGGING\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cp\u003eA flag that enables logging of incoming responses to\n      \u003ccode\u003eSTDOUT\u003c/code\u003e.\u003c/p\u003e\n      \u003cp\u003eEnabling this option sets \u003ccode\u003eX_CSI_REQ_ID_INJECTION=true\u003c/code\u003e.\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_LOG_DISABLE_VOL_CTX\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cp\u003eA flag that disables the logging of the VolumeContext field.\u003c/p\u003e\n      \u003cp\u003eOnly takes effect if Request or Reply logging is enabled.\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REQ_ID_INJECTION\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA flag that enables request ID injection. The ID is parsed from\n      the incoming request's metadata with a key of\n      \u003ccode\u003ecsi.requestid\u003c/code\u003e.\n      If no value for that key is found then a new request ID is\n      generated using an atomic sequence counter.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SPEC_VALIDATION\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eSetting \u003ccode\u003eX_CSI_SPEC_VALIDATION=true\u003c/code\u003e is the same as:\n        \u003cul\u003e\n          \u003cli\u003e\u003ccode\u003eX_CSI_SPEC_REQ_VALIDATION=true\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eX_CSI_SPEC_REP_VALIDATION=true\u003c/code\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SPEC_REQ_VALIDATION\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA flag that enables the validation of CSI request messages.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SPEC_REP_VALIDATION\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA flag that enables the validation of CSI response messages.\n      Invalid responses are marshalled into a gRPC error with a code\n      of \u003ccode\u003eInternal\u003c/code\u003e.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SPEC_DISABLE_LEN_CHECK\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA flag that disables validation of CSI message field lengths.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REQUIRE_STAGING_TARGET_PATH\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eA flag that enables treating the following fields as required:\u003c/p\u003e\n        \u003cul\u003e\n          \u003cli\u003e\u003ccode\u003eNodePublishVolumeRequest.StagingTargetPath\u003c/code\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n      \u003cp\u003eEnabling this option sets \u003ccode\u003eX_CSI_SPEC_REQ_VALIDATION=true\u003c/code\u003e\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REQUIRE_VOL_CONTEXT\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eA flag that enables treating the following fields as required:\u003c/p\u003e\n        \u003cul\u003e\n          \u003cli\u003e\u003ccode\u003eControllerPublishVolumeRequest.VolumeContext\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eValidateVolumeCapabilitiesRequest.VolumeContext\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eValidateVolumeCapabilitiesResponse.VolumeContext\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eNodeStageVolumeRequest.VolumeContext\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eNodePublishVolumeRequest.VolumeContext\u003c/code\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n        \u003cp\u003eEnabling this option sets \u003ccode\u003eX_CSI_SPEC_REQ_VALIDATION=true\u003c/code\u003e\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REQUIRE_PUB_CONTEXT\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eA flag that enables treating the following fields as required:\u003c/p\u003e\n        \u003cul\u003e\n          \u003cli\u003e\u003ccode\u003eControllerPublishVolumeResponse.PublishContext\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eNodeStageVolumeRequest.PublishContext\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eNodePublishVolumeRequest.PublishContext\u003c/code\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n        \u003cp\u003eEnabling this option sets \u003ccode\u003eX_CSI_SPEC_REQ_VALIDATION=true\u003c/code\u003e\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA \u003ccode\u003etrue\u003c/code\u003e value is equivalent to:\n        \u003cul\u003e\n          \u003cli\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS_CREATE_VOL=true\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS_DELETE_VOL=true\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS_CTRLR_PUB_VOL=true\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS_CTRLR_UNPUB_VOL=true\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS_NODE_PUB_VOL=true\u003c/code\u003e\u003c/li\u003e\n          \u003cli\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS_NODE_UNPUB_VOL=true\u003c/code\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n        \u003cp\u003eEnabling this option sets \u003ccode\u003eX_CSI_SPEC_REQ_VALIDATION=true\u003c/code\u003e\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS_CREATE_VOL\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eA flag that enables treating the following fields as required:\u003c/p\u003e\n        \u003cul\u003e\u003cli\u003e\u003ccode\u003eCreateVolumeRequest.UserCredentials\u003c/code\u003e\u003c/li\u003e\u003c/ul\u003e\n        \u003cp\u003eEnabling this option sets \u003ccode\u003eX_CSI_SPEC_REQ_VALIDATION=true\u003c/code\u003e\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS_DELETE_VOL\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eA flag that enables treating the following fields as required:\u003c/p\u003e\n        \u003cul\u003e\u003cli\u003e\u003ccode\u003eDeleteVolumeRequest.UserCredentials\u003c/code\u003e\u003c/li\u003e\u003c/ul\u003e\n        \u003cp\u003eEnabling this option sets \u003ccode\u003eX_CSI_SPEC_REQ_VALIDATION=true\u003c/code\u003e\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS_CTRLR_PUB_VOL\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eA flag that enables treating the following fields as required:\u003c/p\u003e\n        \u003cul\u003e\u003cli\u003e\u003ccode\u003eControllerPublishVolumeRequest.UserCredentials\u003c/code\u003e\u003c/li\u003e\u003c/ul\u003e\n        \u003cp\u003eEnabling this option sets \u003ccode\u003eX_CSI_SPEC_REQ_VALIDATION=true\u003c/code\u003e\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS_CTRLR_UNPUB_VOL\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eA flag that enables treating the following fields as required:\u003c/p\u003e\n        \u003cul\u003e\u003cli\u003e\u003ccode\u003eControllerUnpublishVolumeRequest.UserCredentials\u003c/code\u003e\u003c/li\u003e\u003c/ul\u003e\n        \u003cp\u003eEnabling this option sets \u003ccode\u003eX_CSI_SPEC_REQ_VALIDATION=true\u003c/code\u003e\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS_NODE_STG_VOL\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eA flag that enables treating the following fields as required:\u003c/p\u003e\n        \u003cul\u003e\u003cli\u003e\u003ccode\u003eNodeStageVolumeRequest.UserCredentials\u003c/code\u003e\u003c/li\u003e\u003c/ul\u003e\n        \u003cp\u003eEnabling this option sets \u003ccode\u003eX_CSI_SPEC_REQ_VALIDATION=true\u003c/code\u003e\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_REQUIRE_CREDS_NODE_PUB_VOL\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cp\u003eA flag that enables treating the following fields as required:\u003c/p\u003e\n        \u003cul\u003e\u003cli\u003e\u003ccode\u003eNodePublishVolumeRequest.UserCredentials\u003c/code\u003e\u003c/li\u003e\u003c/ul\u003e\n        \u003cp\u003eEnabling this option sets \u003ccode\u003eX_CSI_SPEC_REQ_VALIDATION=true\u003c/code\u003e\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA flag that enables the serial volume access middleware.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_TIMEOUT\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA \u003ca href=\"https://golang.org/pkg/time/#ParseDuration\"\u003e\u003ccode\u003e\n      time.Duration\u003c/code\u003e\u003c/a\u003e string that determines how long the\n      serial volume access middleware waits to obtain a lock for the request's\n      volume before returning the gRPC error code \u003ccode\u003eFailedPrecondition\u003c/code\u003e to\n      indicate an operation is already pending for the specified volume.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_ENDPOINTS\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA list comma-separated etcd endpoint values. If this environment\n      variable is defined then the serial volume access middleware will\n      automatically use etcd for locking, providing distributed serial\n      volume access.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_DOMAIN\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eThe etcd key prefix to use with the locks that provide\n      distributed, serial volume access. The key paths are:\n      \u003cul\u003e\n        \u003cli\u003e\u003ccode\u003e/DOMAIN/volumesByID/VOLUME_ID\u003c/code\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ccode\u003e/DOMAIN/volumesByName/VOLUME_NAME\u003c/code\u003e\u003c/li\u003e\n      \u003c/ul\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_TTL\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eThe length of time etcd will wait before  releasing ownership of\n      a distributed lock if the lock's session has not been renewed.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_AUTO_SYNC_INTERVAL\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA time.Duration string that specifies the interval to update\n      endpoints with its latest members. A value of 0 disables\n      auto-sync. By default auto-sync is disabled.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_DIAL_TIMEOUT\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA time.Duration string that specifies the timeout for failing to\n      establish a connection.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_DIAL_KEEP_ALIVE_TIME\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA time.Duration string that defines the time after which the client\n      pings the server to see if the transport is alive.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_DIAL_KEEP_ALIVE_TIMEOUT\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA time.Duration string that defines the time that the client waits for\n      a response for the keep-alive probe. If the response is not received\n      in this time, the connection is closed.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_MAX_CALL_SEND_MSG_SZ\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eDefines the client-side request send limit in bytes. If 0, it defaults\n      to 2.0 MiB (2 * 1024 * 1024). Make sure that \"MaxCallSendMsgSize\" \u003c\n      server-side default send/recv limit. (\"--max-request-bytes\" flag to\n      etcd or \"embed.Config.MaxRequestBytes\").\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_MAX_CALL_RECV_MSG_SZ\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eDefines the client-side response receive limit. If 0, it defaults to\n      \"math.MaxInt32\", because range response can easily exceed request send\n      limits. Make sure that \"MaxCallRecvMsgSize\" \u003e= server-side default\n      send/recv limit. (\"--max-request-bytes\" flag to etcd or\n      \"embed.Config.MaxRequestBytes\").\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_USERNAME\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eThe user name used for authentication.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_PASSWORD\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eThe password used for authentication.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_REJECT_OLD_CLUSTER\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA flag that indicates refusal to create a client against an outdated\n      cluster.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_TLS\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA flag that indicates the client should use TLS.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eX_CSI_SERIAL_VOL_ACCESS_ETCD_TLS_INSECURE\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eA flag that indicates the TLS connection should not verify peer\n      certificates.\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferrordeveloper%2Fgocsi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferrordeveloper%2Fgocsi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferrordeveloper%2Fgocsi/lists"}