diff --git a/cmd/pmem-csi-driver/main.go b/cmd/pmem-csi-driver/main.go index 9bd204c3ae..f2e8a46781 100644 --- a/cmd/pmem-csi-driver/main.go +++ b/cmd/pmem-csi-driver/main.go @@ -8,19 +8,11 @@ SPDX-License-Identifier: Apache-2.0 package main import ( - "flag" "os" - "k8s.io/klog/v2" - "github.com/intel/pmem-csi/pkg/pmem-csi-driver" ) -func init() { - klog.InitFlags(nil) -} - func main() { - flag.Parse() os.Exit(pmemcsidriver.Main()) } diff --git a/cmd/pmem-csi-operator/main.go b/cmd/pmem-csi-operator/main.go index 94f1fa2b8f..763d94b8ba 100644 --- a/cmd/pmem-csi-operator/main.go +++ b/cmd/pmem-csi-operator/main.go @@ -7,13 +7,11 @@ SPDX-License-Identifier: Apache-2.0 package main import ( - "flag" "os" pmemoperator "github.com/intel/pmem-csi/pkg/pmem-csi-operator" ) func main() { - flag.Parse() os.Exit(pmemoperator.Main()) } diff --git a/deploy/bindata_generated.go b/deploy/bindata_generated.go index da04867a46..b8b2651e6a 100644 --- a/deploy/bindata_generated.go +++ b/deploy/bindata_generated.go @@ -85,7 +85,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _deployKubernetes117DirectPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\xc1\x6e\xef\xe1\x0e\xa8\xac\x78\xdb\x03\x5a\x01\x7e\xc8\x26\xbe\xd4\xe8\xc6\x31\x92\xec\xbd\x06\x0c\x35\x96\x59\x53\x24\x4b\x8e\xbc\xf1\x15\xfd\xdf\x0b\x52\x92\xad\x2f\xcb\x1f\xcd\x07\x8a\xf3\x3e\xac\x23\x72\x38\xbf\xf9\xe0\xcc\x6f\x6c\xff\x91\xdc\x80\x04\x43\x11\x62\xf2\x9d\xe3\x92\x7c\x4a\xe9\x0a\xc8\x2a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x18\x50\xcd\x7f\x05\x63\xb9\x92\x11\x59\x8f\x06\x2b\x2e\xe3\x88\xcc\x68\x0a\x56\x53\x06\x83\x14\x90\xc6\x14\x69\x34\x20\x44\xd0\x67\x10\xd6\xbd\x23\x44\xa7\x90\x06\xcc\xf2\x21\x97\x08\x62\xc8\x54\x1a\xc6\xa0\x85\xda\xa4\x20\x31\x22\x31\x37\xc0\x30\xd0\x46\xc5\x19\x43\xae\xe4\x80\x10\x49\x53\x88\xb6\x82\x83\x20\x08\xba\x95\x3f\x80\x59\x73\x06\x97\x8c\xa9\x4c\xe2\xdb\x21\x08\x98\x92\x68\x94\x10\x60\x8a\x35\x6f\x72\x0f\x44\xf3\x4c\xd9\x90\x66\xb8\x54\x86\xff\x46\xdd\xa1\xc3\xd5\x5f\xed\x90\xab\x70\x0b\xfe\x5e\x89\x37\x74\x5a\x00\x2f\x08\x46\x52\xe1\x36\xad\xb9\x43\x05\x26\x60\x8b\x64\x8f\x01\x26\x13\x60\xa3\x41\x40\xa8\xe6\x37\x46\x65\xda\x03\x09\xc8\xa7\x4f\x03\x42\x0c\x58\x95\x19\x06\xc5\x33\x90\xb1\x56\x5c\xa2\x1d\x10\xb2\x06\xf3\x5c\x3c\x4e\x00\xfd\xff\xdf\x29\xb2\xa5\x7f\x27\xb8\xcd\x1f\xc5\x20\x00\xc1\xbf\xcd\x74\x4c\x8b\xb7\xcc\x80\x7b\xdb\xd2\xc9\x94\x32\x31\x97\x55\xb7\xb5\x41\x08\xa0\x16\xde\x0a\x81\x45\x65\x68\x02\x7b\x95\x33\xcb\x8b\x2d\x8c\x6a\xca\x38\xf2\x7d\x50\xb6\x00\x76\x98\x0a\xa5\x0d\x28\x7a\xbb\x5e\x40\x3d\x2a\x14\x5a\xc5\x1d\x8a\x5b\xa2\x54\x6b\xdb\x16\x36\xa0\x05\x67\xd4\x42\x57\x24\xcf\xc8\xe8\x2b\x91\x59\x04\xf3\x11\x89\x6d\x32\x29\xc1\x9c\x94\xc5\xda\x59\x66\x11\x24\xae\x95\xc8\xd2\xf3\x02\x78\x52\xac\x1a\x0a\x99\xa0\x3c\x3d\x5e\x6b\x91\x2b\x27\xe7\x6a\x99\xa8\x82\xda\xbd\x17\xa6\xa1\xee\xb8\x2a\xb0\x86\x56\x09\x38\x31\xdb\xdb\xb6\x48\xaa\xed\x52\xe1\xf0\x90\x51\x45\xc8\x8a\xed\x7d\x56\xbd\x96\x0e\xd7\x02\xda\x06\x1f\x50\x75\xb8\x8c\x48\x15\xbf\x66\x50\x4e\x38\xee\xbc\x8e\xf5\x85\xcb\x98\xcb\xe4\x2d\x7b\xad\xe5\xf5\xab\xad\x04\xf4\x35\x2e\x25\xe0\x1e\x16\x4e\x7b\xe9\x9f\x1e\x63\x06\x84\x54\xba\xef\xf1\x4d\xd3\x66\xcf\xff\x04\x86\xbe\xb6\x74\x72\x8f\x77\xa1\x0c\x95\x02\xfb\x31\x71\x38\xd7\xdb\xd5\xce\x70\x52\x41\x7f\x07\xbf\x37\xd9\xe4\x47\xd2\x48\xab\x81\x39\x65\x5a\x19\xdc\x76\x78\x83\x11\x19\x5d\x5c\x5c\x5c\x78\x14\x48\x4d\x02\x38\xaf\x3d\xb5\x20\x80\xa1\x32\x39\x4e\xaa\xf5\x3e\x9d\x67\x18\xf1\x81\xee\x4a\x01\x0d\x67\xf6\x0c\x5f\x8d\x3a\x7d\x35\x7a\x6b\x5f\x11\x82\x1b\x0d\x11\x99\xa9\x18\x9c\xd6\x96\xf3\x1c\x0f\xdb\x5d\xe7\x07\xa4\x08\x8b\x4c\x3c\xc0\x87\xce\x2e\xa5\x23\x4b\x3a\x18\x91\x51\xcb\x4f\xa9\xeb\x19\x5f\x2b\xb8\x0e\xb8\xee\x2c\xe0\x36\xcf\xa8\x59\x0f\x7e\x84\x54\x0b\x8a\x50\xa0\xaa\x38\xcd\x43\x92\x52\xa1\x2f\x40\x5b\x94\x9d\x40\x2c\x33\xd4\xc5\xc9\x1d\x4d\xb9\x04\x63\x8b\xdd\xa2\x66\xe1\x41\x1b\xcf\xb2\x72\xaf\xe0\x77\x78\x5e\x2a\xb5\x8a\x08\x4f\xa4\x32\xe0\xb7\x96\xb1\xf1\x60\x16\x0b\x2e\x39\x6e\x76\xf0\x5c\xb7\xbf\x6c\x3d\x75\x91\xfc\x57\xc6\x0d\xc4\xd7\x99\xe1\x32\x79\x60\x4b\x88\x33\xc1\x65\x32\xf5\x07\x17\x8f\x27\x2f\xc0\x32\x87\xa9\x2a\x99\x9f\xf9\x50\xc4\xfe\x11\x4c\x6a\xeb\xcb\x41\x9e\x0a\x93\x17\x6d\xc0\xda\xba\xa7\xcb\x1d\x2b\xd8\x44\x5d\x06\x76\xf8\xaf\x7c\x29\x0d\x86\xba\x6c\x23\x33\x85\x53\xd9\x5a\x5f\x53\x91\x41\x4b\x95\x67\x41\x52\x7d\xea\x7a\xbc\xa0\xc2\x42\xb9\xb2\x0b\x74\x79\x84\x9b\x32\xd3\x94\xca\x78\x77\x66\x40\xc2\xcc\x9a\x50\x28\x46\x45\xf8\xcc\x65\xb8\x0d\x7c\x6c\xf8\xba\x02\x3a\x20\xc1\x7a\xfc\xe7\xea\x9f\xa9\x8a\x61\xdc\x61\x5e\x40\x82\x72\x58\x1e\x67\x92\xbf\x44\x61\x18\x32\xcb\xc3\x7a\x36\x0d\xad\x62\xab\xaa\x8c\x81\x84\x5b\x34\x9b\x49\x29\x8b\x4c\x47\x61\x78\x31\xf4\xff\xa2\x5d\x33\x28\xf6\xbb\x98\xf1\x78\xfc\xc3\x8f\xff\xf8\xf6\x65\xf2\x34\xbb\xbb\x9e\x3c\xcd\x2e\x6f\x27\x3f\x55\xf7\x30\xfa\x0b\x17\x30\x0e\x19\x18\xb4\x21\xa3\x43\x66\xb0\xb6\x0e\x06\xab\x3b\x50\xd8\xe6\x96\x15\x6c\x9a\x3b\x56\xb0\xa9\xee\xc8\x1d\xe5\x8a\xcc\xf8\x87\x1f\xe7\xb7\x93\xdb\xa7\xab\x87\xe9\xd3\xf5\xfd\xf4\xd7\xc9\x7d\x1b\x52\x51\xdf\xbf\xfa\xa1\x68\x1c\xed\xea\xb6\x7b\x81\x5c\x57\x43\x93\x17\xb5\xba\x7d\x83\x46\x7e\xfc\x62\x54\x5a\x4f\x91\x05\x07\x11\x17\x7c\xa5\xfa\x6a\x34\xb4\xfa\xa2\x17\x9a\x53\x5c\x46\xfe\xfa\x0d\x9d\x77\x5d\x4d\x6a\xa1\x79\x9c\xdc\xdf\x4e\x67\x97\x8f\xd3\xbb\xd9\xd3\xd7\xbb\x9b\xa7\xf9\xe5\xe3\xdf\x9b\x98\x22\x12\x62\xaa\x43\x04\x93\x16\x9f\x68\x04\x42\x25\xad\xa3\xba\x7c\xd5\x3e\xaa\x7d\xa7\x5a\x07\xdd\xdc\x5d\x4f\xbe\x7c\xbb\x69\xcb\xbe\xfc\x7c\xf1\xb7\xbc\xb0\x5c\xcd\xc6\x3b\x37\xf3\x94\x26\x10\x11\x7f\x60\x33\xe1\x23\x46\x25\x35\x9b\xfa\xde\x79\x26\xc4\x5c\x09\xce\x36\x11\x99\x2e\x66\x0a\xe7\x06\x2c\xc8\x5d\xa2\x54\xda\x4f\xe3\xde\x6c\x3b\x75\x09\x79\x7b\x2d\xe7\x8d\xc6\x5d\x3d\x69\xc7\x02\xf2\x97\x05\x96\x19\x8e\x9b\x2b\x37\x90\xbd\x60\xbd\xee\xd1\xf8\x4e\x8a\xcd\xbd\x52\x3e\x97\xed\xc6\x22\xa4\x11\x41\x93\xed\xa2\x57\x09\xc5\x2d\x58\xeb\x4c\xf2\xb1\xee\x8d\x53\x3e\x0b\xde\x3a\xca\x59\xb3\x20\x75\x4f\x0a\x79\x7f\x2b\x5a\xf0\xcb\xbb\xec\x2f\xd8\x3e\x49\xcb\x5b\x72\x5a\x64\x09\x97\x81\x2b\x0d\x80\x41\xcc\xcd\x1e\x59\x4c\x75\x4b\x16\x53\x5d\x91\x08\x08\x35\x49\x0d\x75\xb3\x7c\xf9\x98\xd3\x38\x76\x25\x7d\x7c\x4c\x81\x0a\x16\x40\x31\x33\x10\x24\x14\xc1\x8e\x1f\x95\x56\x42\x25\x9b\x71\xcd\xd1\x6e\x9f\x75\xb1\xc3\x00\xf7\x6e\x40\x9e\x82\xca\x70\xfc\x73\x5a\x7b\x1c\xc3\x82\x66\x02\x83\x85\x75\x8c\x6a\x0c\x2f\xf8\x97\xda\x7a\x91\x14\x5b\xd0\xbe\x78\x8c\x9a\x59\xed\xa6\x90\x84\x19\x37\x43\x59\x9e\x04\xc5\x38\x1e\x36\x26\x9b\x68\xfd\x79\x78\x31\xfc\x7c\x56\x9a\x77\xcd\x2e\x27\xe5\xfb\xe8\xcd\xf3\xfd\xa8\xd4\x3d\x21\x01\xf7\xe2\x31\x99\xbc\xb4\x33\x25\x1d\x9a\x06\x06\xbf\xf4\xcd\x82\xc9\x67\x96\xed\x49\xd5\x51\xae\x8f\xf6\xb9\x17\x2a\xe1\x38\x42\x95\x72\x04\x04\x16\x0b\x60\xe8\x58\x43\xc1\x72\x76\x3a\x3d\x0b\x71\xb5\xdb\x4f\xae\xc3\x55\xf6\x0c\x46\x02\x82\x1f\xa9\x53\xea\xe6\xd1\x41\xd5\x43\xd5\x53\x53\x8d\x9b\x6b\x6e\x22\x22\x33\x21\x9a\x95\x6d\x8f\x5f\x82\xde\x0b\x6f\x81\x19\xa8\x05\x2f\x7f\xd2\xb0\x7a\x2b\x9c\xaf\xda\x0e\x48\xff\xfe\x4f\x03\x50\x79\xdb\xfb\x87\x8d\x6b\x0a\xa9\x92\x6f\x3b\x6a\x38\x6f\x1f\x18\x32\x4e\x1c\x2b\x8a\x13\xcf\x84\xf7\xa1\xd3\x42\x05\xfa\xfb\xce\x09\xaf\x4e\x76\x63\x70\xd7\xf4\x96\x4a\x9a\x80\x19\xe7\x58\x0f\x91\xe1\x9a\xf5\x3d\x34\xb8\xd5\x5a\x8e\xe2\xb2\xdb\xda\xd0\x60\xc8\x85\xd4\xfc\xee\xfa\x69\x3a\xff\xc9\x13\xe5\xd1\x11\xc4\xba\xa3\xe8\xb4\x49\xf6\xbb\x10\x68\x8b\x14\x3d\x1f\x19\x87\x6b\x6a\x42\xc1\x9f\xc3\x23\x88\xf4\x69\xb4\xdb\x59\x3b\x07\xc3\x40\x22\x4d\x60\x3c\xaa\x9b\xf9\xff\x4e\xca\x2b\x09\xf0\x0e\x50\x90\x62\x66\x87\x5a\xc5\x15\x6d\xaf\xce\xe9\x5f\x71\xce\xf8\x5d\x8f\x07\xda\xf0\x35\x17\x90\x40\xdc\xa0\x27\x35\x82\x72\xf1\xf6\x93\x42\x79\xb5\x1d\x27\x11\x80\x61\x4e\x29\x6c\x58\xe7\x28\x75\x52\x96\xcb\x1b\xa5\x69\xe2\x95\x46\xe4\x0b\xcf\x4b\x31\x57\x92\x8a\xb6\x5f\xdc\x7e\x5f\xe4\x7a\x86\x87\x16\x90\xfc\xeb\xe4\x73\x75\x3a\xf1\x1e\x6d\xdd\x03\x92\xa7\x68\x3d\xc3\x51\x0c\xeb\x96\x4c\x0c\xeb\x1e\x3d\x76\xd3\xd6\x62\x37\xbd\xc8\x3a\xf8\xef\xc1\xc9\xab\x74\x5e\xcf\x0d\x3e\xc3\x85\xee\x30\xdf\x05\x4e\x9b\xe0\x8a\x08\x96\x1d\x2e\xcf\x4b\x5d\x6b\x24\xcd\x6c\xdb\xd3\x2a\x3a\xbb\x72\xe7\x84\x58\xdf\xd5\xd9\x1b\xfe\xe7\x1a\x78\x78\x92\xf3\xf9\x93\x97\x92\xad\xf5\x26\x5a\x8f\x86\x9f\x87\x17\x67\xd5\xa6\xe6\x59\x1f\x3e\x89\x1d\xcc\xc4\x6a\xd0\x5b\xd2\xb5\x8c\xd8\x9d\x51\xfd\x9c\x77\x07\xa6\x70\x6c\x1e\x92\x7d\xe3\xd1\x52\xd9\x5c\x73\xb5\xb6\xf6\x57\xb6\xde\x3b\x92\x7f\x69\x72\xed\x6f\x85\x32\x9b\x3b\x73\x55\xfe\x66\xa0\xd7\x0b\xe7\x00\x79\x2a\x19\x60\x78\xb2\xfe\x3d\x7e\x3c\xcb\x1d\x7d\x85\xfe\x38\x34\x9d\xe5\xfd\x34\x2c\xf5\x5a\x7f\x9c\xda\x46\x85\x0f\xf6\xd6\xf0\x23\xe7\x5d\x2f\xd8\x9c\x75\x8f\x30\xe2\x15\xf2\x69\x4f\xa5\xed\x51\x5e\xef\x44\xc7\x69\xa9\x77\xaa\xde\xe3\xeb\x6d\xeb\xc8\x4b\x51\xb4\xb5\xe6\xec\x5f\xff\xe5\x49\xb8\x1e\x3d\x03\xd2\xed\xcf\x08\x1e\xa6\xd7\x39\xf5\x7a\xb3\x8f\x02\x2a\x71\x29\x47\x53\x8a\x48\xd9\xf2\xbe\xf8\x6a\x2a\x22\xfe\x0b\x1a\xff\xfd\x6d\x3c\x95\x0b\x75\x27\x7d\x61\xdc\x96\xcc\xbc\xea\x7c\xe5\x0b\x60\x1b\x26\xe0\x56\xc5\xe5\x6f\x5c\xe6\xdb\xdf\x51\xf9\x3f\x27\x7a\x09\x29\x18\x2a\x06\xff\x0d\x00\x00\xff\xff\xc5\x8a\x47\x12\xd2\x2a\x00\x00") +var _deployKubernetes117DirectPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\xc1\x6e\xef\xe1\x0e\xa8\xac\x78\xdb\x03\x5a\x01\x7e\xc8\x26\xbe\xd4\xe8\xc6\x31\x92\xec\xbd\x06\x0c\x35\x96\x59\x53\x24\x4b\x8e\xbc\xf1\x15\xfd\xdf\x0b\x52\x92\xad\x2f\xcb\x1f\x97\x0f\x14\xf5\x3e\xac\x43\x71\x38\xbf\xf9\xe0\xcc\x6f\x6c\xff\x91\xdc\x80\x04\x43\x11\x62\xf2\x9d\xe3\x92\x7c\x4a\xe9\x0a\xc8\x2a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x18\x50\xcd\x7f\x05\x63\xb9\x92\x11\x59\x8f\x06\x2b\x2e\xe3\x88\x3c\x80\x59\x73\x06\x97\x8c\xa9\x4c\xe2\x20\x05\xa4\x31\x45\x1a\x0d\x08\x11\xf4\x19\x84\x75\xef\x08\xd1\x29\xa4\x01\xb3\x7c\xc8\x25\x82\x18\x32\x95\x86\x31\x68\xa1\x36\x29\x48\x8c\x48\xcc\x0d\x30\x0c\xb4\x51\x71\xc6\x90\x2b\x39\x20\x44\xd2\x14\xa2\xad\x60\xc0\x94\x44\xa3\x84\x00\x53\x3c\xb3\x9a\xb2\xca\x86\x41\x10\x04\x35\x88\xe6\x99\xb2\x21\xcd\x70\xa9\x0c\xff\x8d\xba\x43\x87\xab\xbf\xda\x21\x57\xe1\x16\xfc\xbd\x12\xf0\x86\x90\xe1\x05\xc1\x48\x2a\xdc\xa6\x35\x77\xa8\xc0\x04\x6c\x91\xec\x31\xc0\x64\x02\x6c\x34\x08\x08\xd5\xfc\xc6\xa8\x4c\x7b\x20\x01\xf9\xf4\x69\x40\x88\x01\xab\x32\xc3\xa0\x58\x03\x19\x6b\xc5\x25\xda\x01\x21\x6b\x30\xcf\xc5\x72\x02\xe8\xff\xff\x4e\x91\x2d\xfd\x3b\xc1\x6d\xbe\x14\x83\x00\x04\xff\x36\xd3\x31\x2d\xde\x32\x03\xee\x6d\x4b\x27\x53\xca\xc4\x5c\x56\xdd\xd6\x06\x21\x80\x5a\x78\x2b\x04\x16\x95\xa1\x09\xec\x55\xce\x2c\x2f\xb6\x30\xaa\x29\xe3\xc8\xf7\x41\xd9\x02\xd8\x61\x2a\x94\x36\xa0\xe8\xed\xf3\x02\xea\x51\xa1\xd0\x2a\xee\x50\xdc\x12\xa5\x5a\xdb\xb6\xb0\x01\x2d\x38\xa3\x16\xba\x22\x79\x46\x46\x5f\x89\xcc\x22\x98\x8f\x48\x6c\x93\x49\x09\xe6\xa4\x2c\xd6\xce\x32\x8b\x20\x71\xad\x44\x96\x9e\x17\xc0\x93\x62\xd5\x50\xc8\x04\xe5\xe9\xf1\x5a\x8b\x5c\x39\x39\x57\xcb\x44\x15\xd4\xee\xbd\x30\x0d\x75\xc7\x55\x81\x35\xb4\x4a\xc0\x89\xd9\xde\xb6\x45\x52\x6d\x97\x0a\x87\x87\x8c\x2a\x42\x56\x6c\xef\xb3\xea\xb5\x74\xb8\x16\xd0\x36\xf8\x80\xaa\xc3\x65\x44\xaa\xf8\x35\x83\x72\xc2\x71\xe7\x75\xac\x2f\x5c\xc6\x5c\x26\x6f\xd9\x6b\x2d\xaf\x5f\x6d\x25\xa0\xaf\x71\x29\x01\xf7\xb0\x70\xda\x4b\xff\xf4\x18\x33\x20\xa4\xd2\x7d\x8f\x6f\x9a\x36\x7b\xfe\x27\x30\xf4\xb5\xa5\x93\x7b\xbc\x0b\x65\xa8\x14\xd8\x8f\x89\xc3\xb9\xde\xae\x76\x86\x93\x0a\xfa\x3b\xf8\xbd\xc9\x26\x3f\x92\x46\x5a\x0d\xcc\x29\xd3\xca\xe0\xb6\xc3\x1b\x8c\xc8\xe8\xe2\xe2\xe2\xc2\xa3\x40\x6a\x12\xc0\x79\x6d\xd5\x82\x00\x86\xca\xe4\x38\xa9\xd6\xfb\x74\x9e\x61\xc4\x07\xba\x2b\x05\x34\x9c\xd9\x33\x7c\x35\xea\xf4\xd5\xe8\xad\x7d\x45\x08\x6e\x34\x44\x64\xa6\x62\x70\x5a\x5b\xce\x73\x3c\x6c\x77\x9d\x1f\x90\x22\x2c\x32\xf1\x00\x1f\x3a\xbb\x94\x8e\x2c\xe9\x60\x44\x46\x2d\x3f\xa5\xae\x67\x7c\xad\xe0\x3a\xe0\xba\xb3\x80\xdb\x3c\xa3\x66\x3d\xf8\x11\x52\x2d\x28\x42\x81\xaa\xe2\x34\x0f\x49\x4a\x85\xbe\x00\x6d\x51\x76\x02\xb1\xcc\x50\x17\x27\x77\x34\xe5\x12\x8c\x2d\x76\x8b\x9a\x85\x07\x6d\x3c\xcb\xca\xbd\x82\xdf\xe1\x79\xa9\xd4\x2a\x22\x3c\x91\xca\x80\xdf\x5a\xc6\xc6\x83\x59\x2c\xb8\xe4\xb8\xd9\xc1\x73\xdd\xfe\xb2\xb5\xea\x22\xf9\xaf\x8c\x1b\x88\xaf\x33\xc3\x65\xf2\xc0\x96\x10\x67\x82\xcb\x64\xea\x0f\x2e\x96\x27\x2f\xc0\x32\x87\xa9\x2a\x99\x9f\xf9\x50\xc4\xfe\x11\x4c\x6a\xeb\x8f\x83\x3c\x15\x26\x2f\xda\x80\xb5\x75\x4f\x97\x3b\x56\xb0\x89\xba\x0c\xec\xf0\x5f\xf9\x52\x1a\x0c\x75\xd9\x46\x66\x0a\xa7\xb2\xf5\x7c\x4d\x45\x06\x2d\x55\x9e\x05\x49\xf5\xa9\x6b\x79\x41\x85\x85\xf2\xc9\x2e\xd0\xe5\x11\x6e\xca\x4c\x53\x2a\xe3\xdd\x99\x01\x09\x33\x6b\x42\xa1\x18\x15\xe1\x33\x97\xe1\x36\xf0\xb1\xe1\xeb\x0a\xe8\x80\x04\xeb\xf1\x9f\xab\x7f\x0a\x95\x24\x5c\x26\xc1\x42\x99\x94\xe2\x18\xe1\x05\xab\x8f\x53\x15\xc3\xb8\xc3\xfa\x80\x04\xe5\x2c\x3d\xce\x24\x7f\x89\xc2\x30\x64\x96\x87\xf5\x64\x1b\x5a\xc5\x56\x55\x19\x03\x09\xb7\x68\x36\x93\x52\x16\x99\x8e\xc2\xf0\x62\xe8\xff\x45\xbb\x5e\x51\xec\x77\x21\xe5\xf1\xf8\x87\x1f\xff\xf1\xed\xcb\xe4\x69\x76\x77\x3d\x79\x9a\x5d\xde\x4e\x7e\xaa\xee\x61\xf4\x17\x2e\x60\x1c\x32\x30\x68\x43\x46\x87\xcc\xd4\x4c\x70\xeb\xd5\x1d\x28\x6c\x73\xcb\x0a\x36\xcd\x1d\x2b\xd8\x54\x77\xe4\x7e\x74\x35\x68\xfc\xc3\x8f\xf3\xdb\xc9\xed\xd3\xd5\xc3\xf4\xe9\xfa\x7e\xfa\xeb\xe4\xbe\x0d\xa9\x28\xff\x5f\xfd\xcc\x34\x8e\x76\x65\xdd\xbd\x40\xae\xab\x91\xcb\x6b\x5e\xdd\xbe\x41\x23\x7d\x7e\x31\x2a\xad\x67\xd0\x82\x83\x88\x0b\x3a\x53\x7d\x35\xfa\x5d\xfd\xa1\x17\x9a\x53\x5c\x46\xfe\x76\x0e\x9d\x77\x5d\xc9\x6a\xa1\x79\x9c\xdc\xdf\x4e\x67\x97\x8f\xd3\xbb\xd9\xd3\xd7\xbb\x9b\xa7\xf9\xe5\xe3\xdf\x9b\x98\x22\x12\x62\xaa\x43\x04\x93\x16\x1f\x78\xb8\x5c\x6a\x1d\xd5\xe5\xab\xf6\x51\xed\x2b\xd7\x3a\xe8\xe6\xee\x7a\xf2\xe5\xdb\x4d\x5b\xf6\xe5\xe7\x8b\xbf\xe5\x75\xe7\x6a\x36\xde\xb9\x99\xa7\x34\x81\x88\xf8\x03\x9b\xf7\x21\x62\x54\x52\xb3\xa9\xef\x9d\x67\x42\xcc\x95\xe0\x6c\x13\x91\xe9\x62\xa6\x70\x6e\xc0\x82\xdc\x25\x4a\xa5\x3b\x35\xae\xd5\xb6\x91\x97\x90\xb7\xb7\x76\xde\xe8\xeb\xd5\x93\x76\x24\x21\x7f\x59\x60\x99\xe1\xb8\xb9\x72\xf3\xda\x0b\xd6\xcb\x22\x8d\xef\xa4\xd8\xdc\x2b\xe5\x73\xd9\x6e\x2c\x42\x1a\x11\x34\xd9\x2e\x7a\x95\x50\xdc\x82\xb5\xce\x24\x1f\xeb\xde\x38\xe5\xa3\xe2\xad\x63\xa4\x35\x0b\x52\xb7\x52\xc8\xfb\x5b\xd1\x82\x5f\xde\x65\x7f\xc1\xf6\x49\x5a\xde\x92\xd3\x22\x4b\xb8\x0c\x5c\x69\x00\x0c\x62\x6e\xf6\xc8\x62\xaa\x5b\xb2\x98\xea\x8a\x44\x40\xa8\x49\x6a\xa8\x9b\xd5\xcd\xc7\x9c\xc6\xb1\xab\xf8\xe3\x63\x0a\x54\xb0\x00\x8a\x99\x81\x20\xa1\x08\x76\xfc\xa8\xb4\x12\x2a\xd9\x8c\x6b\x8e\x76\xfb\xac\x8b\x1d\x06\xb8\x77\x03\xf2\x14\x54\x86\xe3\x9f\xd3\xda\x72\x0c\x0b\x9a\x09\x0c\x16\xd6\x11\xae\x31\xbc\xe0\x5f\x6a\xcf\x8b\xa4\xd8\x82\xf6\xc5\x63\xd4\xcc\x6a\x37\xa4\x24\xcc\xb8\x11\xcb\xf2\x24\x28\xa6\xf5\xb0\x31\xf8\x44\xeb\xcf\xc3\x8b\xe1\xe7\xb3\xd2\xbc\x6b\xb4\x39\x29\xdf\x47\x6f\x9e\xef\x47\xa5\xee\x09\x09\xb8\x17\x8f\xc9\xe4\xa5\x9d\x29\xe9\xd0\x34\x30\xf8\x47\xdf\x2c\x98\x7c\xa4\xd9\x9e\x54\x9d\xf4\xfa\x58\xa1\x7b\xa1\x12\x8e\x42\x54\x19\x49\x40\x60\xb1\x00\x86\x8e\x54\x14\x24\x68\xa7\xd3\x93\x14\x57\xbb\xfd\x60\x3b\x5c\x65\xcf\x60\x24\x20\xf8\x89\x3b\xa5\x6e\x5c\x1d\x54\x3d\x54\x3d\x35\xd5\xb8\xb9\xe6\x26\x22\x32\x13\xa2\x59\xd9\xf6\xf8\x25\xe8\xbd\xf0\x16\x98\x81\x5a\xf0\xf2\x95\x86\xd5\x5b\xe1\xfc\xa9\xed\x80\xf4\xef\xff\x34\x00\x95\xb7\xbd\x7f\x16\xb9\xa6\x90\x2a\xf9\xb6\x93\x88\xf3\xf6\x81\x19\xe4\xc4\xa9\xa3\x38\xf1\x4c\x78\x1f\x3a\x4c\x54\xa0\xbf\xef\x18\xf1\xea\x5c\x38\x06\x77\x4d\x6f\xa9\xa4\x09\x98\x71\x8e\xf5\x77\x72\xe5\x9a\x73\x7a\x58\x72\xab\xf3\x1c\x45\x75\xb7\xa5\xa3\x41\xa0\x0b\xa9\xf9\xdd\xf5\xd3\x74\xfe\x93\xe7\xd1\xa3\x23\x78\x77\x47\x4d\x6a\x73\xf0\x77\xe1\xd7\x16\x29\x7a\xba\x32\x0e\xd7\xd4\x84\x82\x3f\x87\x47\xf0\xec\xd3\x58\xb9\xb3\x76\x0e\x86\x81\x44\x9a\xc0\x78\x54\x37\xf3\x7f\x9d\xb3\x57\x12\xe0\x1d\xa0\x20\xc5\xcc\x0e\xb5\x8a\x2b\xda\x5e\x9d\xf2\xbf\xe2\x18\xf2\x7f\x3d\x3d\x68\xc3\xd7\x5c\x40\x02\x71\x83\xbd\xd4\xf8\xcb\xc5\xdb\x0f\x12\xe5\xd5\x76\x94\x45\x00\x86\x39\xe3\xb0\x61\x9d\xc2\xd4\x39\x5b\x2e\x6f\x94\xa6\x89\x57\x1a\x91\x2f\x3c\xaf\xd4\x5c\x49\x2a\xda\x7e\x71\xfb\x7d\x91\xeb\x99\x2d\x5a\x40\xf2\x2f\xa3\xcf\xd5\xe9\xc4\x7b\xb4\x75\xcf\x4f\x9e\xc1\xf5\xcc\x4e\x31\xac\x5b\x32\x31\xac\x7b\xf4\xd8\x4d\x5b\x8b\xdd\xf4\x22\xeb\xa0\xc7\x07\x07\xb3\xd2\x79\x3d\x37\xf8\x0c\x17\xba\xc3\x7c\x17\x38\x6d\xc0\x2b\x22\x58\x76\xb8\x3c\x2f\x75\xad\x91\x34\xb3\x6d\x4f\xab\xe8\xec\xca\x9d\x03\x64\x7d\x57\x67\x6f\xf8\xdd\x35\xf0\xf0\xa0\xe7\xf3\x27\x2f\x25\x5b\xeb\x4d\xb4\x1e\x0d\x3f\x0f\x2f\xce\xaa\x4d\xcd\xb3\x3e\x7c\x50\x3b\x98\x89\xd5\xa0\xb7\xa4\x6b\x19\xb1\x3b\xa3\xfa\x29\xf1\x0e\x4c\xe1\xd8\x3c\x24\xfb\xa6\xa7\xa5\xb2\xb9\xe6\x6a\x6d\xed\xaf\x6c\xbd\x77\x24\xff\xca\xe5\xda\xdf\x0a\x65\x36\x77\xe6\xaa\xfc\xc5\x41\xaf\x17\xce\x01\xf2\x54\x32\xc0\xf0\x64\xfd\x7b\xfc\x78\x96\x3b\xfa\x0a\xfd\x71\x68\x3a\xcb\xfb\x69\x58\xea\xb5\xfe\x38\xb5\x8d\x0a\x1f\xec\xad\xe1\x47\x8e\xc3\x5e\xb0\x39\x0a\x1f\x61\xc4\x2b\xe4\xd3\x9e\x4a\xdb\xa3\xbc\xde\x89\x8e\xd3\x52\xef\x54\xbd\xc7\xd7\xdb\xd6\x91\x97\xa2\x68\x6b\xcd\x8f\x06\xea\xbf\x5b\x09\xd7\xa3\x67\x40\xba\xfd\x11\xc2\xc3\xf4\x3a\xa7\x5e\x6f\xf6\x49\x41\x25\x2e\xe5\xe4\x4a\x11\x29\x5b\xde\x17\x5f\x6c\x45\xc4\x7f\xbd\xe3\xbf\xfd\x8d\xa7\x72\xa1\xee\xa4\x2f\x8c\xdb\x92\x99\x57\x9d\xaf\x7c\x01\x6c\xc3\x04\xdc\xaa\xb8\xfc\x85\xcc\x7c\xfb\x2b\x2c\xff\xe7\x44\x2f\x21\x05\x43\xc5\xe0\xbf\x01\x00\x00\xff\xff\x99\xe3\x8f\xb5\x93\x2a\x00\x00") func deployKubernetes117DirectPmemCsiYamlBytes() ([]byte, error) { return bindataRead( @@ -100,12 +100,12 @@ func deployKubernetes117DirectPmemCsiYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "deploy/kubernetes-1.17/direct/pmem-csi.yaml", size: 10962, mode: os.FileMode(436), modTime: time.Unix(1608146530, 0)} + info := bindataFileInfo{name: "deploy/kubernetes-1.17/direct/pmem-csi.yaml", size: 10899, mode: os.FileMode(420), modTime: time.Unix(1608283266, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _deployKubernetes117LvmPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\xc1\x6e\xef\xe1\x0e\xa8\xac\x78\xdb\x03\x5a\x01\x7e\xc8\x26\xbe\xd4\xe8\xc6\x31\x92\xec\xbd\x06\x0c\x35\x96\x59\x53\x24\x4b\x8e\xbc\xf1\x15\xfd\xdf\x0b\x52\x92\xad\x2f\xcb\x1f\xcd\x07\x8a\xf3\x3e\xac\x23\x72\x38\xbf\xf9\xe0\xcc\xfc\x6c\xff\x91\xdc\x80\x04\x43\x11\x62\xf2\x9d\xe3\x92\x7c\x4a\xe9\x0a\xc8\x2a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x18\x50\xcd\x7f\x05\x63\xb9\x92\x11\x59\x8f\x06\x2b\x2e\xe3\x88\xcc\x68\x0a\x56\x53\x06\x83\x14\x90\xc6\x14\x69\x34\x20\x44\xd0\x67\x10\xd6\xbd\x23\x44\xa7\x90\x06\xcc\xf2\x21\x97\x08\x62\xc8\x54\x1a\xc6\xa0\x85\xda\xa4\x20\x31\x22\x62\x9d\x06\xda\xa8\x38\x63\xc8\x95\x1c\x10\x22\x69\x0a\xd1\x56\x6a\x10\x04\x41\xb7\xe6\x07\x30\x6b\xce\xe0\x92\x31\x95\x49\x7c\x23\xf5\x01\x53\x12\x8d\x12\x02\x4c\xb1\xe6\x8d\xed\xc1\x67\x9e\x29\x1b\xd2\x0c\x97\xca\xf0\xdf\xa8\x3b\x74\xb8\xfa\xab\x1d\x72\x15\x6e\x91\xdf\x2b\xf1\x56\xee\x0a\xe0\x05\xc1\x48\x2a\xdc\xa6\x35\x77\x90\xc0\x04\x6c\x91\xec\x41\x6f\x32\x01\x36\x1a\x04\x84\x6a\x7e\x63\x54\xa6\x3d\x8a\x80\x7c\xfa\x34\x20\xc4\x80\x55\x99\x61\x50\x3c\x03\x19\x6b\xc5\x25\xda\x01\x21\x6b\x30\xcf\xc5\xe3\x04\xd0\xff\xff\x9d\x22\x5b\xfa\x77\x82\xdb\xfc\x51\x0c\x02\x10\xfc\xdb\x4c\xc7\xb4\x78\xcb\x0c\xb8\xb7\x2d\x9d\x4c\x29\x13\x73\x59\xf5\x59\x1b\x84\x00\x6a\xe1\xad\x10\x58\x54\x86\x26\xb0\x57\x39\xb3\xbc\xd8\xc2\xa8\xa6\x8c\x23\xdf\x07\x65\x0b\x60\x87\xa9\x50\xda\x80\xa2\xb7\xeb\x05\xd4\xa3\x42\xa1\x55\xdc\xa1\xb8\x25\x4a\xb5\xb6\x6d\x61\x03\x5a\x70\x46\x2d\x74\x45\xf2\x8c\x74\xbe\x12\x99\x45\x30\xef\x9e\xd5\x26\x93\x12\xcc\x49\x29\xac\x9d\x59\x16\x41\xe2\x5a\x89\x2c\x3d\x2f\x7a\x27\x05\xaa\xa1\x90\x09\xca\xd3\xe3\xb5\x16\x89\x72\x72\xa2\x96\x59\x2a\xa8\xdd\x7b\x5b\x1a\xea\x8e\x2b\x01\x6b\x68\xdd\xff\x13\x53\xbd\x6d\x8b\xa4\xda\x2e\x15\x0e\x0f\x19\x55\x84\xac\xd8\xde\x67\xd5\x6b\xe9\x70\xc5\xbf\x6d\xf0\x01\x55\x87\x6b\x88\x54\xf1\x6b\x06\xe5\x84\xe3\xce\xeb\x55\x5f\xb8\x8c\xb9\x4c\xde\xac\xc5\x5a\x5e\xbf\xd7\x4a\x40\x5f\xcb\x52\x02\xee\x61\xe1\x54\x97\xce\xe9\xb1\x64\x40\x48\xa5\xe9\x1e\xdf\x2e\x6d\xf6\xfc\x4f\x60\xe8\x0b\x4b\xe7\xbc\xf1\x2e\x93\x42\xa5\xb4\x7e\x40\x10\xce\x75\x75\xb5\x21\x9c\x54\xca\xdf\xc1\xe9\xcd\xf1\xf1\xc3\xe6\x46\xab\x81\x39\x4d\x5a\x19\xdc\x76\x75\x83\x11\x19\x5d\x5c\x5c\x5c\x78\x08\x48\x4d\x02\x38\xaf\x3d\xb5\x20\x80\xa1\x32\x39\x48\xaa\xf5\x3e\x9d\xa7\x5a\xf0\x51\x8e\x4a\x01\x0d\x67\xf6\x0c\x2f\x8d\x3a\xbd\x34\x7a\x53\x2f\x11\x82\x1b\x0d\x11\x99\xa9\x18\x9c\xca\x96\xdb\xdc\xc8\xb5\xbb\xbf\x0f\x48\x11\x16\x99\x78\x80\x8f\x23\x28\xa5\x0b\xcb\xb1\x2f\x22\xa3\x96\x87\x52\xd7\x1e\xbe\x56\x40\x1d\x70\xda\xe9\xa8\x6d\x9e\x45\xb3\x1e\xf0\x08\xa9\x16\x14\xa1\x80\x54\x71\x97\xc7\x23\xa5\x42\x5f\x6e\xb6\x10\x3b\x51\x58\x66\xa8\x8b\x90\x3b\x9a\x72\x09\xc6\x16\xbb\x45\xcd\xbc\x83\x06\x9e\x6e\xe2\x5e\xa9\xef\xf0\xbc\x54\x6a\x15\x11\x9e\x48\x65\xc0\x6f\x2d\xa3\xe2\x91\x2c\x16\x5c\x72\xdc\xec\xb0\xb9\x96\x7e\xd9\x7a\xea\x62\xf8\xaf\x8c\x1b\x88\xaf\x33\xc3\x65\xf2\xc0\x96\x10\x67\x82\xcb\x64\xea\x0f\x2e\x1e\x4f\x5e\x80\x65\x0e\x53\x55\x32\x3f\xf3\xa1\x88\xfa\x23\x98\xd4\xd6\x97\x83\x3c\x09\x26\x2f\xda\x80\xb5\x75\x37\x97\x3b\x56\xb0\x89\xba\x0c\xec\x70\x5e\xf9\x52\x1a\x0c\x75\x79\x46\x66\x0a\xa7\xb2\xb5\xbe\xa6\x22\x83\x96\x2a\x3f\xea\x48\xf5\xa9\xeb\xf1\x82\x0a\x0b\xe5\xca\x2e\xca\xe5\x11\x8e\x47\xa6\x29\x95\xf1\xee\xcc\x80\x84\x99\x35\xa1\x50\x8c\x8a\xf0\x99\xcb\x70\x1b\xf5\xd8\xf0\x75\x05\x74\x40\x82\xf5\xf8\xcf\xd5\x3f\x53\x15\xc3\xb8\xc3\xbc\x80\x04\x25\x1d\x1e\x67\x92\xbf\x44\x61\x18\x32\xcb\xc3\x7a\x2a\x0d\xad\x62\xab\xaa\x8c\x81\x84\x5b\x34\x9b\x49\x29\x8b\x4c\x47\x61\x78\x31\xf4\xff\xa2\x5d\xe9\x2f\xf6\xbb\x98\xf1\x78\xfc\xc3\x8f\xff\xf8\xf6\x65\xf2\x34\xbb\xbb\x9e\x3c\xcd\x2e\x6f\x27\x3f\x55\xf7\x30\xfa\x0b\x17\x30\x0e\x19\x18\xb4\x21\xa3\x43\x66\xb0\xb6\x0e\x06\xab\x3b\x50\xd8\xe6\x96\x15\x6c\x9a\x3b\x56\xb0\xa9\xee\xc8\x1d\xe5\xca\xcb\xf8\x87\x1f\xe7\xb7\x93\xdb\xa7\xab\x87\xe9\xd3\xf5\xfd\xf4\xd7\xc9\x7d\x1b\x52\x51\xd3\xbf\x7a\xe6\x33\x8e\x76\xb5\xda\xbd\x40\xae\xab\xa1\xc9\xcb\x59\xdd\xbe\x41\x23\x3f\x7e\x31\x2a\xad\xa7\xc8\x82\x83\x88\x8b\xd1\xa4\xfa\x6a\x74\xb0\xfa\xa2\x17\x9a\x53\x5c\x46\xfe\xfa\x0d\x9d\x77\x5d\x41\x6a\xa1\x79\x9c\xdc\xdf\x4e\x67\x97\x8f\xd3\xbb\xd9\xd3\xd7\xbb\x9b\xa7\xf9\xe5\xe3\xdf\x9b\x98\x22\x12\x62\xaa\x43\x04\x93\x16\x9f\x59\x04\x42\x25\xad\xa3\xba\x7c\xd5\x3e\xaa\x7d\xa7\x5a\x07\xdd\xdc\x5d\x4f\xbe\x7c\xbb\x69\xcb\xbe\xfc\x7c\xf1\xb7\xbc\xb0\x5c\xcd\xc6\x3b\x37\xf3\x94\x26\x10\x11\x7f\x60\x33\xe1\x23\x46\x25\x35\x9b\xfa\xde\x79\x26\xc4\x5c\x09\xce\x36\x11\x99\x2e\x66\x0a\xe7\x06\x2c\xc8\x5d\xa2\x54\x1a\x4f\xe3\xde\x6c\xbb\x73\x09\x79\x7b\x2d\xe7\x8d\x66\x5d\x3d\x69\xd7\xf9\xf3\x97\x05\x96\x19\x8e\x9b\x2b\xc7\xba\x5e\xb0\x5e\xf7\x68\x7c\x27\xc5\xe6\x5e\x29\x9f\xcb\x76\x63\x11\xd2\x88\xa0\xc9\x76\xd1\xab\x84\xe2\x16\xac\x75\x26\xf9\x58\xf7\xc6\x29\x27\x7c\xb7\x6e\xba\xac\x59\x90\xba\x27\x85\xbc\xbf\x15\x2d\xf8\xe5\x5d\xf6\x17\x6c\x9f\xa4\xe5\x2d\x39\x2d\xb2\x84\xcb\xc0\x95\x06\xc0\x20\xe6\x66\x8f\x2c\xa6\xba\x25\x8b\xa9\xae\x48\x04\x84\x9a\xa4\x86\xba\x59\xbe\x7c\xcc\x69\x1c\xbb\x92\x3e\x3e\xa6\x40\x05\x0b\xa0\x98\x19\x08\x12\x8a\x60\xc7\x8f\x4a\x2b\xa1\x92\xcd\xb8\xe6\x68\xb7\xcf\xba\xd8\x61\x80\x7b\x37\x20\x4f\x41\x65\x38\xfe\x39\xad\x3d\x8e\x61\x41\x33\x81\xc1\xc2\xba\x41\x6a\x0c\x2f\xf8\x97\xda\x7a\x91\x14\x5b\xd0\xbe\x78\x8c\x9a\x59\xed\x08\x47\xc2\x8c\xe3\x4a\x96\x27\x41\xc1\xb9\xc3\x06\x89\x89\xd6\x9f\x87\x17\xc3\xcf\x67\xa5\x79\x17\x4d\x39\x29\xdf\x47\x6f\x9e\xef\x47\xa5\xee\x09\x09\xb8\x17\x8f\xc9\xe4\xa5\x9d\x29\xe9\xd0\x34\x30\xf8\xa5\x6f\x16\x4c\xce\x50\xb6\x27\x55\x59\x5b\xdf\xcc\xe7\x5e\xa8\x84\x9b\x11\xaa\x23\x47\x40\x60\xb1\x00\x86\x6e\x6a\x28\xa6\x9c\x9d\x4e\x3f\x85\xb8\xda\xed\x49\xea\x70\x95\x3d\x83\x91\x80\xe0\xa9\x73\x4a\x1d\xf5\x1c\x54\x3d\x54\x3d\x35\xd5\xb8\xb9\xe6\x26\x22\x32\x13\xa2\x59\xd9\xf6\xf8\x25\xe8\xbd\xf0\x16\x98\x81\x5a\xf0\xf2\x27\x0d\xab\xb7\xc2\xf9\xaa\xed\x80\xf4\xef\xff\x34\x00\x95\xb7\xbd\x9f\x63\x5c\x53\x48\x95\x7c\x43\x86\xe1\x5c\x7d\x80\x5b\x9c\xc8\x26\x8a\x13\xcf\xc1\xf6\xa1\x24\xa1\x82\xfb\x1d\xe9\xc1\xab\xcf\xb8\x31\xb8\xdb\x79\x4b\x25\x4d\xc0\x8c\xc5\x3a\x3d\x34\x00\xd7\xec\xee\x19\x7d\x5b\xed\xe4\xa8\xf9\x75\x5b\x0f\x1a\x53\x71\x21\x35\xbf\xbb\x7e\x9a\xce\x7f\xf2\xc3\xf1\xe8\x88\x61\xba\xa3\xd0\xb4\x07\xeb\x77\x19\x9a\xad\x63\xff\xae\x10\x8f\xc3\x35\x35\xa1\xe0\xcf\xe1\x11\xc3\xf3\x69\xa3\xb6\xb3\x76\x0e\x86\x81\x44\x9a\xc0\x78\x54\x37\xf3\xff\x7d\x10\xaf\x24\xc0\x3b\x40\x41\x8a\x99\x1d\x6a\x15\x57\xb4\xbd\xfa\x1c\xff\x8a\xdc\xe2\x77\x4d\x09\xb4\xe1\x6b\x2e\x20\x81\xb8\x31\x92\xd4\x86\x92\x8b\xb7\x67\x07\xe5\xd5\x76\x73\x88\x00\x0c\xf3\x31\xc2\x86\xf5\xb9\xa4\x3e\x88\xe5\xf2\x46\x69\x9a\x78\xa5\x11\xf9\xc2\x63\x6e\xc0\xf7\x0a\x2a\xda\x7e\x71\xfb\x7d\x91\xeb\x21\x0c\x2d\x20\xf9\x97\xc4\xe7\xea\x74\xe2\x3d\xda\xba\x49\x91\x1f\xcb\x7a\x08\x51\x0c\xeb\x96\x4c\x0c\xeb\x1e\x3d\x76\xd3\xd6\x62\x37\xbd\xc8\x3a\x66\xde\x83\x6c\xab\x74\x5e\xcf\x0d\x3e\xc3\x85\xee\x30\xdf\x05\x4e\x63\x6d\x45\x04\xcb\x0e\x97\xe7\xa5\xae\x35\x92\x66\xb6\xed\x69\x15\x9d\x5d\xb9\x93\x15\xd6\x77\x75\xf6\x86\xff\xb9\x06\x1e\x66\x6f\x3e\x7f\xf2\x52\xb2\xb5\xde\x44\xeb\xd1\xf0\xf3\xf0\xe2\xac\xda\xd4\x3c\xeb\xc3\xd9\xd7\xc1\x4c\xac\x06\xbd\x25\x5d\xcb\x88\xdd\x19\xd5\xcf\x76\x77\x60\x0a\xc7\xe6\x21\xd9\x47\x89\x96\xca\xe6\x9a\xab\xb5\xb5\xbf\xb2\xf5\xde\x91\xfc\xfb\x91\x6b\x7f\x2b\x94\xd9\xdc\x99\xab\xf2\xc7\x00\xbd\x5e\x38\x07\xc8\x53\x39\x01\x86\x27\xeb\xdf\xe3\xc7\xb3\xdc\xd1\x57\xe8\x8f\x43\xd3\x59\xde\x4f\xc3\x52\xaf\xf5\xc7\xa9\x6d\x54\xf8\x60\x6f\x0d\x3f\x92\xe3\x7a\xc1\x26\xbf\x3d\xc2\x88\x57\xc8\xa7\x3d\x95\xb6\x47\x79\xbd\x13\x1d\xa7\xa5\xde\xa9\x7a\x8f\xaf\xb7\xad\x23\x2f\x45\xd1\xd6\x9a\x7c\xbf\xfe\x93\x92\x70\x3d\x7a\x06\xa4\xdb\x9f\x08\x3c\x4c\xaf\xf3\xd1\xeb\x6d\xe8\x7f\x25\x28\x25\x29\xa5\x88\x94\x2d\xef\x8b\xef\xa2\x22\xe2\xbf\x91\xf1\x5f\xd2\xc6\x53\xb9\x50\x77\xd2\x57\xc5\x6d\xbd\xcc\x4b\xce\x57\xbe\x00\xb6\x61\x02\x6e\x55\x5c\xfe\x72\x65\xbe\xfd\x75\x94\xff\x73\xa2\x97\x90\x82\xa1\x62\xf0\xdf\x00\x00\x00\xff\xff\xfa\x42\x3c\xbb\x9c\x2a\x00\x00") +var _deployKubernetes117LvmPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\x5b\x6f\xe3\xb8\x15\x7e\xf7\xaf\x60\xa7\xfb\xb0\x0b\x54\x56\x3c\xed\x02\xad\x00\x3f\x64\x12\x6f\x6a\x74\x92\x18\x49\x66\x5f\x03\x86\x3a\x96\x59\x53\x24\x4b\x1e\x69\xe2\x2d\xfa\xdf\x0b\x52\x92\xad\x9b\x15\xdb\x9b\x0b\x8a\x7a\x1e\xc6\xa1\x78\x78\x3e\x9e\xeb\x77\x6c\xff\x91\x5c\x81\x04\x43\x11\x62\xf2\x9d\xe3\x8a\x7c\x4a\xe9\x1a\xc8\x3a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x1a\x51\xcd\x7f\x05\x63\xb9\x92\x11\xc9\x27\xa3\x35\x97\x71\x44\xee\xc1\xe4\x9c\xc1\x39\x63\x2a\x93\x38\x4a\x01\x69\x4c\x91\x46\x23\x42\x04\x7d\x02\x61\xdd\x3b\x42\x74\x0a\x69\xc0\x2c\x1f\x73\x89\x20\xc6\x4c\xa5\x61\x0c\x5a\xa8\x4d\x0a\x12\x23\x22\xf2\x34\xd0\x46\xc5\x19\x43\xae\xe4\x88\x10\x49\x53\x88\xb6\x52\x01\x53\x12\x8d\x12\x02\x4c\xf9\xcc\x6a\xca\x6a\x1b\x46\x41\x10\x34\xf0\x99\x27\xca\xc6\x34\xc3\x95\x32\xfc\x37\xea\x0e\x1d\xaf\xff\x6a\xc7\x5c\x85\x5b\xe4\x77\x4a\xc0\x5b\xe1\x85\x67\x04\x23\xa9\x70\x9b\x72\xee\x20\x81\x09\xd8\x32\xd9\x83\xde\x64\x02\x6c\x34\x0a\x08\xd5\xfc\xca\xa8\x4c\x7b\x14\x01\xf9\xf4\x69\x44\x88\x01\xab\x32\xc3\xa0\x5c\x03\x19\x6b\xc5\x25\xda\x11\x21\x39\x98\xa7\x72\x39\x01\xf4\xff\x7f\xa7\xc8\x56\xfe\x9d\xe0\xb6\x58\x8a\x41\x00\x82\x7f\x9b\xe9\x98\x96\x6f\x99\x01\xf7\xb6\xa3\x93\x29\x65\x62\x2e\xeb\x36\xeb\x82\x10\x40\x2d\xbc\x15\x02\x8b\xca\xd0\x04\xf6\x2a\x67\x96\x97\x5b\x18\xd5\x94\x71\xe4\xfb\xa0\x6c\x01\xec\x30\x95\x4a\x5b\x50\xf4\xf6\x79\x09\xf5\x20\x57\x68\x15\xf7\x28\xee\x88\x52\xad\x6d\x57\xd8\x80\x16\x9c\x51\x0b\x7d\x9e\x3c\x21\x9c\x2f\x44\x66\x11\xcc\xbb\x47\xb5\xc9\xa4\x04\x73\x54\x08\x6b\x77\x2d\x8b\x20\x31\x57\x22\x4b\x4f\xf3\xde\x51\x8e\x6a\x29\x64\x82\xf2\xf4\x70\xad\x65\xa0\x1c\x1d\xa8\x55\x94\x0a\x6a\xf7\x66\x4b\x4b\xdd\x61\x25\x20\x87\x4e\xfe\x1f\x19\xea\xdd\xbb\x48\xaa\xed\x4a\xe1\xf8\xa5\x4b\x95\x2e\x2b\xb7\x0f\xdd\xea\xb5\x74\xb8\xe2\xdf\xbd\xf0\x0b\xaa\x5e\xae\x21\x52\xc5\xaf\xe9\x94\x23\x8e\x3b\xad\x57\x7d\xe1\x32\xe6\x32\x79\xb3\x16\x6b\x79\x33\xaf\x95\x80\xa1\x96\xa5\x04\xdc\xc1\xd2\xa9\xae\x8c\x33\x70\x93\x11\x21\xb5\xa6\x7b\x78\xbb\xb4\xd9\xd3\x3f\x81\xa1\x2f\x2c\xbd\x7c\xe3\x5d\x98\x42\xad\xb4\x7e\x80\x13\x4e\x35\x75\xbd\x21\x1c\x55\xca\xdf\xc1\xe8\x6d\xfa\xf8\x61\xbc\xd1\x6a\x60\x4e\x93\x56\x06\xb7\x5d\xdd\x60\x44\x26\x67\x67\x67\x67\x1e\x02\x52\x93\x00\x2e\x1a\xab\x16\x04\x30\x54\xa6\x00\x49\xb5\xde\xa7\xf3\xd8\x1b\x7c\x94\xa1\x52\x40\xc3\x99\x3d\xc1\x4a\x93\x5e\x2b\x4d\xde\xd4\x4a\x84\xe0\x46\x43\x44\x6e\x54\x0c\x4e\x65\xc7\x6c\x8e\x72\xed\xf2\xf7\x1e\x29\xc2\x32\x13\xf7\xf0\x71\x03\x4a\x65\xc2\x8a\xf6\x45\x64\xd2\xb1\x50\xea\xda\xc3\xd7\x1a\xa8\x17\x8c\x76\x3c\x6a\x5b\x44\xd1\xcd\x00\x78\x84\x54\x0b\x8a\x50\x42\xaa\x99\xcb\xe3\x91\x52\xa1\x2f\x37\x5b\x88\xbd\x28\x2c\x33\xd4\x79\xc8\x1d\x4d\xb9\x04\x63\xcb\xdd\xa2\x71\xbd\x17\x2f\x78\xfc\x15\xf7\x4a\x7d\x87\xa7\x95\x52\xeb\x88\xf0\x44\x2a\x03\x7e\x6b\xe5\x15\x8f\x64\xb9\xe4\x92\xe3\x66\x87\xcd\xb5\xf4\xf3\xce\xaa\xf3\xe1\xbf\x32\x6e\x20\xbe\xcc\x0c\x97\xc9\x3d\x5b\x41\x9c\x09\x2e\x93\xb9\x3f\xb8\x5c\x9e\x3d\x03\xcb\x1c\xa6\xba\x64\x71\xe6\x7d\xe9\xf5\x07\x30\xa9\x6d\x3e\x0e\x8a\x20\x98\x3d\x6b\x03\xd6\x36\xcd\x5c\xed\x58\xc3\x26\xea\xbb\x60\x8f\xf1\xaa\x97\xd2\x6e\xd0\x57\xc6\xa5\x0c\xce\x65\xe7\x79\x4e\x45\x06\x1d\x55\x9e\xea\x48\xf5\xa9\x6f\x79\x49\x85\x85\xea\xc9\xce\xcb\xd5\x11\x6e\x8e\x4c\x53\x2a\xe3\xdd\x99\x01\x09\x33\x6b\x42\xa1\x18\x15\xe1\x13\x97\xe1\xd6\xeb\xb1\xe1\x79\x0d\x74\x40\x82\x7c\xfa\xe7\xfa\x9f\x42\x25\x09\x97\x49\xb0\x54\x26\xa5\x38\x45\x78\xc6\xfa\xe3\x54\xc5\x30\xed\xb9\x7d\x40\x82\x6a\x5a\x9e\x66\x92\x3f\x47\x61\x18\x32\xcb\xc3\x66\xa4\x8d\xad\x62\xeb\xba\x8c\x81\x84\x5b\x34\x9b\x59\x25\x8b\x4c\x47\x61\x78\x36\xf6\xff\xa2\x5d\x67\x28\xf7\x3b\x97\xf2\x78\xfa\xc3\x8f\xff\xf8\xf6\x65\xf6\x78\x73\x7b\x39\x7b\xbc\x39\xbf\x9e\xfd\x54\xdf\xc3\xe8\x2f\x5c\xc0\x34\x64\x60\xd0\x86\x8c\x8e\x99\x69\x5c\xc1\xad\xd7\x77\xa0\xb0\xed\x2d\x6b\xd8\xb4\x77\xac\x61\x53\xdf\x51\xd8\xd1\x55\x9f\xe9\x0f\x3f\x2e\xae\x67\xd7\x8f\x17\xf7\xf3\xc7\xcb\xbb\xf9\xaf\xb3\xbb\x2e\xa4\xb2\xe4\x7f\xf5\x83\xd1\x34\xda\x95\x72\xf7\x02\x99\xd7\x3d\x57\x54\xbb\xe6\xfd\x46\xad\xf0\xf9\xc5\xa8\xb4\x19\x41\x4b\x0e\x22\x2e\x99\x4b\xfd\xd5\x6a\x70\xcd\x87\x5e\x68\x41\x71\x15\xf9\xec\x1c\x3b\xeb\xba\x7a\xd5\x41\xf3\x30\xbb\xbb\x9e\xdf\x9c\x3f\xcc\x6f\x6f\x1e\xbf\xde\x5e\x3d\x2e\xce\x1f\xfe\xde\xc6\x14\x91\x10\x53\x1d\x22\x98\xb4\xfc\x48\xc3\xc5\x52\xe7\xa8\x3e\x5b\x75\x8f\xea\xa6\x5c\xe7\xa0\xab\xdb\xcb\xd9\x97\x6f\x57\x5d\xd9\xe7\x9f\xcf\xfe\x56\xd4\x9d\x8b\x9b\xe9\xce\xcc\x3c\xa5\x09\x44\xc4\x1f\xd8\xce\x87\x88\x51\x49\xcd\xa6\xb9\x77\x91\x09\xb1\x50\x82\xb3\x4d\x44\xe6\xcb\x1b\x85\x0b\x03\x16\xe4\x2e\x50\x6a\x7d\xa9\x95\x56\xdb\xe6\x5d\x41\xde\x66\xed\xa2\xd5\xcb\xeb\x27\xed\x88\x41\xf1\xb2\xc0\x32\xc3\x71\x73\xe1\x86\xb2\x67\x6c\x96\x45\x1a\xdf\x4a\xb1\xb9\x53\xca\xc7\xb2\xdd\x58\x84\x34\x22\x68\xb2\x9d\xf7\x6a\xae\xb8\x06\x6b\xdd\x95\xbc\xaf\x07\xfd\x54\xcc\x83\xd7\x8e\x7c\x36\x6e\x90\xba\x95\x52\xde\x67\x45\x07\x7e\x95\xcb\x3e\xc1\xf6\x49\x5a\xde\x91\xd3\x22\x4b\xb8\x0c\x5c\x69\x00\x0c\x62\x6e\xf6\xc8\x62\xaa\x3b\xb2\x98\xea\x9a\x44\x40\xa8\x49\x1a\xa8\xdb\xd5\xcd\xfb\x9c\xc6\xb1\xab\xf8\xd3\x43\x0a\x54\xb0\x04\x8a\x99\x81\x20\xa1\x08\x76\xfa\xa0\xb4\x12\x2a\xd9\x4c\x1b\x86\x76\xfb\xac\xf3\x1d\x06\xb8\x77\x03\xf2\x14\x54\x86\xd3\x9f\xd3\xc6\x72\x0c\x4b\x9a\x09\x0c\x96\xd6\xf1\xac\x29\x3c\xe3\x5f\x1a\xcf\xcb\xa0\xd8\x82\xf6\xc5\x63\xd2\x8e\x6a\x37\x8f\x24\xcc\xb8\x51\xca\xf2\x24\x28\x47\xf2\xb0\x35\xe3\x44\xf9\xe7\xf1\xd9\xf8\xf3\x49\x61\xde\x37\xc5\x1c\x15\xef\x93\x37\x8f\xf7\x83\x42\xf7\x88\x00\xdc\x8b\xc7\x64\xf2\xdc\xde\x28\xe9\xd0\xb4\x30\xf8\x47\xdf\x2c\x98\x62\x80\xd9\x9e\x54\x1f\xea\x86\x28\xa1\x7b\xa1\x12\x8e\x42\xd4\x19\x49\x40\x60\xb9\x04\x86\x8e\x54\x94\x24\x68\xa7\xd3\x93\x14\x57\xbb\xfd\x0c\x3b\x5e\x67\x4f\x60\x24\x20\xf8\xc9\x3a\xa5\x6e\x32\x1d\xd5\x2d\x54\x3f\x35\xd5\xb8\xb9\xe4\x26\x22\x32\x13\xa2\x5d\xd9\xf6\xd8\x25\x18\x4c\x78\x0b\xcc\x40\xc3\x79\xc5\x4a\xeb\xd6\x5b\xe1\xe2\xa9\xed\x81\xf4\xef\xff\xb4\x00\x55\xd9\x3e\x3c\x82\x5c\x52\x48\x95\x7c\xc3\x01\xc4\x99\xfa\x85\xd1\xe3\xc8\x61\xa3\x3c\xf1\x14\x6c\x1f\x3a\x43\xd4\x70\xbf\xe3\xf4\xf0\xea\x14\x38\x06\x97\x9d\xd7\x54\xd2\x04\xcc\x54\xe4\xe9\xef\xe4\xc7\x0d\xb3\x0c\x30\xe3\x4e\xb7\x39\x88\xde\x6e\xcb\x45\x8b\x34\x97\x52\x8b\xdb\xcb\xc7\xf9\xe2\x27\xcf\x9d\x27\x07\x70\xed\x9e\x3a\xd4\xe5\xdd\xef\xc2\xa9\x2d\x52\xf4\x14\x65\x1a\xe6\xd4\x84\x82\x3f\x85\x07\x70\xeb\xe3\x98\xb8\xbb\xed\x02\x0c\x03\x89\x34\x81\xe9\xa4\x79\xcd\xff\x75\x9e\x5e\x0b\x80\x77\x80\x82\x14\x33\x3b\xd6\x2a\xae\x69\x7b\x75\x9a\xff\x8a\xa3\xc7\xff\xf5\xc4\xa0\x0d\xcf\xb9\x80\x04\xe2\x16\x63\x69\x70\x96\xb3\xb7\x1f\x1e\xaa\xd4\x76\x34\x45\x00\x86\x05\xcb\xb0\x61\x93\xb6\x34\x79\x5a\x21\x6f\x94\xa6\x89\x57\x1a\x91\x2f\x3c\xe6\x06\x7c\x2b\xa1\xa2\x6b\x17\xb7\xdf\x17\xb9\x81\x79\xa2\x03\xa4\xf8\x8a\xf9\x54\x9d\x4e\x7c\x40\x5b\xff\xcc\xe4\x59\xdb\xc0\xbc\x14\x43\xde\x91\x89\x21\x1f\xd0\x63\x37\x5d\x2d\x76\x33\x88\xac\x87\x12\xbf\x38\x8c\x55\xc6\x1b\xc8\xe0\x13\x4c\xe8\x0e\xf3\x5d\xe0\xb8\xa1\xae\xf4\x60\xd5\xe1\x8a\xb8\xd4\x8d\x46\xd2\x8e\xb6\x3d\xad\xa2\xb7\x2b\xf7\x0e\x8d\xcd\x5d\xbd\xbd\xe1\x77\xd7\xc0\x97\x87\x3b\x1f\x3f\x45\x29\xd9\xde\xde\x44\xf9\x64\xfc\x79\x7c\x76\x52\x6d\x6a\x9f\xf5\xe1\xc3\xd9\x8b\x91\x58\x77\x7a\x47\xba\x11\x11\xbb\x33\xea\x9f\x0c\xef\xc0\x94\x86\x2d\x5c\xb2\x6f\x62\x5a\x29\x5b\x68\xae\xd7\xd6\xe1\xca\x36\x98\x23\xc5\xb7\x2b\x97\x3e\x2b\x94\xd9\xdc\x9a\x8b\xea\xa7\x04\x83\x56\x38\x05\xc8\x63\xc5\x00\xc3\xa3\xf5\xef\xb1\xe3\x49\xe6\x18\x2a\xf4\x87\xa1\xe9\x2d\xef\xc7\x61\x69\xd6\xfa\xc3\xd4\xb6\x2a\x7c\xb0\xb7\x86\x1f\x38\x02\x7b\xc1\xf6\xf8\x7b\xc0\x25\x5e\x21\x9e\xf6\x54\xda\x01\xe5\xcd\x4e\x74\x98\x96\x66\xa7\x1a\x3c\xbe\xd9\xb6\x0e\x4c\x8a\xb2\xad\xb5\x3f\x0e\x68\xfe\x20\x25\xcc\x27\x4f\x80\x74\xfb\x03\x83\xfb\xf9\x65\x41\xbd\xde\xe6\xd3\x81\x9a\x53\xaa\x99\x95\x22\x52\xb6\xba\x2b\xbf\xc9\x8a\x88\xff\x3e\xc7\x7f\xc5\x1b\xcf\xe5\x52\xdd\x4a\x5f\x15\xb7\xf5\xb2\x28\x39\x5f\xf9\x12\xd8\x86\x09\xb8\x56\x71\xf5\xbb\x97\xc5\xf6\xb7\x55\xfe\xcf\x99\x5e\x41\x0a\x86\x8a\xd1\x7f\x03\x00\x00\xff\xff\x3a\x78\x18\xc6\x60\x2a\x00\x00") func deployKubernetes117LvmPmemCsiYamlBytes() ([]byte, error) { return bindataRead( @@ -120,12 +120,12 @@ func deployKubernetes117LvmPmemCsiYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "deploy/kubernetes-1.17/lvm/pmem-csi.yaml", size: 10908, mode: os.FileMode(436), modTime: time.Unix(1608146533, 0)} + info := bindataFileInfo{name: "deploy/kubernetes-1.17/lvm/pmem-csi.yaml", size: 10848, mode: os.FileMode(420), modTime: time.Unix(1608283267, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _deployKubernetes118DirectPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\xc1\x6e\xef\xe1\x0e\xa8\xac\x78\xdb\x03\x5a\x01\x7e\xc8\x26\xbe\xd4\xe8\xc6\x31\x92\xec\xbd\x06\x0c\x35\x96\x59\x53\x24\x4b\x8e\xbc\xf1\x15\xfd\xdf\x0b\x52\x92\xad\x2f\xcb\x1f\xcd\x07\x8a\xf3\x3e\xac\x23\x72\x38\xbf\xf9\xe0\xcc\x6f\x6c\xff\x91\xdc\x80\x04\x43\x11\x62\xf2\x9d\xe3\x92\x7c\x4a\xe9\x0a\xc8\x2a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x18\x50\xcd\x7f\x05\x63\xb9\x92\x11\x59\x8f\x06\x2b\x2e\xe3\x88\xcc\x68\x0a\x56\x53\x06\x83\x14\x90\xc6\x14\x69\x34\x20\x44\xd0\x67\x10\xd6\xbd\x23\x44\xa7\x90\x06\xcc\xf2\x21\x97\x08\x62\xc8\x54\x1a\xc6\xa0\x85\xda\xa4\x20\x31\x22\x31\x37\xc0\x30\xd0\x46\xc5\x19\x43\xae\xe4\x80\x10\x49\x53\x88\xb6\x82\x83\x20\x08\xba\x95\x3f\x80\x59\x73\x06\x97\x8c\xa9\x4c\xe2\xdb\x21\x08\x98\x92\x68\x94\x10\x60\x8a\x35\x6f\x72\x0f\x44\xf3\x4c\xd9\x90\x66\xb8\x54\x86\xff\x46\xdd\xa1\xc3\xd5\x5f\xed\x90\xab\x70\x0b\xfe\x5e\x89\x37\x74\x5a\x00\x2f\x08\x46\x52\xe1\x36\xad\xb9\x43\x05\x26\x60\x8b\x64\x8f\x01\x26\x13\x60\xa3\x41\x40\xa8\xe6\x37\x46\x65\xda\x03\x09\xc8\xa7\x4f\x03\x42\x0c\x58\x95\x19\x06\xc5\x33\x90\xb1\x56\x5c\xa2\x1d\x10\xb2\x06\xf3\x5c\x3c\x4e\x00\xfd\xff\xdf\x29\xb2\xa5\x7f\x27\xb8\xcd\x1f\xc5\x20\x00\xc1\xbf\xcd\x74\x4c\x8b\xb7\xcc\x80\x7b\xdb\xd2\xc9\x94\x32\x31\x97\x55\xb7\xb5\x41\x08\xa0\x16\xde\x0a\x81\x45\x65\x68\x02\x7b\x95\x33\xcb\x8b\x2d\x8c\x6a\xca\x38\xf2\x7d\x50\xb6\x00\x76\x98\x0a\xa5\x0d\x28\x7a\xbb\x5e\x40\x3d\x2a\x14\x5a\xc5\x1d\x8a\x5b\xa2\x54\x6b\xdb\x16\x36\xa0\x05\x67\xd4\x42\x57\x24\xcf\xc8\xe8\x2b\x91\x59\x04\xf3\x11\x89\x6d\x32\x29\xc1\x9c\x94\xc5\xda\x59\x66\x11\x24\xae\x95\xc8\xd2\xf3\x02\x78\x52\xac\x1a\x0a\x99\xa0\x3c\x3d\x5e\x6b\x91\x2b\x27\xe7\x6a\x99\xa8\x82\xda\xbd\x17\xa6\xa1\xee\xb8\x2a\xb0\x86\x56\x09\x38\x31\xdb\xdb\xb6\x48\xaa\xed\x52\xe1\xf0\x90\x51\x45\xc8\x8a\xed\x7d\x56\xbd\x96\x0e\xd7\x02\xda\x06\x1f\x50\x75\xb8\x8c\x48\x15\xbf\x66\x50\x4e\x38\xee\xbc\x8e\xf5\x85\xcb\x98\xcb\xe4\x2d\x7b\xad\xe5\xf5\xab\xad\x04\xf4\x35\x2e\x25\xe0\x1e\x16\x4e\x7b\xe9\x9f\x1e\x63\x06\x84\x54\xba\xef\xf1\x4d\xd3\x66\xcf\xff\x04\x86\xbe\xb6\x74\x72\x8f\x77\xa1\x0c\x95\x02\xfb\x31\x71\x38\xd7\xdb\xd5\xce\x70\x52\x41\x7f\x07\xbf\x37\xd9\xe4\x47\xd2\x48\xab\x81\x39\x65\x5a\x19\xdc\x76\x78\x83\x11\x19\x5d\x5c\x5c\x5c\x78\x14\x48\x4d\x02\x38\xaf\x3d\xb5\x20\x80\xa1\x32\x39\x4e\xaa\xf5\x3e\x9d\x67\x18\xf1\x81\xee\x4a\x01\x0d\x67\xf6\x0c\x5f\x8d\x3a\x7d\x35\x7a\x6b\x5f\x11\x82\x1b\x0d\x11\x99\xa9\x18\x9c\xd6\x96\xf3\x1c\x0f\xdb\x5d\xe7\x07\xa4\x08\x8b\x4c\x3c\xc0\x87\xce\x2e\xa5\x23\x4b\x3a\x18\x91\x51\xcb\x4f\xa9\xeb\x19\x5f\x2b\xb8\x0e\xb8\xee\x2c\xe0\x36\xcf\xa8\x59\x0f\x7e\x84\x54\x0b\x8a\x50\xa0\xaa\x38\xcd\x43\x92\x52\xa1\x2f\x40\x5b\x94\x9d\x40\x2c\x33\xd4\xc5\xc9\x1d\x4d\xb9\x04\x63\x8b\xdd\xa2\x66\xe1\x41\x1b\xcf\xb2\x72\xaf\xe0\x77\x78\x5e\x2a\xb5\x8a\x08\x4f\xa4\x32\xe0\xb7\x96\xb1\xf1\x60\x16\x0b\x2e\x39\x6e\x76\xf0\x5c\xb7\xbf\x6c\x3d\x75\x91\xfc\x57\xc6\x0d\xc4\xd7\x99\xe1\x32\x79\x60\x4b\x88\x33\xc1\x65\x32\xf5\x07\x17\x8f\x27\x2f\xc0\x32\x87\xa9\x2a\x99\x9f\xf9\x50\xc4\xfe\x11\x4c\x6a\xeb\xcb\x41\x9e\x0a\x93\x17\x6d\xc0\xda\xba\xa7\xcb\x1d\x2b\xd8\x44\x5d\x06\x76\xf8\xaf\x7c\x29\x0d\x86\xba\x6c\x23\x33\x85\x53\xd9\x5a\x5f\x53\x91\x41\x4b\x95\x67\x41\x52\x7d\xea\x7a\xbc\xa0\xc2\x42\xb9\xb2\x0b\x74\x79\x84\x9b\x32\xd3\x94\xca\x78\x77\x66\x40\xc2\xcc\x9a\x50\x28\x46\x45\xf8\xcc\x65\xb8\x0d\x7c\x6c\xf8\xba\x02\x3a\x20\xc1\x7a\xfc\xe7\xea\x9f\xa9\x8a\x61\xdc\x61\x5e\x40\x82\x72\x58\x1e\x67\x92\xbf\x44\x61\x18\x32\xcb\xc3\x7a\x36\x0d\xad\x62\xab\xaa\x8c\x81\x84\x5b\x34\x9b\x49\x29\x8b\x4c\x47\x61\x78\x31\xf4\xff\xa2\x5d\x33\x28\xf6\xbb\x98\xf1\x78\xfc\xc3\x8f\xff\xf8\xf6\x65\xf2\x34\xbb\xbb\x9e\x3c\xcd\x2e\x6f\x27\x3f\x55\xf7\x30\xfa\x0b\x17\x30\x0e\x19\x18\xb4\x21\xa3\x43\x66\xb0\xb6\x0e\x06\xab\x3b\x50\xd8\xe6\x96\x15\x6c\x9a\x3b\x56\xb0\xa9\xee\xc8\x1d\xe5\x8a\xcc\xf8\x87\x1f\xe7\xb7\x93\xdb\xa7\xab\x87\xe9\xd3\xf5\xfd\xf4\xd7\xc9\x7d\x1b\x52\x51\xdf\xbf\xfa\xa1\x68\x1c\xed\xea\xb6\x7b\x81\x5c\x57\x43\x93\x17\xb5\xba\x7d\x83\x46\x7e\xfc\x62\x54\x5a\x4f\x91\x05\x07\x11\x17\x7c\xa5\xfa\x6a\x34\xb4\xfa\xa2\x17\x9a\x53\x5c\x46\xfe\xfa\x0d\x9d\x77\x5d\x4d\x6a\xa1\x79\x9c\xdc\xdf\x4e\x67\x97\x8f\xd3\xbb\xd9\xd3\xd7\xbb\x9b\xa7\xf9\xe5\xe3\xdf\x9b\x98\x22\x12\x62\xaa\x43\x04\x93\x16\x9f\x68\x04\x42\x25\xad\xa3\xba\x7c\xd5\x3e\xaa\x7d\xa7\x5a\x07\xdd\xdc\x5d\x4f\xbe\x7c\xbb\x69\xcb\xbe\xfc\x7c\xf1\xb7\xbc\xb0\x5c\xcd\xc6\x3b\x37\xf3\x94\x26\x10\x11\x7f\x60\x33\xe1\x23\x46\x25\x35\x9b\xfa\xde\x79\x26\xc4\x5c\x09\xce\x36\x11\x99\x2e\x66\x0a\xe7\x06\x2c\xc8\x5d\xa2\x54\xda\x4f\xe3\xde\x6c\x3b\x75\x09\x79\x7b\x2d\xe7\x8d\xc6\x5d\x3d\x69\xc7\x02\xf2\x97\x05\x96\x19\x8e\x9b\x2b\x37\x90\xbd\x60\xbd\xee\xd1\xf8\x4e\x8a\xcd\xbd\x52\x3e\x97\xed\xc6\x22\xa4\x11\x41\x93\xed\xa2\x57\x09\xc5\x2d\x58\xeb\x4c\xf2\xb1\xee\x8d\x53\x3e\x0b\xde\x3a\xca\x59\xb3\x20\x75\x4f\x0a\x79\x7f\x2b\x5a\xf0\xcb\xbb\xec\x2f\xd8\x3e\x49\xcb\x5b\x72\x5a\x64\x09\x97\x81\x2b\x0d\x80\x41\xcc\xcd\x1e\x59\x4c\x75\x4b\x16\x53\x5d\x91\x08\x08\x35\x49\x0d\x75\xb3\x7c\xf9\x98\xd3\x38\x76\x25\x7d\x7c\x4c\x81\x0a\x16\x40\x31\x33\x10\x24\x14\xc1\x8e\x1f\x95\x56\x42\x25\x9b\x71\xcd\xd1\x6e\x9f\x75\xb1\xc3\x00\xf7\x6e\x40\x9e\x82\xca\x70\xfc\x73\x5a\x7b\x1c\xc3\x82\x66\x02\x83\x85\x75\x8c\x6a\x0c\x2f\xf8\x97\xda\x7a\x91\x14\x5b\xd0\xbe\x78\x8c\x9a\x59\xed\xa6\x90\x84\x19\x37\x43\x59\x9e\x04\xc5\x38\x1e\x36\x26\x9b\x68\xfd\x79\x78\x31\xfc\x7c\x56\x9a\x77\xcd\x2e\x27\xe5\xfb\xe8\xcd\xf3\xfd\xa8\xd4\x3d\x21\x01\xf7\xe2\x31\x99\xbc\xb4\x33\x25\x1d\x9a\x06\x06\xbf\xf4\xcd\x82\xc9\x67\x96\xed\x49\xd5\x51\xae\x8f\xf6\xb9\x17\x2a\xe1\x38\x42\x95\x72\x04\x04\x16\x0b\x60\xe8\x58\x43\xc1\x72\x76\x3a\x3d\x0b\x71\xb5\xdb\x4f\xae\xc3\x55\xf6\x0c\x46\x02\x82\x1f\xa9\x53\xea\xe6\xd1\x41\xd5\x43\xd5\x53\x53\x8d\x9b\x6b\x6e\x22\x22\x33\x21\x9a\x95\x6d\x8f\x5f\x82\xde\x0b\x6f\x81\x19\xa8\x05\x2f\x7f\xd2\xb0\x7a\x2b\x9c\xaf\xda\x0e\x48\xff\xfe\x4f\x03\x50\x79\xdb\xfb\x87\x8d\x6b\x0a\xa9\x92\x6f\x3b\x6a\x38\x6f\x1f\x18\x32\x4e\x1c\x2b\x8a\x13\xcf\x84\xf7\xa1\xd3\x42\x05\xfa\xfb\xce\x09\xaf\x4e\x76\x63\x70\xd7\xf4\x96\x4a\x9a\x80\x19\xe7\x58\x0f\x91\xe1\x9a\xf5\x3d\x34\xb8\xd5\x5a\x8e\xe2\xb2\xdb\xda\xd0\x60\xc8\x85\xd4\xfc\xee\xfa\x69\x3a\xff\xc9\x13\xe5\xd1\x11\xc4\xba\xa3\xe8\xb4\x49\xf6\xbb\x10\x68\x8b\x14\x3d\x1f\x19\x87\x6b\x6a\x42\xc1\x9f\xc3\x23\x88\xf4\x69\xb4\xdb\x59\x3b\x07\xc3\x40\x22\x4d\x60\x3c\xaa\x9b\xf9\xff\x4e\xca\x2b\x09\xf0\x0e\x50\x90\x62\x66\x87\x5a\xc5\x15\x6d\xaf\xce\xe9\x5f\x71\xce\xf8\x5d\x8f\x07\xda\xf0\x35\x17\x90\x40\xdc\xa0\x27\x35\x82\x72\xf1\xf6\x93\x42\x79\xb5\x1d\x27\x11\x80\x61\x4e\x29\x6c\x58\xe7\x28\x75\x52\x96\xcb\x1b\xa5\x69\xe2\x95\x46\xe4\x0b\xcf\x4b\x31\x57\x92\x8a\xb6\x5f\xdc\x7e\x5f\xe4\x7a\x86\x87\x16\x90\xfc\xeb\xe4\x73\x75\x3a\xf1\x1e\x6d\xdd\x03\x92\xa7\x68\x3d\xc3\x51\x0c\xeb\x96\x4c\x0c\xeb\x1e\x3d\x76\xd3\xd6\x62\x37\xbd\xc8\x3a\xf8\xef\xc1\xc9\xab\x74\x5e\xcf\x0d\x3e\xc3\x85\xee\x30\xdf\x05\x4e\x9b\xe0\x8a\x08\x96\x1d\x2e\xcf\x4b\x5d\x6b\x24\xcd\x6c\xdb\xd3\x2a\x3a\xbb\x72\xe7\x84\x58\xdf\xd5\xd9\x1b\xfe\xe7\x1a\x78\x78\x92\xf3\xf9\x93\x97\x92\xad\xf5\x26\x5a\x8f\x86\x9f\x87\x17\x67\xd5\xa6\xe6\x59\x1f\x3e\x89\x1d\xcc\xc4\x6a\xd0\x5b\xd2\xb5\x8c\xd8\x9d\x51\xfd\x9c\x77\x07\xa6\x70\x6c\x1e\x92\x7d\xe3\xd1\x52\xd9\x5c\x73\xb5\xb6\xf6\x57\xb6\xde\x3b\x92\x7f\x69\x72\xed\x6f\x85\x32\x9b\x3b\x73\x55\xfe\x66\xa0\xd7\x0b\xe7\x00\x79\x2a\x19\x60\x78\xb2\xfe\x3d\x7e\x3c\xcb\x1d\x7d\x85\xfe\x38\x34\x9d\xe5\xfd\x34\x2c\xf5\x5a\x7f\x9c\xda\x46\x85\x0f\xf6\xd6\xf0\x23\xe7\x5d\x2f\xd8\x9c\x75\x8f\x30\xe2\x15\xf2\x69\x4f\xa5\xed\x51\x5e\xef\x44\xc7\x69\xa9\x77\xaa\xde\xe3\xeb\x6d\xeb\xc8\x4b\x51\xb4\xb5\xe6\xec\x5f\xff\xe5\x49\xb8\x1e\x3d\x03\xd2\xed\xcf\x08\x1e\xa6\xd7\x39\xf5\x7a\xb3\x8f\x02\x2a\x71\x29\x47\x53\x8a\x48\xd9\xf2\xbe\xf8\x6a\x2a\x22\xfe\x0b\x1a\xff\xfd\x6d\x3c\x95\x0b\x75\x27\x7d\x61\xdc\x96\xcc\xbc\xea\x7c\xe5\x0b\x60\x1b\x26\xe0\x56\xc5\xe5\x6f\x5c\xe6\xdb\xdf\x51\xf9\x3f\x27\x7a\x09\x29\x18\x2a\x06\xff\x0d\x00\x00\xff\xff\xc5\x8a\x47\x12\xd2\x2a\x00\x00") +var _deployKubernetes118DirectPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\xc1\x6e\xef\xe1\x0e\xa8\xac\x78\xdb\x03\x5a\x01\x7e\xc8\x26\xbe\xd4\xe8\xc6\x31\x92\xec\xbd\x06\x0c\x35\x96\x59\x53\x24\x4b\x8e\xbc\xf1\x15\xfd\xdf\x0b\x52\x92\xad\x2f\xcb\x1f\x97\x0f\x14\xf5\x3e\xac\x43\x71\x38\xbf\xf9\xe0\xcc\x6f\x6c\xff\x91\xdc\x80\x04\x43\x11\x62\xf2\x9d\xe3\x92\x7c\x4a\xe9\x0a\xc8\x2a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x18\x50\xcd\x7f\x05\x63\xb9\x92\x11\x59\x8f\x06\x2b\x2e\xe3\x88\x3c\x80\x59\x73\x06\x97\x8c\xa9\x4c\xe2\x20\x05\xa4\x31\x45\x1a\x0d\x08\x11\xf4\x19\x84\x75\xef\x08\xd1\x29\xa4\x01\xb3\x7c\xc8\x25\x82\x18\x32\x95\x86\x31\x68\xa1\x36\x29\x48\x8c\x48\xcc\x0d\x30\x0c\xb4\x51\x71\xc6\x90\x2b\x39\x20\x44\xd2\x14\xa2\xad\x60\xc0\x94\x44\xa3\x84\x00\x53\x3c\xb3\x9a\xb2\xca\x86\x41\x10\x04\x35\x88\xe6\x99\xb2\x21\xcd\x70\xa9\x0c\xff\x8d\xba\x43\x87\xab\xbf\xda\x21\x57\xe1\x16\xfc\xbd\x12\xf0\x86\x90\xe1\x05\xc1\x48\x2a\xdc\xa6\x35\x77\xa8\xc0\x04\x6c\x91\xec\x31\xc0\x64\x02\x6c\x34\x08\x08\xd5\xfc\xc6\xa8\x4c\x7b\x20\x01\xf9\xf4\x69\x40\x88\x01\xab\x32\xc3\xa0\x58\x03\x19\x6b\xc5\x25\xda\x01\x21\x6b\x30\xcf\xc5\x72\x02\xe8\xff\xff\x4e\x91\x2d\xfd\x3b\xc1\x6d\xbe\x14\x83\x00\x04\xff\x36\xd3\x31\x2d\xde\x32\x03\xee\x6d\x4b\x27\x53\xca\xc4\x5c\x56\xdd\xd6\x06\x21\x80\x5a\x78\x2b\x04\x16\x95\xa1\x09\xec\x55\xce\x2c\x2f\xb6\x30\xaa\x29\xe3\xc8\xf7\x41\xd9\x02\xd8\x61\x2a\x94\x36\xa0\xe8\xed\xf3\x02\xea\x51\xa1\xd0\x2a\xee\x50\xdc\x12\xa5\x5a\xdb\xb6\xb0\x01\x2d\x38\xa3\x16\xba\x22\x79\x46\x46\x5f\x89\xcc\x22\x98\x8f\x48\x6c\x93\x49\x09\xe6\xa4\x2c\xd6\xce\x32\x8b\x20\x71\xad\x44\x96\x9e\x17\xc0\x93\x62\xd5\x50\xc8\x04\xe5\xe9\xf1\x5a\x8b\x5c\x39\x39\x57\xcb\x44\x15\xd4\xee\xbd\x30\x0d\x75\xc7\x55\x81\x35\xb4\x4a\xc0\x89\xd9\xde\xb6\x45\x52\x6d\x97\x0a\x87\x87\x8c\x2a\x42\x56\x6c\xef\xb3\xea\xb5\x74\xb8\x16\xd0\x36\xf8\x80\xaa\xc3\x65\x44\xaa\xf8\x35\x83\x72\xc2\x71\xe7\x75\xac\x2f\x5c\xc6\x5c\x26\x6f\xd9\x6b\x2d\xaf\x5f\x6d\x25\xa0\xaf\x71\x29\x01\xf7\xb0\x70\xda\x4b\xff\xf4\x18\x33\x20\xa4\xd2\x7d\x8f\x6f\x9a\x36\x7b\xfe\x27\x30\xf4\xb5\xa5\x93\x7b\xbc\x0b\x65\xa8\x14\xd8\x8f\x89\xc3\xb9\xde\xae\x76\x86\x93\x0a\xfa\x3b\xf8\xbd\xc9\x26\x3f\x92\x46\x5a\x0d\xcc\x29\xd3\xca\xe0\xb6\xc3\x1b\x8c\xc8\xe8\xe2\xe2\xe2\xc2\xa3\x40\x6a\x12\xc0\x79\x6d\xd5\x82\x00\x86\xca\xe4\x38\xa9\xd6\xfb\x74\x9e\x61\xc4\x07\xba\x2b\x05\x34\x9c\xd9\x33\x7c\x35\xea\xf4\xd5\xe8\xad\x7d\x45\x08\x6e\x34\x44\x64\xa6\x62\x70\x5a\x5b\xce\x73\x3c\x6c\x77\x9d\x1f\x90\x22\x2c\x32\xf1\x00\x1f\x3a\xbb\x94\x8e\x2c\xe9\x60\x44\x46\x2d\x3f\xa5\xae\x67\x7c\xad\xe0\x3a\xe0\xba\xb3\x80\xdb\x3c\xa3\x66\x3d\xf8\x11\x52\x2d\x28\x42\x81\xaa\xe2\x34\x0f\x49\x4a\x85\xbe\x00\x6d\x51\x76\x02\xb1\xcc\x50\x17\x27\x77\x34\xe5\x12\x8c\x2d\x76\x8b\x9a\x85\x07\x6d\x3c\xcb\xca\xbd\x82\xdf\xe1\x79\xa9\xd4\x2a\x22\x3c\x91\xca\x80\xdf\x5a\xc6\xc6\x83\x59\x2c\xb8\xe4\xb8\xd9\xc1\x73\xdd\xfe\xb2\xb5\xea\x22\xf9\xaf\x8c\x1b\x88\xaf\x33\xc3\x65\xf2\xc0\x96\x10\x67\x82\xcb\x64\xea\x0f\x2e\x96\x27\x2f\xc0\x32\x87\xa9\x2a\x99\x9f\xf9\x50\xc4\xfe\x11\x4c\x6a\xeb\x8f\x83\x3c\x15\x26\x2f\xda\x80\xb5\x75\x4f\x97\x3b\x56\xb0\x89\xba\x0c\xec\xf0\x5f\xf9\x52\x1a\x0c\x75\xd9\x46\x66\x0a\xa7\xb2\xf5\x7c\x4d\x45\x06\x2d\x55\x9e\x05\x49\xf5\xa9\x6b\x79\x41\x85\x85\xf2\xc9\x2e\xd0\xe5\x11\x6e\xca\x4c\x53\x2a\xe3\xdd\x99\x01\x09\x33\x6b\x42\xa1\x18\x15\xe1\x33\x97\xe1\x36\xf0\xb1\xe1\xeb\x0a\xe8\x80\x04\xeb\xf1\x9f\xab\x7f\x0a\x95\x24\x5c\x26\xc1\x42\x99\x94\xe2\x18\xe1\x05\xab\x8f\x53\x15\xc3\xb8\xc3\xfa\x80\x04\xe5\x2c\x3d\xce\x24\x7f\x89\xc2\x30\x64\x96\x87\xf5\x64\x1b\x5a\xc5\x56\x55\x19\x03\x09\xb7\x68\x36\x93\x52\x16\x99\x8e\xc2\xf0\x62\xe8\xff\x45\xbb\x5e\x51\xec\x77\x21\xe5\xf1\xf8\x87\x1f\xff\xf1\xed\xcb\xe4\x69\x76\x77\x3d\x79\x9a\x5d\xde\x4e\x7e\xaa\xee\x61\xf4\x17\x2e\x60\x1c\x32\x30\x68\x43\x46\x87\xcc\xd4\x4c\x70\xeb\xd5\x1d\x28\x6c\x73\xcb\x0a\x36\xcd\x1d\x2b\xd8\x54\x77\xe4\x7e\x74\x35\x68\xfc\xc3\x8f\xf3\xdb\xc9\xed\xd3\xd5\xc3\xf4\xe9\xfa\x7e\xfa\xeb\xe4\xbe\x0d\xa9\x28\xff\x5f\xfd\xcc\x34\x8e\x76\x65\xdd\xbd\x40\xae\xab\x91\xcb\x6b\x5e\xdd\xbe\x41\x23\x7d\x7e\x31\x2a\xad\x67\xd0\x82\x83\x88\x0b\x3a\x53\x7d\x35\xfa\x5d\xfd\xa1\x17\x9a\x53\x5c\x46\xfe\x76\x0e\x9d\x77\x5d\xc9\x6a\xa1\x79\x9c\xdc\xdf\x4e\x67\x97\x8f\xd3\xbb\xd9\xd3\xd7\xbb\x9b\xa7\xf9\xe5\xe3\xdf\x9b\x98\x22\x12\x62\xaa\x43\x04\x93\x16\x1f\x78\xb8\x5c\x6a\x1d\xd5\xe5\xab\xf6\x51\xed\x2b\xd7\x3a\xe8\xe6\xee\x7a\xf2\xe5\xdb\x4d\x5b\xf6\xe5\xe7\x8b\xbf\xe5\x75\xe7\x6a\x36\xde\xb9\x99\xa7\x34\x81\x88\xf8\x03\x9b\xf7\x21\x62\x54\x52\xb3\xa9\xef\x9d\x67\x42\xcc\x95\xe0\x6c\x13\x91\xe9\x62\xa6\x70\x6e\xc0\x82\xdc\x25\x4a\xa5\x3b\x35\xae\xd5\xb6\x91\x97\x90\xb7\xb7\x76\xde\xe8\xeb\xd5\x93\x76\x24\x21\x7f\x59\x60\x99\xe1\xb8\xb9\x72\xf3\xda\x0b\xd6\xcb\x22\x8d\xef\xa4\xd8\xdc\x2b\xe5\x73\xd9\x6e\x2c\x42\x1a\x11\x34\xd9\x2e\x7a\x95\x50\xdc\x82\xb5\xce\x24\x1f\xeb\xde\x38\xe5\xa3\xe2\xad\x63\xa4\x35\x0b\x52\xb7\x52\xc8\xfb\x5b\xd1\x82\x5f\xde\x65\x7f\xc1\xf6\x49\x5a\xde\x92\xd3\x22\x4b\xb8\x0c\x5c\x69\x00\x0c\x62\x6e\xf6\xc8\x62\xaa\x5b\xb2\x98\xea\x8a\x44\x40\xa8\x49\x6a\xa8\x9b\xd5\xcd\xc7\x9c\xc6\xb1\xab\xf8\xe3\x63\x0a\x54\xb0\x00\x8a\x99\x81\x20\xa1\x08\x76\xfc\xa8\xb4\x12\x2a\xd9\x8c\x6b\x8e\x76\xfb\xac\x8b\x1d\x06\xb8\x77\x03\xf2\x14\x54\x86\xe3\x9f\xd3\xda\x72\x0c\x0b\x9a\x09\x0c\x16\xd6\x11\xae\x31\xbc\xe0\x5f\x6a\xcf\x8b\xa4\xd8\x82\xf6\xc5\x63\xd4\xcc\x6a\x37\xa4\x24\xcc\xb8\x11\xcb\xf2\x24\x28\xa6\xf5\xb0\x31\xf8\x44\xeb\xcf\xc3\x8b\xe1\xe7\xb3\xd2\xbc\x6b\xb4\x39\x29\xdf\x47\x6f\x9e\xef\x47\xa5\xee\x09\x09\xb8\x17\x8f\xc9\xe4\xa5\x9d\x29\xe9\xd0\x34\x30\xf8\x47\xdf\x2c\x98\x7c\xa4\xd9\x9e\x54\x9d\xf4\xfa\x58\xa1\x7b\xa1\x12\x8e\x42\x54\x19\x49\x40\x60\xb1\x00\x86\x8e\x54\x14\x24\x68\xa7\xd3\x93\x14\x57\xbb\xfd\x60\x3b\x5c\x65\xcf\x60\x24\x20\xf8\x89\x3b\xa5\x6e\x5c\x1d\x54\x3d\x54\x3d\x35\xd5\xb8\xb9\xe6\x26\x22\x32\x13\xa2\x59\xd9\xf6\xf8\x25\xe8\xbd\xf0\x16\x98\x81\x5a\xf0\xf2\x95\x86\xd5\x5b\xe1\xfc\xa9\xed\x80\xf4\xef\xff\x34\x00\x95\xb7\xbd\x7f\x16\xb9\xa6\x90\x2a\xf9\xb6\x93\x88\xf3\xf6\x81\x19\xe4\xc4\xa9\xa3\x38\xf1\x4c\x78\x1f\x3a\x4c\x54\xa0\xbf\xef\x18\xf1\xea\x5c\x38\x06\x77\x4d\x6f\xa9\xa4\x09\x98\x71\x8e\xf5\x77\x72\xe5\x9a\x73\x7a\x58\x72\xab\xf3\x1c\x45\x75\xb7\xa5\xa3\x41\xa0\x0b\xa9\xf9\xdd\xf5\xd3\x74\xfe\x93\xe7\xd1\xa3\x23\x78\x77\x47\x4d\x6a\x73\xf0\x77\xe1\xd7\x16\x29\x7a\xba\x32\x0e\xd7\xd4\x84\x82\x3f\x87\x47\xf0\xec\xd3\x58\xb9\xb3\x76\x0e\x86\x81\x44\x9a\xc0\x78\x54\x37\xf3\x7f\x9d\xb3\x57\x12\xe0\x1d\xa0\x20\xc5\xcc\x0e\xb5\x8a\x2b\xda\x5e\x9d\xf2\xbf\xe2\x18\xf2\x7f\x3d\x3d\x68\xc3\xd7\x5c\x40\x02\x71\x83\xbd\xd4\xf8\xcb\xc5\xdb\x0f\x12\xe5\xd5\x76\x94\x45\x00\x86\x39\xe3\xb0\x61\x9d\xc2\xd4\x39\x5b\x2e\x6f\x94\xa6\x89\x57\x1a\x91\x2f\x3c\xaf\xd4\x5c\x49\x2a\xda\x7e\x71\xfb\x7d\x91\xeb\x99\x2d\x5a\x40\xf2\x2f\xa3\xcf\xd5\xe9\xc4\x7b\xb4\x75\xcf\x4f\x9e\xc1\xf5\xcc\x4e\x31\xac\x5b\x32\x31\xac\x7b\xf4\xd8\x4d\x5b\x8b\xdd\xf4\x22\xeb\xa0\xc7\x07\x07\xb3\xd2\x79\x3d\x37\xf8\x0c\x17\xba\xc3\x7c\x17\x38\x6d\xc0\x2b\x22\x58\x76\xb8\x3c\x2f\x75\xad\x91\x34\xb3\x6d\x4f\xab\xe8\xec\xca\x9d\x03\x64\x7d\x57\x67\x6f\xf8\xdd\x35\xf0\xf0\xa0\xe7\xf3\x27\x2f\x25\x5b\xeb\x4d\xb4\x1e\x0d\x3f\x0f\x2f\xce\xaa\x4d\xcd\xb3\x3e\x7c\x50\x3b\x98\x89\xd5\xa0\xb7\xa4\x6b\x19\xb1\x3b\xa3\xfa\x29\xf1\x0e\x4c\xe1\xd8\x3c\x24\xfb\xa6\xa7\xa5\xb2\xb9\xe6\x6a\x6d\xed\xaf\x6c\xbd\x77\x24\xff\xca\xe5\xda\xdf\x0a\x65\x36\x77\xe6\xaa\xfc\xc5\x41\xaf\x17\xce\x01\xf2\x54\x32\xc0\xf0\x64\xfd\x7b\xfc\x78\x96\x3b\xfa\x0a\xfd\x71\x68\x3a\xcb\xfb\x69\x58\xea\xb5\xfe\x38\xb5\x8d\x0a\x1f\xec\xad\xe1\x47\x8e\xc3\x5e\xb0\x39\x0a\x1f\x61\xc4\x2b\xe4\xd3\x9e\x4a\xdb\xa3\xbc\xde\x89\x8e\xd3\x52\xef\x54\xbd\xc7\xd7\xdb\xd6\x91\x97\xa2\x68\x6b\xcd\x8f\x06\xea\xbf\x5b\x09\xd7\xa3\x67\x40\xba\xfd\x11\xc2\xc3\xf4\x3a\xa7\x5e\x6f\xf6\x49\x41\x25\x2e\xe5\xe4\x4a\x11\x29\x5b\xde\x17\x5f\x6c\x45\xc4\x7f\xbd\xe3\xbf\xfd\x8d\xa7\x72\xa1\xee\xa4\x2f\x8c\xdb\x92\x99\x57\x9d\xaf\x7c\x01\x6c\xc3\x04\xdc\xaa\xb8\xfc\x85\xcc\x7c\xfb\x2b\x2c\xff\xe7\x44\x2f\x21\x05\x43\xc5\xe0\xbf\x01\x00\x00\xff\xff\x99\xe3\x8f\xb5\x93\x2a\x00\x00") func deployKubernetes118DirectPmemCsiYamlBytes() ([]byte, error) { return bindataRead( @@ -140,12 +140,12 @@ func deployKubernetes118DirectPmemCsiYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "deploy/kubernetes-1.18/direct/pmem-csi.yaml", size: 10962, mode: os.FileMode(436), modTime: time.Unix(1608146541, 0)} + info := bindataFileInfo{name: "deploy/kubernetes-1.18/direct/pmem-csi.yaml", size: 10899, mode: os.FileMode(420), modTime: time.Unix(1608283271, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _deployKubernetes118LvmPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\xc1\x6e\xef\xe1\x0e\xa8\xac\x78\xdb\x03\x5a\x01\x7e\xc8\x26\xbe\xd4\xe8\xc6\x31\x92\xec\xbd\x06\x0c\x35\x96\x59\x53\x24\x4b\x8e\xbc\xf1\x15\xfd\xdf\x0b\x52\x92\xad\x2f\xcb\x1f\xcd\x07\x8a\xf3\x3e\xac\x23\x72\x38\xbf\xf9\xe0\xcc\xfc\x6c\xff\x91\xdc\x80\x04\x43\x11\x62\xf2\x9d\xe3\x92\x7c\x4a\xe9\x0a\xc8\x2a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x18\x50\xcd\x7f\x05\x63\xb9\x92\x11\x59\x8f\x06\x2b\x2e\xe3\x88\xcc\x68\x0a\x56\x53\x06\x83\x14\x90\xc6\x14\x69\x34\x20\x44\xd0\x67\x10\xd6\xbd\x23\x44\xa7\x90\x06\xcc\xf2\x21\x97\x08\x62\xc8\x54\x1a\xc6\xa0\x85\xda\xa4\x20\x31\x22\x62\x9d\x06\xda\xa8\x38\x63\xc8\x95\x1c\x10\x22\x69\x0a\xd1\x56\x6a\x10\x04\x41\xb7\xe6\x07\x30\x6b\xce\xe0\x92\x31\x95\x49\x7c\x23\xf5\x01\x53\x12\x8d\x12\x02\x4c\xb1\xe6\x8d\xed\xc1\x67\x9e\x29\x1b\xd2\x0c\x97\xca\xf0\xdf\xa8\x3b\x74\xb8\xfa\xab\x1d\x72\x15\x6e\x91\xdf\x2b\xf1\x56\xee\x0a\xe0\x05\xc1\x48\x2a\xdc\xa6\x35\x77\x90\xc0\x04\x6c\x91\xec\x41\x6f\x32\x01\x36\x1a\x04\x84\x6a\x7e\x63\x54\xa6\x3d\x8a\x80\x7c\xfa\x34\x20\xc4\x80\x55\x99\x61\x50\x3c\x03\x19\x6b\xc5\x25\xda\x01\x21\x6b\x30\xcf\xc5\xe3\x04\xd0\xff\xff\x9d\x22\x5b\xfa\x77\x82\xdb\xfc\x51\x0c\x02\x10\xfc\xdb\x4c\xc7\xb4\x78\xcb\x0c\xb8\xb7\x2d\x9d\x4c\x29\x13\x73\x59\xf5\x59\x1b\x84\x00\x6a\xe1\xad\x10\x58\x54\x86\x26\xb0\x57\x39\xb3\xbc\xd8\xc2\xa8\xa6\x8c\x23\xdf\x07\x65\x0b\x60\x87\xa9\x50\xda\x80\xa2\xb7\xeb\x05\xd4\xa3\x42\xa1\x55\xdc\xa1\xb8\x25\x4a\xb5\xb6\x6d\x61\x03\x5a\x70\x46\x2d\x74\x45\xf2\x8c\x74\xbe\x12\x99\x45\x30\xef\x9e\xd5\x26\x93\x12\xcc\x49\x29\xac\x9d\x59\x16\x41\xe2\x5a\x89\x2c\x3d\x2f\x7a\x27\x05\xaa\xa1\x90\x09\xca\xd3\xe3\xb5\x16\x89\x72\x72\xa2\x96\x59\x2a\xa8\xdd\x7b\x5b\x1a\xea\x8e\x2b\x01\x6b\x68\xdd\xff\x13\x53\xbd\x6d\x8b\xa4\xda\x2e\x15\x0e\x0f\x19\x55\x84\xac\xd8\xde\x67\xd5\x6b\xe9\x70\xc5\xbf\x6d\xf0\x01\x55\x87\x6b\x88\x54\xf1\x6b\x06\xe5\x84\xe3\xce\xeb\x55\x5f\xb8\x8c\xb9\x4c\xde\xac\xc5\x5a\x5e\xbf\xd7\x4a\x40\x5f\xcb\x52\x02\xee\x61\xe1\x54\x97\xce\xe9\xb1\x64\x40\x48\xa5\xe9\x1e\xdf\x2e\x6d\xf6\xfc\x4f\x60\xe8\x0b\x4b\xe7\xbc\xf1\x2e\x93\x42\xa5\xb4\x7e\x40\x10\xce\x75\x75\xb5\x21\x9c\x54\xca\xdf\xc1\xe9\xcd\xf1\xf1\xc3\xe6\x46\xab\x81\x39\x4d\x5a\x19\xdc\x76\x75\x83\x11\x19\x5d\x5c\x5c\x5c\x78\x08\x48\x4d\x02\x38\xaf\x3d\xb5\x20\x80\xa1\x32\x39\x48\xaa\xf5\x3e\x9d\xa7\x5a\xf0\x51\x8e\x4a\x01\x0d\x67\xf6\x0c\x2f\x8d\x3a\xbd\x34\x7a\x53\x2f\x11\x82\x1b\x0d\x11\x99\xa9\x18\x9c\xca\x96\xdb\xdc\xc8\xb5\xbb\xbf\x0f\x48\x11\x16\x99\x78\x80\x8f\x23\x28\xa5\x0b\xcb\xb1\x2f\x22\xa3\x96\x87\x52\xd7\x1e\xbe\x56\x40\x1d\x70\xda\xe9\xa8\x6d\x9e\x45\xb3\x1e\xf0\x08\xa9\x16\x14\xa1\x80\x54\x71\x97\xc7\x23\xa5\x42\x5f\x6e\xb6\x10\x3b\x51\x58\x66\xa8\x8b\x90\x3b\x9a\x72\x09\xc6\x16\xbb\x45\xcd\xbc\x83\x06\x9e\x6e\xe2\x5e\xa9\xef\xf0\xbc\x54\x6a\x15\x11\x9e\x48\x65\xc0\x6f\x2d\xa3\xe2\x91\x2c\x16\x5c\x72\xdc\xec\xb0\xb9\x96\x7e\xd9\x7a\xea\x62\xf8\xaf\x8c\x1b\x88\xaf\x33\xc3\x65\xf2\xc0\x96\x10\x67\x82\xcb\x64\xea\x0f\x2e\x1e\x4f\x5e\x80\x65\x0e\x53\x55\x32\x3f\xf3\xa1\x88\xfa\x23\x98\xd4\xd6\x97\x83\x3c\x09\x26\x2f\xda\x80\xb5\x75\x37\x97\x3b\x56\xb0\x89\xba\x0c\xec\x70\x5e\xf9\x52\x1a\x0c\x75\x79\x46\x66\x0a\xa7\xb2\xb5\xbe\xa6\x22\x83\x96\x2a\x3f\xea\x48\xf5\xa9\xeb\xf1\x82\x0a\x0b\xe5\xca\x2e\xca\xe5\x11\x8e\x47\xa6\x29\x95\xf1\xee\xcc\x80\x84\x99\x35\xa1\x50\x8c\x8a\xf0\x99\xcb\x70\x1b\xf5\xd8\xf0\x75\x05\x74\x40\x82\xf5\xf8\xcf\xd5\x3f\x53\x15\xc3\xb8\xc3\xbc\x80\x04\x25\x1d\x1e\x67\x92\xbf\x44\x61\x18\x32\xcb\xc3\x7a\x2a\x0d\xad\x62\xab\xaa\x8c\x81\x84\x5b\x34\x9b\x49\x29\x8b\x4c\x47\x61\x78\x31\xf4\xff\xa2\x5d\xe9\x2f\xf6\xbb\x98\xf1\x78\xfc\xc3\x8f\xff\xf8\xf6\x65\xf2\x34\xbb\xbb\x9e\x3c\xcd\x2e\x6f\x27\x3f\x55\xf7\x30\xfa\x0b\x17\x30\x0e\x19\x18\xb4\x21\xa3\x43\x66\xb0\xb6\x0e\x06\xab\x3b\x50\xd8\xe6\x96\x15\x6c\x9a\x3b\x56\xb0\xa9\xee\xc8\x1d\xe5\xca\xcb\xf8\x87\x1f\xe7\xb7\x93\xdb\xa7\xab\x87\xe9\xd3\xf5\xfd\xf4\xd7\xc9\x7d\x1b\x52\x51\xd3\xbf\x7a\xe6\x33\x8e\x76\xb5\xda\xbd\x40\xae\xab\xa1\xc9\xcb\x59\xdd\xbe\x41\x23\x3f\x7e\x31\x2a\xad\xa7\xc8\x82\x83\x88\x8b\xd1\xa4\xfa\x6a\x74\xb0\xfa\xa2\x17\x9a\x53\x5c\x46\xfe\xfa\x0d\x9d\x77\x5d\x41\x6a\xa1\x79\x9c\xdc\xdf\x4e\x67\x97\x8f\xd3\xbb\xd9\xd3\xd7\xbb\x9b\xa7\xf9\xe5\xe3\xdf\x9b\x98\x22\x12\x62\xaa\x43\x04\x93\x16\x9f\x59\x04\x42\x25\xad\xa3\xba\x7c\xd5\x3e\xaa\x7d\xa7\x5a\x07\xdd\xdc\x5d\x4f\xbe\x7c\xbb\x69\xcb\xbe\xfc\x7c\xf1\xb7\xbc\xb0\x5c\xcd\xc6\x3b\x37\xf3\x94\x26\x10\x11\x7f\x60\x33\xe1\x23\x46\x25\x35\x9b\xfa\xde\x79\x26\xc4\x5c\x09\xce\x36\x11\x99\x2e\x66\x0a\xe7\x06\x2c\xc8\x5d\xa2\x54\x1a\x4f\xe3\xde\x6c\xbb\x73\x09\x79\x7b\x2d\xe7\x8d\x66\x5d\x3d\x69\xd7\xf9\xf3\x97\x05\x96\x19\x8e\x9b\x2b\xc7\xba\x5e\xb0\x5e\xf7\x68\x7c\x27\xc5\xe6\x5e\x29\x9f\xcb\x76\x63\x11\xd2\x88\xa0\xc9\x76\xd1\xab\x84\xe2\x16\xac\x75\x26\xf9\x58\xf7\xc6\x29\x27\x7c\xb7\x6e\xba\xac\x59\x90\xba\x27\x85\xbc\xbf\x15\x2d\xf8\xe5\x5d\xf6\x17\x6c\x9f\xa4\xe5\x2d\x39\x2d\xb2\x84\xcb\xc0\x95\x06\xc0\x20\xe6\x66\x8f\x2c\xa6\xba\x25\x8b\xa9\xae\x48\x04\x84\x9a\xa4\x86\xba\x59\xbe\x7c\xcc\x69\x1c\xbb\x92\x3e\x3e\xa6\x40\x05\x0b\xa0\x98\x19\x08\x12\x8a\x60\xc7\x8f\x4a\x2b\xa1\x92\xcd\xb8\xe6\x68\xb7\xcf\xba\xd8\x61\x80\x7b\x37\x20\x4f\x41\x65\x38\xfe\x39\xad\x3d\x8e\x61\x41\x33\x81\xc1\xc2\xba\x41\x6a\x0c\x2f\xf8\x97\xda\x7a\x91\x14\x5b\xd0\xbe\x78\x8c\x9a\x59\xed\x08\x47\xc2\x8c\xe3\x4a\x96\x27\x41\xc1\xb9\xc3\x06\x89\x89\xd6\x9f\x87\x17\xc3\xcf\x67\xa5\x79\x17\x4d\x39\x29\xdf\x47\x6f\x9e\xef\x47\xa5\xee\x09\x09\xb8\x17\x8f\xc9\xe4\xa5\x9d\x29\xe9\xd0\x34\x30\xf8\xa5\x6f\x16\x4c\xce\x50\xb6\x27\x55\x59\x5b\xdf\xcc\xe7\x5e\xa8\x84\x9b\x11\xaa\x23\x47\x40\x60\xb1\x00\x86\x6e\x6a\x28\xa6\x9c\x9d\x4e\x3f\x85\xb8\xda\xed\x49\xea\x70\x95\x3d\x83\x91\x80\xe0\xa9\x73\x4a\x1d\xf5\x1c\x54\x3d\x54\x3d\x35\xd5\xb8\xb9\xe6\x26\x22\x32\x13\xa2\x59\xd9\xf6\xf8\x25\xe8\xbd\xf0\x16\x98\x81\x5a\xf0\xf2\x27\x0d\xab\xb7\xc2\xf9\xaa\xed\x80\xf4\xef\xff\x34\x00\x95\xb7\xbd\x9f\x63\x5c\x53\x48\x95\x7c\x43\x86\xe1\x5c\x7d\x80\x5b\x9c\xc8\x26\x8a\x13\xcf\xc1\xf6\xa1\x24\xa1\x82\xfb\x1d\xe9\xc1\xab\xcf\xb8\x31\xb8\xdb\x79\x4b\x25\x4d\xc0\x8c\xc5\x3a\x3d\x34\x00\xd7\xec\xee\x19\x7d\x5b\xed\xe4\xa8\xf9\x75\x5b\x0f\x1a\x53\x71\x21\x35\xbf\xbb\x7e\x9a\xce\x7f\xf2\xc3\xf1\xe8\x88\x61\xba\xa3\xd0\xb4\x07\xeb\x77\x19\x9a\xad\x63\xff\xae\x10\x8f\xc3\x35\x35\xa1\xe0\xcf\xe1\x11\xc3\xf3\x69\xa3\xb6\xb3\x76\x0e\x86\x81\x44\x9a\xc0\x78\x54\x37\xf3\xff\x7d\x10\xaf\x24\xc0\x3b\x40\x41\x8a\x99\x1d\x6a\x15\x57\xb4\xbd\xfa\x1c\xff\x8a\xdc\xe2\x77\x4d\x09\xb4\xe1\x6b\x2e\x20\x81\xb8\x31\x92\xd4\x86\x92\x8b\xb7\x67\x07\xe5\xd5\x76\x73\x88\x00\x0c\xf3\x31\xc2\x86\xf5\xb9\xa4\x3e\x88\xe5\xf2\x46\x69\x9a\x78\xa5\x11\xf9\xc2\x63\x6e\xc0\xf7\x0a\x2a\xda\x7e\x71\xfb\x7d\x91\xeb\x21\x0c\x2d\x20\xf9\x97\xc4\xe7\xea\x74\xe2\x3d\xda\xba\x49\x91\x1f\xcb\x7a\x08\x51\x0c\xeb\x96\x4c\x0c\xeb\x1e\x3d\x76\xd3\xd6\x62\x37\xbd\xc8\x3a\x66\xde\x83\x6c\xab\x74\x5e\xcf\x0d\x3e\xc3\x85\xee\x30\xdf\x05\x4e\x63\x6d\x45\x04\xcb\x0e\x97\xe7\xa5\xae\x35\x92\x66\xb6\xed\x69\x15\x9d\x5d\xb9\x93\x15\xd6\x77\x75\xf6\x86\xff\xb9\x06\x1e\x66\x6f\x3e\x7f\xf2\x52\xb2\xb5\xde\x44\xeb\xd1\xf0\xf3\xf0\xe2\xac\xda\xd4\x3c\xeb\xc3\xd9\xd7\xc1\x4c\xac\x06\xbd\x25\x5d\xcb\x88\xdd\x19\xd5\xcf\x76\x77\x60\x0a\xc7\xe6\x21\xd9\x47\x89\x96\xca\xe6\x9a\xab\xb5\xb5\xbf\xb2\xf5\xde\x91\xfc\xfb\x91\x6b\x7f\x2b\x94\xd9\xdc\x99\xab\xf2\xc7\x00\xbd\x5e\x38\x07\xc8\x53\x39\x01\x86\x27\xeb\xdf\xe3\xc7\xb3\xdc\xd1\x57\xe8\x8f\x43\xd3\x59\xde\x4f\xc3\x52\xaf\xf5\xc7\xa9\x6d\x54\xf8\x60\x6f\x0d\x3f\x92\xe3\x7a\xc1\x26\xbf\x3d\xc2\x88\x57\xc8\xa7\x3d\x95\xb6\x47\x79\xbd\x13\x1d\xa7\xa5\xde\xa9\x7a\x8f\xaf\xb7\xad\x23\x2f\x45\xd1\xd6\x9a\x7c\xbf\xfe\x93\x92\x70\x3d\x7a\x06\xa4\xdb\x9f\x08\x3c\x4c\xaf\xf3\xd1\xeb\x6d\xe8\x7f\x25\x28\x25\x29\xa5\x88\x94\x2d\xef\x8b\xef\xa2\x22\xe2\xbf\x91\xf1\x5f\xd2\xc6\x53\xb9\x50\x77\xd2\x57\xc5\x6d\xbd\xcc\x4b\xce\x57\xbe\x00\xb6\x61\x02\x6e\x55\x5c\xfe\x72\x65\xbe\xfd\x75\x94\xff\x73\xa2\x97\x90\x82\xa1\x62\xf0\xdf\x00\x00\x00\xff\xff\xfa\x42\x3c\xbb\x9c\x2a\x00\x00") +var _deployKubernetes118LvmPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\x5b\x6f\xe3\xb8\x15\x7e\xf7\xaf\x60\xa7\xfb\xb0\x0b\x54\x56\x3c\xed\x02\xad\x00\x3f\x64\x12\x6f\x6a\x74\x92\x18\x49\x66\x5f\x03\x86\x3a\x96\x59\x53\x24\x4b\x1e\x69\xe2\x2d\xfa\xdf\x0b\x52\x92\xad\x9b\x15\xdb\x9b\x0b\x8a\x7a\x1e\xc6\xa1\x78\x78\x3e\x9e\xeb\x77\x6c\xff\x91\x5c\x81\x04\x43\x11\x62\xf2\x9d\xe3\x8a\x7c\x4a\xe9\x1a\xc8\x3a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x1a\x51\xcd\x7f\x05\x63\xb9\x92\x11\xc9\x27\xa3\x35\x97\x71\x44\xee\xc1\xe4\x9c\xc1\x39\x63\x2a\x93\x38\x4a\x01\x69\x4c\x91\x46\x23\x42\x04\x7d\x02\x61\xdd\x3b\x42\x74\x0a\x69\xc0\x2c\x1f\x73\x89\x20\xc6\x4c\xa5\x61\x0c\x5a\xa8\x4d\x0a\x12\x23\x22\xf2\x34\xd0\x46\xc5\x19\x43\xae\xe4\x88\x10\x49\x53\x88\xb6\x52\x01\x53\x12\x8d\x12\x02\x4c\xf9\xcc\x6a\xca\x6a\x1b\x46\x41\x10\x34\xf0\x99\x27\xca\xc6\x34\xc3\x95\x32\xfc\x37\xea\x0e\x1d\xaf\xff\x6a\xc7\x5c\x85\x5b\xe4\x77\x4a\xc0\x5b\xe1\x85\x67\x04\x23\xa9\x70\x9b\x72\xee\x20\x81\x09\xd8\x32\xd9\x83\xde\x64\x02\x6c\x34\x0a\x08\xd5\xfc\xca\xa8\x4c\x7b\x14\x01\xf9\xf4\x69\x44\x88\x01\xab\x32\xc3\xa0\x5c\x03\x19\x6b\xc5\x25\xda\x11\x21\x39\x98\xa7\x72\x39\x01\xf4\xff\x7f\xa7\xc8\x56\xfe\x9d\xe0\xb6\x58\x8a\x41\x00\x82\x7f\x9b\xe9\x98\x96\x6f\x99\x01\xf7\xb6\xa3\x93\x29\x65\x62\x2e\xeb\x36\xeb\x82\x10\x40\x2d\xbc\x15\x02\x8b\xca\xd0\x04\xf6\x2a\x67\x96\x97\x5b\x18\xd5\x94\x71\xe4\xfb\xa0\x6c\x01\xec\x30\x95\x4a\x5b\x50\xf4\xf6\x79\x09\xf5\x20\x57\x68\x15\xf7\x28\xee\x88\x52\xad\x6d\x57\xd8\x80\x16\x9c\x51\x0b\x7d\x9e\x3c\x21\x9c\x2f\x44\x66\x11\xcc\xbb\x47\xb5\xc9\xa4\x04\x73\x54\x08\x6b\x77\x2d\x8b\x20\x31\x57\x22\x4b\x4f\xf3\xde\x51\x8e\x6a\x29\x64\x82\xf2\xf4\x70\xad\x65\xa0\x1c\x1d\xa8\x55\x94\x0a\x6a\xf7\x66\x4b\x4b\xdd\x61\x25\x20\x87\x4e\xfe\x1f\x19\xea\xdd\xbb\x48\xaa\xed\x4a\xe1\xf8\xa5\x4b\x95\x2e\x2b\xb7\x0f\xdd\xea\xb5\x74\xb8\xe2\xdf\xbd\xf0\x0b\xaa\x5e\xae\x21\x52\xc5\xaf\xe9\x94\x23\x8e\x3b\xad\x57\x7d\xe1\x32\xe6\x32\x79\xb3\x16\x6b\x79\x33\xaf\x95\x80\xa1\x96\xa5\x04\xdc\xc1\xd2\xa9\xae\x8c\x33\x70\x93\x11\x21\xb5\xa6\x7b\x78\xbb\xb4\xd9\xd3\x3f\x81\xa1\x2f\x2c\xbd\x7c\xe3\x5d\x98\x42\xad\xb4\x7e\x80\x13\x4e\x35\x75\xbd\x21\x1c\x55\xca\xdf\xc1\xe8\x6d\xfa\xf8\x61\xbc\xd1\x6a\x60\x4e\x93\x56\x06\xb7\x5d\xdd\x60\x44\x26\x67\x67\x67\x67\x1e\x02\x52\x93\x00\x2e\x1a\xab\x16\x04\x30\x54\xa6\x00\x49\xb5\xde\xa7\xf3\xd8\x1b\x7c\x94\xa1\x52\x40\xc3\x99\x3d\xc1\x4a\x93\x5e\x2b\x4d\xde\xd4\x4a\x84\xe0\x46\x43\x44\x6e\x54\x0c\x4e\x65\xc7\x6c\x8e\x72\xed\xf2\xf7\x1e\x29\xc2\x32\x13\xf7\xf0\x71\x03\x4a\x65\xc2\x8a\xf6\x45\x64\xd2\xb1\x50\xea\xda\xc3\xd7\x1a\xa8\x17\x8c\x76\x3c\x6a\x5b\x44\xd1\xcd\x00\x78\x84\x54\x0b\x8a\x50\x42\xaa\x99\xcb\xe3\x91\x52\xa1\x2f\x37\x5b\x88\xbd\x28\x2c\x33\xd4\x79\xc8\x1d\x4d\xb9\x04\x63\xcb\xdd\xa2\x71\xbd\x17\x2f\x78\xfc\x15\xf7\x4a\x7d\x87\xa7\x95\x52\xeb\x88\xf0\x44\x2a\x03\x7e\x6b\xe5\x15\x8f\x64\xb9\xe4\x92\xe3\x66\x87\xcd\xb5\xf4\xf3\xce\xaa\xf3\xe1\xbf\x32\x6e\x20\xbe\xcc\x0c\x97\xc9\x3d\x5b\x41\x9c\x09\x2e\x93\xb9\x3f\xb8\x5c\x9e\x3d\x03\xcb\x1c\xa6\xba\x64\x71\xe6\x7d\xe9\xf5\x07\x30\xa9\x6d\x3e\x0e\x8a\x20\x98\x3d\x6b\x03\xd6\x36\xcd\x5c\xed\x58\xc3\x26\xea\xbb\x60\x8f\xf1\xaa\x97\xd2\x6e\xd0\x57\xc6\xa5\x0c\xce\x65\xe7\x79\x4e\x45\x06\x1d\x55\x9e\xea\x48\xf5\xa9\x6f\x79\x49\x85\x85\xea\xc9\xce\xcb\xd5\x11\x6e\x8e\x4c\x53\x2a\xe3\xdd\x99\x01\x09\x33\x6b\x42\xa1\x18\x15\xe1\x13\x97\xe1\xd6\xeb\xb1\xe1\x79\x0d\x74\x40\x82\x7c\xfa\xe7\xfa\x9f\x42\x25\x09\x97\x49\xb0\x54\x26\xa5\x38\x45\x78\xc6\xfa\xe3\x54\xc5\x30\xed\xb9\x7d\x40\x82\x6a\x5a\x9e\x66\x92\x3f\x47\x61\x18\x32\xcb\xc3\x66\xa4\x8d\xad\x62\xeb\xba\x8c\x81\x84\x5b\x34\x9b\x59\x25\x8b\x4c\x47\x61\x78\x36\xf6\xff\xa2\x5d\x67\x28\xf7\x3b\x97\xf2\x78\xfa\xc3\x8f\xff\xf8\xf6\x65\xf6\x78\x73\x7b\x39\x7b\xbc\x39\xbf\x9e\xfd\x54\xdf\xc3\xe8\x2f\x5c\xc0\x34\x64\x60\xd0\x86\x8c\x8e\x99\x69\x5c\xc1\xad\xd7\x77\xa0\xb0\xed\x2d\x6b\xd8\xb4\x77\xac\x61\x53\xdf\x51\xd8\xd1\x55\x9f\xe9\x0f\x3f\x2e\xae\x67\xd7\x8f\x17\xf7\xf3\xc7\xcb\xbb\xf9\xaf\xb3\xbb\x2e\xa4\xb2\xe4\x7f\xf5\x83\xd1\x34\xda\x95\x72\xf7\x02\x99\xd7\x3d\x57\x54\xbb\xe6\xfd\x46\xad\xf0\xf9\xc5\xa8\xb4\x19\x41\x4b\x0e\x22\x2e\x99\x4b\xfd\xd5\x6a\x70\xcd\x87\x5e\x68\x41\x71\x15\xf9\xec\x1c\x3b\xeb\xba\x7a\xd5\x41\xf3\x30\xbb\xbb\x9e\xdf\x9c\x3f\xcc\x6f\x6f\x1e\xbf\xde\x5e\x3d\x2e\xce\x1f\xfe\xde\xc6\x14\x91\x10\x53\x1d\x22\x98\xb4\xfc\x48\xc3\xc5\x52\xe7\xa8\x3e\x5b\x75\x8f\xea\xa6\x5c\xe7\xa0\xab\xdb\xcb\xd9\x97\x6f\x57\x5d\xd9\xe7\x9f\xcf\xfe\x56\xd4\x9d\x8b\x9b\xe9\xce\xcc\x3c\xa5\x09\x44\xc4\x1f\xd8\xce\x87\x88\x51\x49\xcd\xa6\xb9\x77\x91\x09\xb1\x50\x82\xb3\x4d\x44\xe6\xcb\x1b\x85\x0b\x03\x16\xe4\x2e\x50\x6a\x7d\xa9\x95\x56\xdb\xe6\x5d\x41\xde\x66\xed\xa2\xd5\xcb\xeb\x27\xed\x88\x41\xf1\xb2\xc0\x32\xc3\x71\x73\xe1\x86\xb2\x67\x6c\x96\x45\x1a\xdf\x4a\xb1\xb9\x53\xca\xc7\xb2\xdd\x58\x84\x34\x22\x68\xb2\x9d\xf7\x6a\xae\xb8\x06\x6b\xdd\x95\xbc\xaf\x07\xfd\x54\xcc\x83\xd7\x8e\x7c\x36\x6e\x90\xba\x95\x52\xde\x67\x45\x07\x7e\x95\xcb\x3e\xc1\xf6\x49\x5a\xde\x91\xd3\x22\x4b\xb8\x0c\x5c\x69\x00\x0c\x62\x6e\xf6\xc8\x62\xaa\x3b\xb2\x98\xea\x9a\x44\x40\xa8\x49\x1a\xa8\xdb\xd5\xcd\xfb\x9c\xc6\xb1\xab\xf8\xd3\x43\x0a\x54\xb0\x04\x8a\x99\x81\x20\xa1\x08\x76\xfa\xa0\xb4\x12\x2a\xd9\x4c\x1b\x86\x76\xfb\xac\xf3\x1d\x06\xb8\x77\x03\xf2\x14\x54\x86\xd3\x9f\xd3\xc6\x72\x0c\x4b\x9a\x09\x0c\x96\xd6\xf1\xac\x29\x3c\xe3\x5f\x1a\xcf\xcb\xa0\xd8\x82\xf6\xc5\x63\xd2\x8e\x6a\x37\x8f\x24\xcc\xb8\x51\xca\xf2\x24\x28\x47\xf2\xb0\x35\xe3\x44\xf9\xe7\xf1\xd9\xf8\xf3\x49\x61\xde\x37\xc5\x1c\x15\xef\x93\x37\x8f\xf7\x83\x42\xf7\x88\x00\xdc\x8b\xc7\x64\xf2\xdc\xde\x28\xe9\xd0\xb4\x30\xf8\x47\xdf\x2c\x98\x62\x80\xd9\x9e\x54\x1f\xea\x86\x28\xa1\x7b\xa1\x12\x8e\x42\xd4\x19\x49\x40\x60\xb9\x04\x86\x8e\x54\x94\x24\x68\xa7\xd3\x93\x14\x57\xbb\xfd\x0c\x3b\x5e\x67\x4f\x60\x24\x20\xf8\xc9\x3a\xa5\x6e\x32\x1d\xd5\x2d\x54\x3f\x35\xd5\xb8\xb9\xe4\x26\x22\x32\x13\xa2\x5d\xd9\xf6\xd8\x25\x18\x4c\x78\x0b\xcc\x40\xc3\x79\xc5\x4a\xeb\xd6\x5b\xe1\xe2\xa9\xed\x81\xf4\xef\xff\xb4\x00\x55\xd9\x3e\x3c\x82\x5c\x52\x48\x95\x7c\xc3\x01\xc4\x99\xfa\x85\xd1\xe3\xc8\x61\xa3\x3c\xf1\x14\x6c\x1f\x3a\x43\xd4\x70\xbf\xe3\xf4\xf0\xea\x14\x38\x06\x97\x9d\xd7\x54\xd2\x04\xcc\x54\xe4\xe9\xef\xe4\xc7\x0d\xb3\x0c\x30\xe3\x4e\xb7\x39\x88\xde\x6e\xcb\x45\x8b\x34\x97\x52\x8b\xdb\xcb\xc7\xf9\xe2\x27\xcf\x9d\x27\x07\x70\xed\x9e\x3a\xd4\xe5\xdd\xef\xc2\xa9\x2d\x52\xf4\x14\x65\x1a\xe6\xd4\x84\x82\x3f\x85\x07\x70\xeb\xe3\x98\xb8\xbb\xed\x02\x0c\x03\x89\x34\x81\xe9\xa4\x79\xcd\xff\x75\x9e\x5e\x0b\x80\x77\x80\x82\x14\x33\x3b\xd6\x2a\xae\x69\x7b\x75\x9a\xff\x8a\xa3\xc7\xff\xf5\xc4\xa0\x0d\xcf\xb9\x80\x04\xe2\x16\x63\x69\x70\x96\xb3\xb7\x1f\x1e\xaa\xd4\x76\x34\x45\x00\x86\x05\xcb\xb0\x61\x93\xb6\x34\x79\x5a\x21\x6f\x94\xa6\x89\x57\x1a\x91\x2f\x3c\xe6\x06\x7c\x2b\xa1\xa2\x6b\x17\xb7\xdf\x17\xb9\x81\x79\xa2\x03\xa4\xf8\x8a\xf9\x54\x9d\x4e\x7c\x40\x5b\xff\xcc\xe4\x59\xdb\xc0\xbc\x14\x43\xde\x91\x89\x21\x1f\xd0\x63\x37\x5d\x2d\x76\x33\x88\xac\x87\x12\xbf\x38\x8c\x55\xc6\x1b\xc8\xe0\x13\x4c\xe8\x0e\xf3\x5d\xe0\xb8\xa1\xae\xf4\x60\xd5\xe1\x8a\xb8\xd4\x8d\x46\xd2\x8e\xb6\x3d\xad\xa2\xb7\x2b\xf7\x0e\x8d\xcd\x5d\xbd\xbd\xe1\x77\xd7\xc0\x97\x87\x3b\x1f\x3f\x45\x29\xd9\xde\xde\x44\xf9\x64\xfc\x79\x7c\x76\x52\x6d\x6a\x9f\xf5\xe1\xc3\xd9\x8b\x91\x58\x77\x7a\x47\xba\x11\x11\xbb\x33\xea\x9f\x0c\xef\xc0\x94\x86\x2d\x5c\xb2\x6f\x62\x5a\x29\x5b\x68\xae\xd7\xd6\xe1\xca\x36\x98\x23\xc5\xb7\x2b\x97\x3e\x2b\x94\xd9\xdc\x9a\x8b\xea\xa7\x04\x83\x56\x38\x05\xc8\x63\xc5\x00\xc3\xa3\xf5\xef\xb1\xe3\x49\xe6\x18\x2a\xf4\x87\xa1\xe9\x2d\xef\xc7\x61\x69\xd6\xfa\xc3\xd4\xb6\x2a\x7c\xb0\xb7\x86\x1f\x38\x02\x7b\xc1\xf6\xf8\x7b\xc0\x25\x5e\x21\x9e\xf6\x54\xda\x01\xe5\xcd\x4e\x74\x98\x96\x66\xa7\x1a\x3c\xbe\xd9\xb6\x0e\x4c\x8a\xb2\xad\xb5\x3f\x0e\x68\xfe\x20\x25\xcc\x27\x4f\x80\x74\xfb\x03\x83\xfb\xf9\x65\x41\xbd\xde\xe6\xd3\x81\x9a\x53\xaa\x99\x95\x22\x52\xb6\xba\x2b\xbf\xc9\x8a\x88\xff\x3e\xc7\x7f\xc5\x1b\xcf\xe5\x52\xdd\x4a\x5f\x15\xb7\xf5\xb2\x28\x39\x5f\xf9\x12\xd8\x86\x09\xb8\x56\x71\xf5\xbb\x97\xc5\xf6\xb7\x55\xfe\xcf\x99\x5e\x41\x0a\x86\x8a\xd1\x7f\x03\x00\x00\xff\xff\x3a\x78\x18\xc6\x60\x2a\x00\x00") func deployKubernetes118LvmPmemCsiYamlBytes() ([]byte, error) { return bindataRead( @@ -160,12 +160,12 @@ func deployKubernetes118LvmPmemCsiYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "deploy/kubernetes-1.18/lvm/pmem-csi.yaml", size: 10908, mode: os.FileMode(436), modTime: time.Unix(1608146543, 0)} + info := bindataFileInfo{name: "deploy/kubernetes-1.18/lvm/pmem-csi.yaml", size: 10848, mode: os.FileMode(420), modTime: time.Unix(1608283273, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _deployKubernetes119AlphaDirectPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\x5b\x6f\xe3\xb8\x15\x7e\xf7\xaf\x60\xa7\xfb\xb0\x0b\x54\x56\x3c\xed\x02\xad\x00\x3f\x64\x12\x6f\x6a\x74\xe2\x18\x49\x66\x5f\x03\x86\x3a\x96\x59\x53\xa4\x4a\x1e\x79\xa2\x2d\xfa\xdf\x0b\x52\x17\xeb\x66\xf9\xb2\xb9\xa0\xa8\xe7\x61\x1c\x89\xe4\xf9\x78\xce\xe1\x77\xce\x27\xeb\x8f\xe4\x06\x24\x68\x8a\x10\x92\xef\x1c\xd7\xe4\x53\x4c\x37\x40\x36\xa9\x41\x15\xf3\xdf\xe0\xd3\x9f\x48\xa8\x88\x54\x48\x20\xe4\xf8\x87\xd1\x88\x26\xfc\x57\xd0\x86\x2b\x19\x90\xed\x64\xb4\xe1\x32\x0c\xc8\x82\xc6\x60\x12\xca\x60\x14\x03\xd2\x90\x22\x0d\x46\x84\x08\xfa\x0c\xc2\xd8\x6f\x84\x24\x31\xc4\x1e\x33\x7c\xcc\x25\x82\x18\x33\x15\xfb\x21\x24\x42\x65\x31\x48\x0c\x48\xc8\x35\x30\xf4\x12\xad\xc2\x94\x21\x57\x72\x44\x88\xa4\x31\x04\xd5\xc4\x91\xe7\x79\xfd\xc6\x1f\x40\x6f\x39\x83\x4b\xc6\x54\x2a\xf1\xed\x10\x78\x4c\x49\xd4\x4a\x08\xd0\xc5\x3d\xb7\xe5\x01\x88\xfa\x99\xb2\x31\x4d\x71\xad\x34\xff\x8d\xda\x45\xc7\x9b\xbf\x9a\x31\x57\x7e\x05\xfe\x5e\x89\x37\x74\x9a\x07\x2f\x08\x5a\x52\x61\x07\x6d\xb9\x45\x05\xda\x63\xab\x68\xcf\x06\x74\x2a\xc0\x04\x23\x8f\xd0\x84\xdf\x68\x95\x26\x0e\x88\x47\x3e\x7d\x1a\x11\xa2\xc1\xa8\x54\x33\x28\xae\x81\x0c\x13\xc5\x25\x9a\x11\x21\x5b\xd0\xcf\xc5\xe5\x08\xd0\xfd\xff\x9d\x22\x5b\xbb\x6f\x82\x9b\xfc\x52\x08\x02\x10\xdc\xd7\x34\x09\x69\xf1\x95\x69\xb0\x5f\x3b\x36\x99\x52\x3a\xe4\xb2\xee\xb6\x2e\x08\x01\xd4\xc0\x5b\x21\x30\xa8\x34\x8d\x60\xaf\x71\x66\x78\x31\x84\xd1\x84\x32\x8e\x7c\x1f\x94\x0a\xc0\x0e\x53\x61\xb4\x05\x25\xa9\xee\x17\x50\x8f\x0a\x45\xa2\xc2\x1e\xc3\x9d\xa9\x34\x49\x4c\x77\xb2\x86\x44\x70\x46\x0d\xf4\x45\xf2\x8c\x8c\xbe\x12\xa9\x41\xd0\x1f\x91\xd8\x3a\x95\x12\xf4\x49\x59\x9c\xd8\x9d\x19\x04\x89\x5b\x25\xd2\xf8\xbc\x00\x9e\x14\xab\x96\x41\x26\x28\x8f\x8f\xb7\x5a\xe4\xca\xc9\xb9\x5a\x26\xaa\xa0\x66\xef\x81\x69\x99\x3b\x8e\x05\xb6\xd0\xa1\x80\x13\xb3\xbd\xbb\x17\x49\x13\xb3\x56\x38\x3e\xb4\xa9\x22\x64\xc5\xf0\xa1\x5d\xbd\x96\x0d\x5b\x02\xba\x1b\x3e\x60\xea\x30\x8d\x48\x15\xbe\x66\x50\x4e\x58\xee\xbc\x8a\xf5\x85\xcb\x90\xcb\xe8\x2d\x6b\xad\xe1\xcd\xa3\xad\x04\x0c\x15\x2e\x25\xe0\x1e\x56\xd6\x7a\xe9\x9f\x81\xcd\x8c\x08\xa9\x55\xdf\xe3\x8b\xa6\x49\x9f\xff\x09\x0c\x1d\xb7\xf4\xf6\x1e\xef\xd2\x32\xd4\x08\xf6\x63\xe2\x70\xae\xb7\xeb\x95\xe1\x24\x42\x7f\x07\xbf\xb7\xbb\xc9\x8f\x6c\x23\x4d\x02\xcc\x1a\x4b\x94\xc6\xaa\xc2\x6b\x0c\xc8\xe4\xe2\xe2\xe2\xc2\xa1\x40\xaa\x23\xc0\x65\xe3\xaa\x01\x01\x0c\x95\xce\x71\xd2\x24\xd9\x67\xf3\x8c\x4d\x7c\xa0\xbb\x62\x40\xcd\x99\x39\xc3\x57\x93\x5e\x5f\x4d\xde\xda\x57\x84\x60\x96\x40\x40\x16\x2a\x04\x6b\xb5\xe3\x3c\xdb\x87\xed\x8e\xf3\x03\x52\x84\x55\x2a\x1e\xe0\x43\xb5\x4b\xe9\xc8\xb2\x1d\x0c\xc8\xa4\xe3\xa7\xd8\xd6\x8c\xaf\x35\x5c\x07\x5c\x77\x16\x70\x93\x67\xd4\x62\x00\x3f\x42\x9c\x08\x8a\x50\xa0\xaa\x39\xcd\x41\x92\x52\xa1\x23\xa0\x0a\x65\x2f\x10\xc3\x34\xb5\x71\xb2\x4b\x53\x2e\x41\x9b\x62\xb4\x68\xec\xf0\xe0\x1e\xcf\xda\xe5\xde\x89\xdf\xe1\x79\xad\xd4\x26\x20\x3c\x92\x4a\x83\x1b\x5a\xc6\xc6\x81\x59\xad\xb8\xe4\x98\xed\xe0\xd9\x6a\x7f\xd9\xb9\x6a\x23\xf9\xaf\x94\x6b\x08\xaf\x53\xcd\x65\xf4\xc0\xd6\x10\xa6\x82\xcb\x68\xee\x16\x2e\x2e\xcf\x5e\x80\xa5\x16\x53\x7d\x66\xbe\xe6\x43\x11\xfb\x47\xd0\xb1\x69\xde\xf6\xf2\x54\x98\xbd\x24\x1a\x8c\x69\x7a\xba\x1c\xb1\x81\x2c\xe8\xdb\x60\x8f\xff\xca\x8f\x4a\x40\x53\x9b\x6d\x64\xa1\x70\x2e\x3b\xf7\xb7\x54\xa4\xd0\x31\xe5\xba\x20\xa9\x3e\xf5\x5d\x5e\x51\x61\xa0\xbc\xb3\x0b\x74\xb9\x84\x55\x99\x71\x4c\x65\xb8\x5b\xd3\x23\x7e\x6a\xb4\x2f\x14\xa3\xc2\x7f\xe6\xd2\xaf\x02\x1f\x6a\xbe\xad\x81\xf6\x88\xb7\x9d\xfe\xb9\xfe\x67\xac\x42\x98\xf6\x6c\xcf\x23\x5e\x29\x96\xa7\xa9\xe4\x2f\x81\xef\xfb\xcc\x70\xbf\x99\x4d\x63\xa3\xd8\xa6\x3e\x47\x43\xc4\x0d\xea\x6c\x56\xce\x45\x96\x04\xbe\x7f\x31\x76\xff\x82\x5d\x31\x28\xc6\xdb\x98\xf1\x70\xfa\xc3\x8f\xff\xf8\xf6\x65\xf6\xb4\xb8\xbb\x9e\x3d\x2d\x2e\x6f\x67\x3f\xd5\xc7\x30\xfa\x0b\x17\x30\xf5\x19\x68\x34\x3e\xa3\x63\xa6\xb1\x71\x1f\x34\xd6\x47\xa0\x30\xed\x21\x1b\xc8\xda\x23\x36\x90\xd5\x47\xe4\x8e\xb2\x24\x33\xfd\xe1\xc7\xe5\xed\xec\xf6\xe9\xea\x61\xfe\x74\x7d\x3f\xff\x75\x76\xdf\x85\x54\xf0\xfb\x57\x27\x8a\xa6\xc1\x8e\xb7\xed\x07\xe4\xb6\x1e\x9a\x9c\xd4\x9a\xfb\x1b\xb5\xf2\xe3\x17\xad\xe2\x66\x8a\xac\x38\x88\xb0\xe8\x57\xea\x9f\x56\x41\x6b\xde\x74\x93\x96\x14\xd7\x81\x3b\x7e\x63\xeb\x5d\xcb\x49\x1d\x34\x8f\xb3\xfb\xdb\xf9\xe2\xf2\x71\x7e\xb7\x78\xfa\x7a\x77\xf3\xb4\xbc\x7c\xfc\x7b\x1b\x53\x40\x7c\x8c\x13\x1f\x41\xc7\xc5\x13\x0d\x4f\xa8\xa8\xb3\x54\x9f\xaf\xba\x4b\x75\xcf\x54\x67\xa1\x9b\xbb\xeb\xd9\x97\x6f\x37\xdd\xb9\x2f\x3f\x5f\xfc\x2d\x27\x96\xab\xc5\x74\xe7\x66\x1e\xd3\x08\x02\xe2\x16\x6c\x27\x7c\xc0\xa8\xa4\x3a\x6b\x8e\x5d\xa6\x42\x2c\x95\xe0\x2c\x0b\xc8\x7c\xb5\x50\xb8\xd4\x60\x40\xee\x12\xa5\x56\x7e\x5a\xe7\xa6\xaa\xd4\x25\xe4\xea\x58\x2e\x5b\x85\xbb\xbe\xd2\xae\x0b\xc8\x3f\x06\x58\xaa\x39\x66\x57\x56\x90\xbd\x60\x93\xf7\x68\x78\x27\x45\x76\xaf\x94\xcb\x65\x93\x19\x84\x38\x20\xa8\xd3\x5d\xf4\x6a\xa1\xb8\x05\x63\xec\x96\x5c\xac\x07\xe3\x94\x6b\xc1\x5b\xdb\x72\x36\x76\x10\xdb\x2b\xc5\x7c\x77\x2a\x3a\xf0\xcb\xb3\xec\x0e\xd8\xbe\x99\x86\x77\xe6\x25\x22\x8d\xb8\xf4\x2c\x35\x00\x7a\x21\xd7\x7b\xe6\x62\x9c\x74\xe6\x62\x9c\xd4\x66\x78\x84\xea\xa8\x81\xda\xf3\x8a\xc7\x56\x59\x8d\x85\xbc\x5d\xe1\x2a\xf8\x0c\x24\x6a\x2a\x06\x68\xcf\xe5\x0a\x0d\x43\x5b\x0a\xa6\xc7\x10\x9b\xb7\x02\x8a\xa9\x06\x2f\xa2\x08\x66\xfa\xa8\x12\x25\x54\x94\x4d\x1b\x01\xb2\xe3\x8c\x8d\x39\x7a\xb8\x77\x00\xf2\x18\x54\x8a\xd3\x9f\xe3\xc6\xe5\x10\x56\x34\x15\xe8\xad\x8c\xed\xc4\xa6\xf0\x82\x7f\x69\xdc\x2f\x92\xa9\x02\xed\x48\x67\x32\x4c\x3a\xcb\xbb\x6b\x77\x1e\x1f\x96\x97\x57\xbf\x83\x73\x6a\xb4\x52\xf6\x2d\xe3\xaa\x1d\xdb\x6b\xf4\xf5\xed\xb5\x8f\xbe\x95\x6a\x11\xd3\x56\x68\x1a\x1e\x79\xc5\x33\x0b\xbf\x25\xff\x82\xed\xe7\xf1\xc5\xf8\xf3\x59\x5c\xd0\x27\xf0\x4e\x22\x85\xc9\x9b\x93\xc2\x51\xe7\xfb\x84\x53\xba\x17\x8f\x4e\xe5\xa5\x59\x28\x69\xd1\xb4\x30\xb8\x5b\xdf\x0c\xe8\x5c\xd8\x55\x2b\xd5\xf5\xee\x50\x6f\x6c\x3f\xa8\x84\x6d\xa4\xea\x7d\x99\x47\x60\xb5\x02\x86\xb6\xb5\x2a\x5a\xc1\x9d\x4d\xd7\xaa\xd9\x02\xe7\xe4\xfd\x78\x93\x3e\x83\x96\x80\xe0\x9e\x3b\xc4\xd4\x8a\xf6\x51\xdd\x43\xf5\x55\xe3\x04\xb3\x6b\xae\x03\x22\x53\x21\xda\xf4\xbf\xc7\x2f\xde\x20\x2b\x1a\x60\x1a\x1a\xc1\xcb\xaf\xb4\x76\x5d\x4d\xce\xef\x9a\x1e\x48\xff\xfe\x4f\x0b\x50\x49\x89\xc3\x8a\xec\x9a\x42\xac\xe4\xdb\xea\x31\xeb\xed\x03\x4a\xec\x44\xed\x55\xac\x78\x26\xbc\x0f\x95\x54\x35\xe8\xef\x2b\xa6\x5e\x5d\x11\x84\x60\x8f\xe9\x2d\x95\x34\x02\x3d\xcd\xb1\x1e\x52\x0c\x8d\xdd\x0f\x68\x85\x4e\x1d\x3d\xaa\xe1\xaf\xb8\xa1\x25\x23\x8a\x59\xb6\xc2\xcc\x97\x3f\x39\x35\x31\x39\x42\x7d\xf4\x90\x4e\x57\x89\xbc\x8b\xca\x30\x48\xd1\x35\x6d\x53\x7f\x4b\xb5\x2f\xf8\xb3\x7f\x84\xda\x38\x4d\x9b\xd8\xdd\x2e\x41\xdb\x1e\x88\x46\x30\x9d\x34\xb7\xf9\xbf\xae\x5c\x6a\x09\xf0\x0e\x50\x90\x62\x6a\xc6\x89\x0a\x6b\xd6\x5e\x5d\xf8\xbc\xa2\x18\xfb\xbf\xd6\x50\x89\xe6\x5b\x2e\x20\x82\xb0\xd5\x9e\x34\x1a\x94\x8b\xb7\x97\x53\xe5\xd1\xb6\x3d\x89\x00\xf4\xf3\x96\xc2\xf8\xcd\x1e\xa5\xd9\x94\xe5\xf3\xb5\x4a\x68\xe4\x8c\x06\xe4\x0b\xcf\xa9\x98\x2b\x59\x93\x32\x95\x5f\xec\x78\x47\x72\x03\x0a\xab\x03\x24\xff\xcd\xfd\x5c\x9b\x76\xfa\x80\xb5\x7e\x15\xe9\x5a\xb4\x01\x05\x19\xc2\xb6\x33\x27\x84\xed\x80\x1d\x93\x75\xad\x98\x6c\x10\x59\x4f\xff\x7b\x50\x9e\x96\xce\x1b\x38\xc1\x67\xb8\xd0\x2e\xe6\xaa\xc0\xb0\xcc\x6d\xcb\xd5\x22\x82\x65\x85\xcb\xf3\x32\x69\x14\x92\x76\xb6\xed\x29\x15\xbd\x55\xb9\x57\x0e\x37\x47\xf5\x0b\xcc\xdf\xcb\x81\x87\x95\x9c\xcb\x9f\x9c\x4a\xaa\xdd\xeb\x60\x3b\x19\x7f\x1e\x5f\x9c\xc5\x4d\xed\xb5\x3e\x5c\x89\x1d\xcc\xc4\x7a\xd0\x3b\xb3\x1b\x19\xb1\x5b\xa3\xfe\x30\x7c\x07\xa6\x70\x6c\x1e\x92\x7d\xf2\x68\xad\x4c\x6e\xb9\xce\xad\xc3\xcc\x36\x78\x46\xf2\x5f\x96\xae\xdd\xa9\x50\x3a\xbb\xd3\x57\xe5\x8b\x15\x83\x5e\x38\x07\xc8\x53\xd9\x01\xfa\x27\xdb\xdf\xe3\xc7\xb3\xdc\x31\x44\xf4\xc7\xa1\xe9\xa5\xf7\xd3\xb0\x34\xb9\xfe\x38\xb3\x2d\x86\xf7\xf6\x72\xf8\x91\x7a\xd7\x4d\x6c\x6b\xdd\x23\x36\xf1\x0a\xf9\xb4\x87\x69\x07\x8c\x37\x2b\xd1\x71\x56\x9a\x95\x6a\x70\xf9\x66\xd9\x3a\xf2\x50\x14\x65\xad\xad\xfd\x9b\xaf\xe7\xf8\xdb\xc9\x33\x20\xad\xde\xb5\x78\x98\x5f\xe7\xad\xd7\x9b\x3d\x0a\xa8\xc5\xa5\x94\xa6\x14\x91\xb2\xf5\x7d\xf1\xfb\x5d\x40\xdc\xaf\x58\xee\x47\xee\x70\x2e\x57\xea\x4e\x3a\x62\xac\x28\xb3\xd8\xc1\x55\xf1\x34\xb7\xba\x9e\xb3\xd1\x57\xbe\x02\x96\x31\x01\xb7\x2a\x2c\x5f\x10\x5a\x56\x2f\xa1\xb9\x3f\x67\xc9\x1a\x62\xd0\x54\x8c\xfe\x1b\x00\x00\xff\xff\x96\x10\x51\xd7\x0f\x2c\x00\x00") +var _deployKubernetes119AlphaDirectPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\x5b\x6f\xe3\xba\x11\x7e\xf7\xaf\x60\xd3\xf3\x70\x0e\x50\x59\xf1\xb6\x07\x68\x05\xf8\x21\x9b\xf8\xa4\x46\x37\x8e\x91\x64\xcf\x6b\xc0\x50\x63\x99\x35\x45\xaa\xe4\xc8\x1b\x6d\xd1\xff\x5e\x90\xba\x58\x37\x2b\xb6\x37\x17\x14\xf5\x3e\xac\x23\x91\x9c\x8f\x33\xc3\x6f\xe6\x93\xf5\x47\x72\x0d\x12\x34\x45\x08\xc9\x37\x8e\x6b\x72\x16\xd3\x0d\x90\x4d\x6a\x50\xc5\xfc\x3b\x9c\xfd\x89\x84\x8a\x48\x85\x04\x42\x8e\x7f\x18\x8d\x68\xc2\x7f\x07\x6d\xb8\x92\x01\xd9\x4e\x46\x1b\x2e\xc3\x80\xdc\x83\xde\x72\x06\x17\x8c\xa9\x54\xe2\x28\x06\xa4\x21\x45\x1a\x8c\x08\x11\xf4\x09\x84\xb1\xdf\x08\x49\x62\x88\x3d\x66\xf8\x98\x4b\x04\x31\x66\x2a\xf6\x43\x48\x84\xca\x62\x90\x18\x90\x90\x6b\x60\xe8\x25\x5a\x85\x29\x43\xae\xe4\x88\x10\x49\x63\x08\xaa\x89\x1e\x53\x12\xb5\x12\x02\x74\x71\xcf\x24\x94\xd5\x06\x8c\x3c\xcf\x6b\x40\xd4\x4f\x94\x8d\x69\x8a\x6b\xa5\xf9\x77\x6a\x17\x1d\x6f\xfe\x6a\xc6\x5c\xf9\x15\xf8\x3b\x25\xe0\x0d\x21\xc3\x33\x82\x96\x54\xd8\x41\x5b\x6e\x51\x81\xf6\xd8\x2a\xda\xb3\x01\x9d\x0a\x30\xc1\xc8\x23\x34\xe1\xd7\x5a\xa5\x89\x03\xe2\x91\xb3\xb3\x11\x21\x1a\x8c\x4a\x35\x83\xe2\x1a\xc8\x30\x51\x5c\xa2\x19\x11\xb2\x05\xfd\x54\x5c\x8e\x00\xdd\xff\xdf\x28\xb2\xb5\xfb\x26\xb8\xc9\x2f\x85\x20\x00\xc1\x7d\x4d\x93\x90\x16\x5f\x99\x06\xfb\xb5\x63\x93\x29\xa5\x43\x2e\xeb\x6e\xeb\x82\x10\x40\x0d\xbc\x15\x02\x83\x4a\xd3\x08\xf6\x1a\x67\x86\x17\x43\x18\x4d\x28\xe3\xc8\xf7\x41\xa9\x00\xec\x30\x15\x46\x5b\x50\x92\xea\x7e\x01\xf5\xa0\x50\x24\x2a\xec\x31\xdc\x99\x4a\x93\xc4\x74\x27\x6b\x48\x04\x67\xd4\x40\x5f\x24\x4f\xc8\xe8\x4b\x91\x1a\x04\xfd\x11\x89\xad\x53\x29\x41\x1f\x95\xc5\x89\xdd\x99\x41\x90\xb8\x55\x22\x8d\x4f\x0b\xe0\x51\xb1\x6a\x19\x64\x82\xf2\xf8\x70\xab\x45\xae\x1c\x9d\xab\x65\xa2\x0a\x6a\xf6\x1e\x98\x96\xb9\xc3\x58\x60\x0b\x1d\x0a\x38\x32\xdb\xbb\x7b\x91\x34\x31\x6b\x85\xe3\x97\x36\x55\x84\xac\x18\x3e\xb4\xab\xd7\xb2\x61\x4b\x40\x77\xc3\x2f\x98\x7a\x99\x46\xa4\x0a\x5f\x33\x28\x47\x2c\x77\x5a\xc5\xfa\xcc\x65\xc8\x65\xf4\x96\xb5\xd6\xf0\xe6\xd1\x56\x02\x86\x0a\x97\x12\x70\x07\x2b\x6b\xbd\xf4\xcf\xc0\x66\x46\x84\xd4\xaa\xef\xe1\x45\xd3\xa4\x4f\xff\x04\x86\x8e\x5b\x7a\x7b\x8f\x77\x69\x19\x6a\x04\xfb\x31\x71\x38\xd5\xdb\xf5\xca\x70\x14\xa1\xbf\x83\xdf\xdb\xdd\xe4\x47\xb6\x91\x26\x01\x66\x8d\x25\x4a\x63\x55\xe1\x35\x06\x64\x72\x7e\x7e\x7e\xee\x50\x20\xd5\x11\xe0\xb2\x71\xd5\x80\x00\x86\x4a\xe7\x38\x69\x92\xec\xb3\x79\xc2\x26\x3e\xd0\x5d\x31\xa0\xe6\xcc\x9c\xe0\xab\x49\xaf\xaf\x26\x6f\xed\x2b\x42\x30\x4b\x20\x20\x0b\x15\x82\xb5\xda\x71\x9e\xed\xc3\x76\xc7\xf9\x1e\x29\xc2\x2a\x15\xf7\xf0\xa1\xda\xa5\x74\x64\xd9\x0e\x06\x64\xd2\xf1\x53\x6c\x6b\xc6\x97\x1a\xae\x17\x5c\x77\x12\x70\x93\x67\xd4\x62\x00\x3f\x42\x9c\x08\x8a\x50\xa0\xaa\x39\xcd\x41\x92\x52\xa1\x23\xa0\x0a\x65\x2f\x10\xc3\x34\xb5\x71\xb2\x4b\x53\x2e\x41\x9b\x62\xb4\x68\xec\xf0\xc5\x3d\x9e\xb4\xcb\xbd\x13\xbf\xc1\xd3\x5a\xa9\x4d\x40\x78\x24\x95\x06\x37\xb4\x8c\x8d\x03\xb3\x5a\x71\xc9\x31\xdb\xc1\xb3\xd5\xfe\xa2\x73\xd5\x46\xf2\x5f\x29\xd7\x10\x5e\xa5\x9a\xcb\xe8\x9e\xad\x21\x4c\x05\x97\xd1\xdc\x2d\x5c\x5c\x9e\x3d\x03\x4b\x2d\xa6\xfa\xcc\x7c\xcd\xfb\x22\xf6\x0f\xa0\x63\xd3\xbc\xed\xe5\xa9\x30\x7b\x4e\x34\x18\xd3\xf4\x74\x39\x62\x03\x59\xd0\xb7\xc1\x1e\xff\x95\x1f\x95\x80\xa6\x36\xdb\xc8\x42\xe1\x5c\x76\xee\x6f\xa9\x48\xa1\x63\xca\x75\x41\x52\x9d\xf5\x5d\x5e\x51\x61\xa0\xbc\xb3\x0b\x74\xb9\x84\x55\x99\x71\x4c\x65\xb8\x5b\xd3\x23\x7e\x6a\xb4\x2f\x14\xa3\xc2\x7f\xe2\xd2\xaf\x02\x1f\x6a\xbe\xad\x81\xf6\x88\xb7\x9d\xfe\xb9\xfe\xa7\x50\x51\xc4\x65\xe4\xad\x94\x8e\x29\x4e\x11\x9e\xb1\x7e\x3b\x56\x21\x4c\x7b\x76\xef\x11\xaf\xd4\xd2\xd3\x54\xf2\xe7\xc0\xf7\x7d\x66\xb8\xdf\x4c\xb6\xb1\x51\x6c\x53\x9f\xa3\x21\xe2\x06\x75\x36\x2b\xe7\x22\x4b\x02\xdf\x3f\x1f\xbb\x7f\xc1\xae\x56\x14\xe3\x6d\x48\x79\x38\xfd\xe9\xe7\x7f\x7c\xfd\x3c\x7b\x5c\xdc\x5e\xcd\x1e\x17\x17\x37\xb3\x5f\xea\x63\x18\xfd\x8d\x0b\x98\xfa\x0c\x34\x1a\x9f\xd1\x31\xd3\x8d\x2d\xd8\xeb\xf5\x11\x28\x4c\x7b\xc8\x06\xb2\xf6\x88\x0d\x64\xf5\x11\xb9\x1f\x2d\x07\x4d\x7f\xfa\x79\x79\x33\xbb\x79\xbc\xbc\x9f\x3f\x5e\xdd\xcd\x7f\x9f\xdd\x75\x21\x15\xf4\xff\xc5\x69\xa6\x69\xb0\xa3\x75\xfb\x01\xb9\xad\x47\x2e\xe7\xbc\xe6\xfe\x46\xad\xf4\xf9\x4d\xab\xb8\x99\x41\x2b\x0e\x22\x2c\xda\x99\xfa\xa7\x55\xef\x9a\x37\xdd\xa4\x25\xc5\x75\xe0\x4e\xe7\xd8\x7a\xd7\x52\x56\x07\xcd\xc3\xec\xee\x66\xbe\xb8\x78\x98\xdf\x2e\x1e\xbf\xdc\x5e\x3f\x2e\x2f\x1e\xfe\xde\xc6\x14\x10\x1f\xe3\xc4\x47\xd0\x71\xf1\xc0\xc3\xe6\x52\x67\xa9\x3e\x5f\x75\x97\xea\x1e\xb9\xce\x42\xd7\xb7\x57\xb3\xcf\x5f\xaf\xbb\x73\x9f\x7f\x3d\xff\x5b\xce\x3b\x97\x8b\xe9\xce\xcd\x3c\xa6\x11\x04\xc4\x2d\xd8\x3e\x0f\x01\xa3\x92\xea\xac\x39\x76\x99\x0a\xb1\x54\x82\xb3\x2c\x20\xf3\xd5\x42\xe1\x52\x83\x01\xb9\x4b\x94\x5a\x75\x6a\x1d\xab\xaa\x90\x97\x90\xab\x53\xbb\x6c\xd5\xf5\xfa\x4a\xbb\x26\x21\xff\x18\x60\xa9\xe6\x98\x5d\x5a\xbd\xf6\x8c\x4d\x5a\xa4\xe1\xad\x14\xd9\x9d\x52\x2e\x97\x4d\x66\x10\xe2\x80\xa0\x4e\x77\xd1\xab\x85\xe2\x06\x8c\xb1\x5b\x72\xb1\x1e\x8c\x53\x2e\x15\x6f\x6c\x47\xda\xd8\x41\x6c\xaf\x14\xf3\xdd\xa9\xe8\xc0\x2f\xcf\xb2\x3b\x60\xfb\x66\x1a\xde\x99\x97\x88\x34\xe2\xd2\xb3\xd4\x00\xe8\x85\x5c\xef\x99\x8b\x71\xd2\x99\x8b\x71\x52\x9b\xe1\x11\xaa\xa3\x06\x6a\xcf\x2b\x9e\x6a\x65\x35\x16\xf2\x76\x75\xad\xe0\x33\x90\xa8\xa9\x18\x60\x45\x97\x2b\x34\x0c\x6d\xa5\x98\x1e\x42\x6c\xde\x0a\x28\xa6\x1a\xbc\x88\x22\x98\xe9\x83\x4a\x94\x50\x51\x36\x6d\x04\xc8\x8e\x33\x36\xe6\xe8\xe1\xde\x01\xc8\x63\x50\x29\x4e\x7f\x8d\x1b\x97\x43\x58\xd1\x54\xa0\xb7\x32\xb6\x51\x9b\xc2\x33\xfe\xa5\x71\xbf\x48\xa6\x0a\xb4\x23\x9d\xc9\x30\xe9\x2c\x6f\xaf\xdc\x79\xbc\x5f\x5e\x5c\xfe\x00\xe7\xd4\x68\xa5\x6c\x6b\xc6\x55\xb7\xb6\xd7\xe8\xeb\xdb\x6b\x1f\x7d\xab\xe4\x22\xa6\xad\x0e\x35\x3c\xf2\x8a\x47\x1a\x7e\x4b\x1d\x06\xdb\x4f\xe3\xf3\xf1\xa7\x93\xb8\xa0\x4f\xff\x1d\x45\x0a\x93\x37\x27\x85\x83\xce\xf7\x11\xa7\x74\x2f\x1e\x9d\xca\x0b\xb3\x50\xd2\xa2\x69\x61\x70\xb7\xbe\x1a\xd0\xb9\xee\xab\x56\xaa\xcb\xe1\xa1\xd6\xd9\x7e\x50\x09\xdb\x67\xd5\xdb\x36\x8f\xc0\x6a\x05\x0c\x6d\xe7\x55\x74\x8a\x3b\x9b\xae\x93\xb3\x05\xce\xa9\xff\xf1\x26\x7d\x02\x2d\x01\xc1\x3d\x96\x88\xa9\xd5\xf4\xa3\xba\x87\xea\xab\xc6\x09\x66\x57\x5c\x07\x44\xa6\x42\xb4\xe9\x7f\x8f\x5f\xbc\x41\x56\x34\xc0\x34\x34\x82\x97\x5f\x69\xed\xba\x9a\x9c\xdf\x35\x3d\x90\xfe\xfd\x9f\x16\xa0\x92\x12\x87\x05\xdb\x15\x85\x58\xc9\xb7\x95\x6b\xd6\xdb\x2f\x08\xb5\x23\xa5\x59\xb1\xe2\x89\xf0\x3e\x54\x71\xd5\xa0\xbf\xaf\xd6\x7a\x75\xc1\x10\x82\x3d\xa6\x37\x54\xd2\x08\xf4\x34\xc7\xfa\x83\x82\xa2\xe1\x9c\x01\x29\xd1\x29\xb3\x07\xe9\x81\x8a\x3a\x5a\x2a\xa3\x98\x65\x0b\xd0\x7c\xf9\x8b\x13\x1b\x93\x03\xc4\x49\x0f\x27\x75\x85\xca\xbb\x88\x10\x83\x14\x5d\x4f\x37\xf5\xb7\x54\xfb\x82\x3f\xf9\x07\x88\x91\xe3\xa4\x8b\xdd\xed\x12\xb4\x6d\x91\x68\x04\xd3\x49\x73\x9b\xff\xeb\xc2\xa6\x96\x00\xef\x00\x05\x29\xa6\x66\x9c\xa8\xb0\x66\xed\xd5\x75\xd1\x2b\x6a\xb5\xff\x6b\x89\x95\x68\xbe\xe5\x02\x22\x08\x5b\xdd\x4b\xa3\x7f\x39\x7f\x7b\xb5\x55\x1e\x6d\xdb\xb2\x08\x40\x3f\xef\x38\x8c\xdf\x6c\x61\x9a\x3d\x5b\x3e\x5f\xab\x84\x46\xce\x68\x40\x3e\xf3\x9c\xa9\xb9\x92\x35\xa5\x53\xf9\xc5\x8e\x77\x24\x37\x20\xc0\x3a\x40\xf2\x5f\xec\x4f\xb5\x69\xa7\x0f\x58\xeb\x17\x99\xae\x83\x1b\x10\x98\x21\x6c\x3b\x73\x42\xd8\x0e\xd8\x31\x59\xd7\x8a\xc9\x06\x91\xf5\xb4\xc7\x2f\xaa\xd7\xd2\x79\x03\x27\xf8\x04\x17\xda\xc5\x5c\x15\x18\x56\xc1\x6d\x35\x5b\x44\xb0\xac\x70\x79\x5e\x26\x8d\x42\xd2\xce\xb6\x3d\xa5\xa2\xb7\x2a\xf7\xaa\xe5\xe6\xa8\x7e\xfd\xf9\xa3\x1c\xf8\xb2\xd0\x73\xf9\x93\x53\x49\xb5\x7b\x1d\x6c\x27\xe3\x4f\xe3\xf3\x93\xb8\xa9\xbd\xd6\x87\x0b\xb5\x17\x33\xb1\x1e\xf4\xce\xec\x46\x46\xec\xd6\xa8\x3f\x4a\xdf\x81\x29\x1c\x9b\x87\x64\x9f\x7a\x5a\x2b\x93\x5b\xae\x73\xeb\x30\xb3\x0d\x9e\x91\xfc\x77\xa9\x2b\x77\x2a\x94\xce\x6e\xf5\x65\xf9\x5a\xc6\xa0\x17\x4e\x01\xf2\x58\x76\x80\xfe\xd1\xf6\xf7\xf8\xf1\x24\x77\x0c\x11\xfd\x61\x68\x7a\xe9\xfd\x38\x2c\x4d\xae\x3f\xcc\x6c\x8b\xe1\xbd\xbd\x1c\x7e\xa0\x1c\x76\x13\xdb\x52\xf8\x80\x4d\xbc\x42\x3e\xed\x61\xda\x01\xe3\xcd\x4a\x74\x98\x95\x66\xa5\x1a\x5c\xbe\x59\xb6\x0e\x3c\x14\x45\x59\x6b\x3f\x1a\x68\xbe\xdc\xe3\x6f\x27\x4f\x80\xb4\x7a\x53\xe3\x7e\x7e\x95\xb7\x5e\x6f\xf6\xa4\xa0\x16\x97\x52\xb9\x52\x44\xca\xd6\x77\xc5\xaf\x7f\x01\x71\xbf\x81\xb9\x9f\xc8\xc3\xb9\x5c\xa9\x5b\xe9\x88\xb1\xa2\xcc\x62\x07\x97\xc5\xc3\xde\xea\x7a\xce\x46\x5f\xf8\x0a\x58\xc6\x04\xdc\xa8\xb0\x7c\xbd\x68\x59\xbd\xc2\xe6\xfe\x9c\x25\x6b\x88\x41\x53\x31\xfa\x6f\x00\x00\x00\xff\xff\xdb\x89\xc9\x86\xd0\x2b\x00\x00") func deployKubernetes119AlphaDirectPmemCsiYamlBytes() ([]byte, error) { return bindataRead( @@ -180,12 +180,12 @@ func deployKubernetes119AlphaDirectPmemCsiYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "deploy/kubernetes-1.19-alpha/direct/pmem-csi.yaml", size: 11279, mode: os.FileMode(436), modTime: time.Unix(1608146561, 0)} + info := bindataFileInfo{name: "deploy/kubernetes-1.19-alpha/direct/pmem-csi.yaml", size: 11216, mode: os.FileMode(420), modTime: time.Unix(1608283282, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _deployKubernetes119AlphaLvmPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\x5b\x6f\xe3\xb8\x15\x7e\xf7\xaf\x60\xa7\xfb\xb0\x0b\x54\x56\x3c\xed\x02\xad\x00\x3f\x64\x12\x6f\x6a\x74\xe2\x18\x49\x66\x5f\x03\x86\x3a\x96\x59\x53\xa4\x4a\x1e\x79\xa2\x2d\xfa\xdf\x0b\x52\x17\xeb\x66\xf9\xb2\xb9\xa0\xa8\xe7\x61\x1c\x8a\xe4\xf9\x78\xce\xe1\x77\xce\x67\xfb\x8f\xe4\x06\x24\x68\x8a\x10\x92\xef\x1c\xd7\xe4\x53\x4c\x37\x40\x36\xa9\x41\x15\xf3\xdf\xe0\xd3\x9f\x48\xa8\x88\x54\x48\x20\xe4\xf8\x87\xd1\x88\x26\xfc\x57\xd0\x86\x2b\x19\x90\xed\x64\xb4\xe1\x32\x0c\xc8\x82\xc6\x60\x12\xca\x60\x14\x03\xd2\x90\x22\x0d\x46\x84\x08\xfa\x0c\xc2\xd8\x77\x84\x24\x31\xc4\x1e\x33\x7c\xcc\x25\x82\x18\x33\x15\xfb\x21\x24\x42\x65\x31\x48\x0c\x88\xd8\xc6\x5e\xa2\x55\x98\x32\xe4\x4a\x8e\x08\x91\x34\x86\xa0\x5a\x35\xf2\x3c\xaf\xdf\xf2\x03\xe8\x2d\x67\x70\xc9\x98\x4a\x25\xbe\x91\x79\x8f\x29\x89\x5a\x09\x01\xba\x78\xe6\x0e\x3b\x80\x4f\x3f\x53\x36\xa6\x29\xae\x95\xe6\xbf\x51\xbb\xe9\x78\xf3\x57\x33\xe6\xca\xaf\x90\xdf\x2b\xf1\x56\xee\xf2\xe0\x05\x41\x4b\x2a\xec\xa4\x2d\xb7\x90\x40\x7b\x6c\x15\xed\x41\xaf\x53\x01\x26\x18\x79\x84\x26\xfc\x46\xab\x34\x71\x28\x3c\xf2\xe9\xd3\x88\x10\x0d\x46\xa5\x9a\x41\x31\x06\x32\x4c\x14\x97\x68\x46\x84\x6c\x41\x3f\x17\xc3\x11\xa0\xfb\xff\x3b\x45\xb6\x76\xef\x04\x37\xf9\x50\x08\x02\x10\xdc\xdb\x34\x09\x69\xf1\x96\x69\xb0\x6f\x3b\x36\x99\x52\x3a\xe4\xb2\xee\xb3\x2e\x08\x01\xd4\xc0\x5b\x21\x30\xa8\x34\x8d\x60\xaf\x71\x66\x78\x31\x85\xd1\x84\x32\x8e\x7c\x1f\x94\x0a\xc0\x0e\x53\x61\xb4\x05\x25\xa9\x9e\x17\x50\x8f\x0a\x45\xa2\xc2\x1e\xc3\x9d\xa5\x34\x49\x4c\x77\xb1\x86\x44\x70\x46\x0d\xf4\x45\xf2\x8c\x74\xbe\x12\xa9\x41\xd0\xef\x9e\xd5\x3a\x95\x12\xf4\x49\x29\x9c\xd8\x63\x19\x04\x89\x5b\x25\xd2\xf8\xbc\xe8\x9d\x14\xa8\x96\x41\x26\x28\x8f\x8f\xb7\x5a\x24\xca\xc9\x89\x5a\x66\xa9\xa0\x66\xef\x6d\x69\x99\x3b\x8e\x02\xb6\xd0\xb9\xff\x27\xa6\x7a\xf7\x2c\x92\x26\x66\xad\x70\x7c\xe8\x50\x45\xc8\x8a\xe9\x43\xa7\x7a\x2d\x1b\x96\xfc\xbb\x07\x3e\x60\xea\x30\x87\x48\x15\xbe\x66\x50\x4e\xd8\xee\xbc\x5a\xf5\x85\xcb\x90\xcb\xe8\xcd\x4a\xac\xe1\xcd\x7b\xad\x04\x0c\x95\x2c\x25\xe0\x1e\x56\xd6\x74\xe9\x9c\x81\x93\x8c\x08\xa9\x15\xdd\xe3\xcb\xa5\x49\x9f\xff\x09\x0c\x1d\xb1\xf4\xf6\x1b\xef\xd2\x29\xd4\xa8\xf5\x03\x82\x70\xae\xab\xeb\x05\xe1\x24\x2a\x7f\x07\xa7\xb7\xdb\xc7\x0f\xeb\x1b\x4d\x02\xcc\x5a\x4a\x94\xc6\xaa\xaa\x6b\x0c\xc8\xe4\xe2\xe2\xe2\xc2\x41\x40\xaa\x23\xc0\x65\x63\xd4\x80\x00\x86\x4a\xe7\x20\x69\x92\xec\xb3\x79\xea\x09\x3e\xca\x51\x31\xa0\xe6\xcc\x9c\xe1\xa5\x49\xaf\x97\x26\x6f\xea\x25\x42\x30\x4b\x20\x20\x0b\x15\x82\x35\xd9\x71\x9b\x6d\xb9\x76\xf7\xf7\x01\x29\xc2\x2a\x15\x0f\xf0\x71\x02\xa5\x74\x61\xd9\xf6\x05\x64\xd2\xf1\x50\x6c\xcb\xc3\xd7\x1a\xa8\x03\x4e\x3b\x1d\xb5\xc9\xb3\x68\x31\x00\x1e\x21\x4e\x04\x45\x28\x20\xd5\xdc\xe5\xf0\x48\xa9\xd0\xd1\x4d\x05\xb1\x17\x85\x61\x9a\xda\x08\xd9\xad\x29\x97\xa0\x4d\x31\x5b\x34\x8e\x77\xf0\x80\xa7\x1f\x71\xef\xaa\xef\xf0\xbc\x56\x6a\x13\x10\x1e\x49\xa5\xc1\x4d\x2d\xa3\xe2\x90\xac\x56\x5c\x72\xcc\x76\xd8\x6c\x49\xbf\xec\x8c\xda\x18\xfe\x2b\xe5\x1a\xc2\xeb\x54\x73\x19\x3d\xb0\x35\x84\xa9\xe0\x32\x9a\xbb\x8d\x8b\xe1\xd9\x0b\xb0\xd4\x62\xaa\xaf\xcc\xf7\x7c\x28\xa2\xfe\x08\x3a\x36\xcd\xc7\x5e\x9e\x04\xb3\x97\x44\x83\x31\x4d\x37\x97\x33\x36\x90\x05\x7d\x07\xec\x71\x5e\xf9\x52\x09\x68\x6a\xf3\x8c\x2c\x14\xce\x65\xe7\xf9\x96\x8a\x14\x3a\xa6\x5c\xab\x23\xd5\xa7\xbe\xe1\x15\x15\x06\xca\x27\xbb\x28\x97\x5b\x58\x1d\x19\xc7\x54\x86\xbb\x3d\x3d\xe2\xa7\x46\xfb\x42\x31\x2a\xfc\x67\x2e\xfd\x2a\xea\xa1\xe6\xdb\x1a\x68\x8f\x78\xdb\xe9\x9f\xeb\x7f\xc6\x2a\x84\x69\xcf\xf1\x3c\xe2\x95\x72\x78\x9a\x4a\xfe\x12\xf8\xbe\xcf\x0c\xf7\x9b\xa9\x34\x36\x8a\x6d\xea\x6b\x34\x44\xdc\xa0\xce\x66\xe5\x5a\x64\x49\xe0\xfb\x17\x63\xf7\x2f\xd8\x51\x7f\x31\xdf\xc6\x8c\x87\xd3\x1f\x7e\xfc\xc7\xb7\x2f\xb3\xa7\xc5\xdd\xf5\xec\x69\x71\x79\x3b\xfb\xa9\x3e\x87\xd1\x5f\xb8\x80\xa9\xcf\x40\xa3\xf1\x19\x1d\x33\x8d\x8d\xe7\xa0\xb1\x3e\x03\x85\x69\x4f\xd9\x40\xd6\x9e\xb1\x81\xac\x3e\x23\x77\x94\xa5\x97\xe9\x0f\x3f\x2e\x6f\x67\xb7\x4f\x57\x0f\xf3\xa7\xeb\xfb\xf9\xaf\xb3\xfb\x2e\xa4\x82\xd3\xbf\x3a\xe5\x33\x0d\x76\x5c\x6d\x5f\x20\xb7\xf5\xd0\xe4\x74\xd6\x3c\xdf\xa8\x95\x1f\xbf\x68\x15\x37\x53\x64\xc5\x41\x84\x45\x6b\x52\x7f\xb5\x2a\x58\xf3\xa1\x5b\xb4\xa4\xb8\x0e\xdc\xf5\x1b\x5b\xef\x5a\x42\xea\xa0\x79\x9c\xdd\xdf\xce\x17\x97\x8f\xf3\xbb\xc5\xd3\xd7\xbb\x9b\xa7\xe5\xe5\xe3\xdf\xdb\x98\x02\xe2\x63\x9c\xf8\x08\x3a\x2e\x3e\xb3\xf0\x84\x8a\x3a\x5b\xf5\xf9\xaa\xbb\x55\xf7\x4e\x75\x36\xba\xb9\xbb\x9e\x7d\xf9\x76\xd3\x5d\xfb\xf2\xf3\xc5\xdf\x72\x62\xb9\x5a\x4c\x77\x6e\xe6\x31\x8d\x20\x20\x6e\xc3\x76\xc2\x07\x8c\x4a\xaa\xb3\xe6\xdc\x65\x2a\xc4\x52\x09\xce\xb2\x80\xcc\x57\x0b\x85\x4b\x0d\x06\xe4\x2e\x51\x6a\x85\xa7\x75\x6f\xaa\xea\x5c\x42\xae\xae\xe5\xb2\x55\xac\xeb\x3b\xed\x2a\x7f\xfe\x32\xc0\x52\xcd\x31\xbb\xb2\xaa\xeb\x05\x9b\xbc\x47\xc3\x3b\x29\xb2\x7b\xa5\x5c\x2e\x9b\xcc\x20\xc4\x01\x41\x9d\xee\xa2\x57\x0b\xc5\x2d\x18\x63\x8f\xe4\x62\x3d\x18\xa7\x5c\xf0\xdd\xda\xee\xb2\x71\x82\xd8\x8e\x14\xeb\xdd\xad\xe8\xc0\x2f\xef\xb2\xbb\x60\xfb\x56\x1a\xde\x59\x97\x88\x34\xe2\xd2\xb3\xd4\x00\xe8\x85\x5c\xef\x59\x8b\x71\xd2\x59\x8b\x71\x52\x5b\xe1\x11\xaa\xa3\x06\x6a\xcf\x2b\x3e\x98\xca\x6a\x2c\xe4\xed\xaa\x56\xc1\x67\x20\x51\x53\x31\x40\x7b\x2e\x57\x68\x18\xda\x52\x30\x3d\x86\xd8\xbc\x15\x50\x4c\x35\x78\x11\x45\x30\xd3\x47\x95\x28\xa1\xa2\x6c\xda\x08\x90\x9d\x67\x6c\xcc\xd1\xc3\xbd\x13\x90\xc7\xa0\x52\x9c\xfe\x1c\x37\x86\x43\x58\xd1\x54\xa0\xb7\x32\xb6\x01\x9b\xc2\x0b\xfe\xa5\xf1\xbc\x48\xa6\x0a\xb4\x23\x9d\xc9\x30\xe9\x2c\xef\xae\xdd\x7d\x7c\x58\x5e\x5e\xfd\x0e\xce\xa9\xd1\x4a\xd9\xb4\x8c\xab\x46\x6c\xaf\xd1\xd7\xb7\xd7\xbe\xfa\x56\x95\x45\x4c\x5b\x41\x69\x78\xe4\x15\x1f\x4c\xf8\x2d\xa5\x17\x6c\x3f\x8f\x2f\xc6\x9f\xcf\xe2\x82\x3e\x2d\x77\x12\x29\x4c\xde\x9c\x14\x8e\xba\xdf\x27\xdc\xd2\xbd\x78\x74\x2a\x2f\xcd\x42\x49\x8b\xa6\x85\xc1\x3d\xfa\x66\x40\xe7\x32\xae\xda\xa9\x2e\x6d\x87\x1a\x63\xfb\x42\x25\x6c\x23\x55\xef\xcb\x3c\x02\xab\x15\x30\xb4\xad\x55\xd1\x0a\xee\x6c\xba\x56\xcd\x16\x38\xa7\xe4\xc7\x9b\xf4\x19\xb4\x04\x04\xf7\xf9\x42\x4c\xad\x3e\x1f\xd5\x3d\x54\xdf\x35\x4e\x30\xbb\xe6\x3a\x20\x32\x15\xa2\x4d\xff\x7b\xfc\xe2\x0d\xb2\xa2\x01\xa6\xa1\x11\xbc\x7c\xa4\x75\xea\x6a\x71\xfe\xd4\xf4\x40\xfa\xf7\x7f\x5a\x80\x4a\x4a\x1c\x16\x62\xd7\x14\x62\x25\xdf\x50\x86\x59\x57\x1f\x10\x60\x27\x4a\xae\x62\xc7\x73\xb0\x7d\xa8\x92\xaa\xe1\x7e\x47\x0d\xf5\xea\x42\x20\x04\x7b\x3b\x6f\xa9\xa4\x11\xe8\xa9\xd8\xc6\x87\x54\x42\xe3\xdc\x03\xfa\xa0\x53\x3b\x8f\x6a\xf2\x2b\x3e\x68\x49\x87\x62\x95\xad\x2a\xf3\xe5\x4f\x4e\x41\x4c\x8e\x50\x1c\x3d\x44\xd3\x55\x1f\xef\xa2\x2c\x0c\x52\x74\x8d\xda\xd4\xdf\x52\xed\x0b\xfe\xec\x1f\xa1\x30\x4e\xd3\x23\xf6\xb4\x4b\xd0\xb6\xef\xa1\x11\x4c\x27\xcd\x63\xfe\xaf\xab\x95\x5a\x02\xbc\x03\x14\xa4\x98\x9a\x71\xa2\xc2\x9a\xb5\x57\x17\x3b\xaf\x28\xc0\xfe\xaf\x75\x53\xa2\xf9\x96\x0b\x88\x20\x6c\xb5\x24\x8d\xa6\xe4\xe2\xed\x25\x54\x79\xb5\x6d\x1f\x22\x00\xfd\xbc\x8d\x30\x7e\xb3\x2f\x69\x36\x62\xf9\x7a\xad\x12\x1a\x39\xa3\x01\xf9\xc2\x43\xae\xc1\xd5\x8a\x9a\x7c\xa9\xfc\x62\xe7\x3b\x92\x1b\x50\x55\x1d\x20\xf9\x37\xe9\xe7\xda\xb4\xcb\x07\xac\xf5\x2b\x47\xd7\x96\x0d\xa8\xc6\x10\xb6\x9d\x35\x21\x6c\x07\xec\x98\xac\x6b\xc5\x64\x83\xc8\x7a\x7a\xde\x83\x92\xb4\x74\xde\xc0\x0d\x3e\xc3\x85\x76\x33\x57\x05\x86\xa5\x6d\x5b\xa2\x16\x11\x2c\x2b\x5c\x9e\x97\x49\xa3\x90\xb4\xb3\x6d\x4f\xa9\xe8\xad\xca\xbd\x12\xb8\x39\xab\x5f\x54\xfe\x5e\x0e\x3c\xac\xde\x5c\xfe\xe4\x54\x52\x9d\x5e\x07\xdb\xc9\xf8\xf3\xf8\xe2\x2c\x6e\x6a\xef\xf5\xe1\xea\xeb\x60\x26\xd6\x83\xde\x59\xdd\xc8\x88\xdd\x1e\xf5\x0f\xc0\x77\x60\x0a\xc7\xe6\x21\xd9\x27\x89\xd6\xca\xe4\x96\xeb\xdc\x3a\xcc\x6c\x83\x77\x24\xff\x12\xe9\xda\xdd\x0a\xa5\xb3\x3b\x7d\x55\xfe\x62\x62\xd0\x0b\xe7\x00\x79\x2a\x3b\x40\xff\x64\xfb\x7b\xfc\x78\x96\x3b\x86\x88\xfe\x38\x34\xbd\xf4\x7e\x1a\x96\x26\xd7\x1f\x67\xb6\xc5\xf0\xde\x5e\x0e\x3f\x52\xe3\xba\x85\x6d\x7d\x7b\xc4\x21\x5e\x21\x9f\xf6\x30\xed\x80\xf1\x66\x25\x3a\xce\x4a\xb3\x52\x0d\x6e\xdf\x2c\x5b\x47\x5e\x8a\xa2\xac\xb5\xf5\x7e\xf3\x77\x37\xfe\x76\xf2\x0c\x48\xab\xdf\x51\x3c\xcc\xaf\xf3\xd6\xeb\x6d\xe4\x7f\x2d\x28\xa5\x28\xa5\x88\x94\xad\xef\x8b\x2f\xec\x02\xe2\xbe\xb6\x72\xdf\x64\x87\x73\xb9\x52\x77\xd2\xb1\x62\xc5\x97\x05\xfc\xab\xe2\xe3\xdb\x6a\x3c\xa7\xa2\xaf\x7c\x05\x2c\x63\x02\x6e\x55\x58\xfe\xec\x67\x59\xfd\xb4\xcc\xfd\x39\x4b\xd6\x10\x83\xa6\x62\xf4\xdf\x00\x00\x00\xff\xff\xf3\x1b\xdd\x42\xd9\x2b\x00\x00") +var _deployKubernetes119AlphaLvmPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\xc1\x6e\xef\xe1\x0e\xa8\xac\xf8\xda\x03\x5a\x01\x7e\xc8\x26\xbe\xd4\xe8\x26\x31\x92\xec\xbd\x06\x0c\x35\x96\x59\x53\xa4\x4a\x8e\xb4\xd1\x15\xfd\xdf\x0b\x52\x1f\xd6\x97\x15\xdb\x9b\x0f\x14\xf5\x3e\xac\x23\x91\x9c\x1f\x67\x86\xbf\x99\x9f\xac\x3f\x92\x2b\x90\xa0\x29\x42\x48\xbe\x71\xdc\x90\x4f\x31\xdd\x02\xd9\xa6\x06\x55\xcc\x7f\x87\x4f\x7f\x22\xa1\x22\x52\x21\x81\x90\xe3\x1f\x26\x13\x9a\xf0\xdf\x40\x1b\xae\x64\x40\xb2\xd9\x64\xcb\x65\x18\x90\x7b\xd0\x19\x67\x70\xce\x98\x4a\x25\x4e\x62\x40\x1a\x52\xa4\xc1\x84\x10\x41\x9f\x40\x18\xfb\x8d\x90\x24\x86\xd8\x63\x86\x4f\xb9\x44\x10\x53\xa6\x62\x3f\x84\x44\xa8\x3c\x06\x89\x01\x11\x59\xec\x25\x5a\x85\x29\x43\xae\xe4\x84\x10\x49\x63\x08\xea\x59\x1e\x53\x12\xb5\x12\x02\x74\x79\xcf\x24\x94\x35\x06\x4c\x3c\xcf\x6b\xe1\xd3\x4f\x94\x4d\x69\x8a\x1b\xa5\xf9\xef\xd4\x2e\x3a\xdd\xfe\xd5\x4c\xb9\xf2\x6b\xe4\x77\x4a\xc0\x5b\xe1\x85\x67\x04\x2d\xa9\xb0\x83\x32\x6e\x21\x81\xf6\xd8\x3a\xda\x83\x5e\xa7\x02\x4c\x30\xf1\x08\x4d\xf8\x95\x56\x69\xe2\x50\x78\xe4\xd3\xa7\x09\x21\x1a\x8c\x4a\x35\x83\xf2\x1a\xc8\x30\x51\x5c\xa2\x99\x10\x92\x81\x7e\x2a\x2f\x47\x80\xee\xff\x6f\x14\xd9\xc6\x7d\x13\xdc\x14\x97\x42\x10\x80\xe0\xbe\xa6\x49\x48\xcb\xaf\x4c\x83\xfd\xda\xb3\xc9\x94\xd2\x21\x97\x4d\x9f\xf5\x41\x08\xa0\x06\xde\x0a\x81\x41\xa5\x69\x04\x7b\x8d\x33\xc3\xcb\x21\x8c\x26\x94\x71\xe4\xfb\xa0\xd4\x00\x76\x98\x4a\xa3\x1d\x28\x49\x7d\xbf\x84\x7a\x50\x28\x12\x15\x0e\x18\xee\x4d\xa5\x49\x62\xfa\x93\x35\x24\x82\x33\x6a\x60\x28\x92\x27\xa4\xf3\x85\x48\x0d\x82\x7e\xf7\xac\xd6\xa9\x94\xa0\x8f\x4a\xe1\xc4\x6e\xcb\x20\x48\xcc\x94\x48\xe3\xd3\xa2\x77\x54\xa0\x3a\x06\x99\xa0\x3c\x3e\xdc\x6a\x99\x28\x47\x27\x6a\x95\xa5\x82\x9a\xbd\xa7\xa5\x63\xee\x30\x0a\xc8\xa0\x77\xfe\x8f\x4c\xf5\xfe\x5e\x24\x4d\xcc\x46\xe1\xf4\xa5\x4d\x95\x21\x2b\x87\x8f\xed\xea\xb5\x6c\x58\xf2\xef\x6f\xf8\x05\x53\x2f\x73\x88\x54\xe1\x6b\x06\xe5\x88\xe5\x4e\xab\x55\x9f\xb9\x0c\xb9\x8c\xde\xac\xc4\x1a\xde\x3e\xd7\x4a\xc0\x58\xc9\x52\x02\xee\x60\x6d\x4d\x57\xce\x19\xd9\xc9\x84\x90\x46\xd1\x3d\xbc\x5c\x9a\xf4\xe9\x9f\xc0\xd0\x11\xcb\x60\xbf\xf1\x2e\x9d\x42\x83\x5a\x3f\x20\x08\xa7\xba\xba\x59\x10\x8e\xa2\xf2\x77\x70\x7a\xb7\x7d\xfc\xb0\xbe\xd1\x24\xc0\xac\xa5\x44\x69\xac\xab\xba\xc6\x80\xcc\xce\xce\xce\xce\x1c\x04\xa4\x3a\x02\x5c\xb5\xae\x1a\x10\xc0\x50\xe9\x02\x24\x4d\x92\x7d\x36\x8f\xdd\xc1\x47\x39\x2a\x06\xd4\x9c\x99\x13\xbc\x34\x1b\xf4\xd2\xec\x4d\xbd\x44\x08\xe6\x09\x04\xe4\x46\x85\x60\x4d\xf6\xdc\x66\x5b\xae\xdd\xf9\xbd\x47\x8a\xb0\x4e\xc5\x3d\x7c\x9c\x40\xa9\x5c\x58\xb5\x7d\x01\x99\xf5\x3c\x14\xdb\xf2\xf0\xa5\x01\xea\x05\xa7\x1d\x8f\xda\x14\x59\x74\x33\x02\x1e\x21\x4e\x04\x45\x28\x21\x35\xdc\xe5\xf0\x48\xa9\xd0\xd1\x4d\x0d\x71\x10\x85\x61\x9a\xda\x08\xd9\xa5\x29\x97\xa0\x4d\x39\x5a\xb4\xb6\xf7\xe2\x06\x8f\xdf\xe2\xde\x59\xdf\xe0\x69\xa3\xd4\x36\x20\x3c\x92\x4a\x83\x1b\x5a\x45\xc5\x21\x59\xaf\xb9\xe4\x98\xef\xb0\xd9\x92\x7e\xde\xbb\x6a\x63\xf8\xaf\x94\x6b\x08\x2f\x53\xcd\x65\x74\xcf\x36\x10\xa6\x82\xcb\x68\xe9\x16\x2e\x2f\x2f\x9e\x81\xa5\x16\x53\x73\x66\xb1\xe6\x7d\x19\xf5\x07\xd0\xb1\x69\xdf\xf6\x8a\x24\x58\x3c\x27\x1a\x8c\x69\xbb\xb9\x1a\xb1\x85\x3c\x18\xda\xe0\x80\xf3\xaa\x8f\x4a\xac\xd0\x57\xda\x1e\x19\x5c\xca\xde\xfd\x8c\x8a\x14\x7a\xa6\x5c\xab\x23\xd5\xa7\xa1\xcb\x6b\x2a\x0c\x54\x77\x76\x51\xae\x96\xb0\x3a\x32\x8e\xa9\x0c\x77\x6b\x7a\xc4\x4f\x8d\xf6\x85\x62\x54\xf8\x4f\x5c\xfa\x75\xd4\x43\xcd\xb3\x06\x68\x8f\x78\xd9\xfc\xcf\xcd\x3f\x85\x8a\x22\x2e\x23\x6f\xad\x74\x4c\x71\x8e\xf0\x8c\xcd\xdb\xb1\x0a\x61\x3e\xb0\x7b\x8f\x78\x95\x5a\x9e\xa7\x92\x3f\x07\xbe\xef\x33\xc3\xfd\x76\xa6\x4d\x8d\x62\xdb\xe6\x1c\x0d\x11\x37\xa8\xf3\x45\x35\x17\x59\x12\xf8\xfe\xd9\xd4\xfd\x0b\x76\x95\xa1\x1c\x6f\x43\xca\xc3\xf9\x0f\x3f\xfe\xe3\xeb\xe7\xc5\xe3\xcd\xed\xe5\xe2\xf1\xe6\xfc\x7a\xf1\x53\x73\x0c\xa3\xbf\x72\x01\x73\x9f\x81\x46\xe3\x33\x3a\x65\xba\xb5\x05\x7b\xbd\x39\x02\x85\xe9\x0e\xd9\x42\xde\x1d\xb1\x85\xbc\x39\xa2\xf0\xa3\x65\x9f\xf9\x0f\x3f\xae\xae\x17\xd7\x8f\x17\xf7\xcb\xc7\xcb\xbb\xe5\x6f\x8b\xbb\x3e\xa4\x92\xf2\xbf\x38\x61\x34\x0f\x76\x54\x6e\x3f\x20\xb3\x66\xe4\x0a\xb6\x6b\xef\x6f\xd2\x49\x9f\x5f\xb5\x8a\xdb\x19\xb4\xe6\x20\xc2\xb2\x73\x69\x7e\x3a\x05\xae\x7d\xd3\x4d\x5a\x51\xdc\x04\xee\x74\x4e\xad\x77\x2d\x5f\xf5\xd0\x3c\x2c\xee\xae\x97\x37\xe7\x0f\xcb\xdb\x9b\xc7\x2f\xb7\x57\x8f\xab\xf3\x87\xbf\x77\x31\x05\xc4\xc7\x38\xf1\x11\x74\x5c\x3e\xd2\xb0\xb9\xd4\x5b\x6a\xc8\x57\xfd\xa5\xfa\x47\xae\xb7\xd0\xd5\xed\xe5\xe2\xf3\xd7\xab\xfe\xdc\xe7\x5f\xce\xfe\x56\xf0\xce\xc5\xcd\x7c\xe7\x66\x1e\xd3\x08\x02\xe2\x16\xec\x9e\x87\x80\x51\x49\x75\xde\x1e\xbb\x4a\x85\x58\x29\xc1\x59\x1e\x90\xe5\xfa\x46\xe1\x4a\x83\x01\xb9\x4b\x94\x46\x5d\xea\x1c\xab\xba\x78\x57\x90\xeb\x53\xbb\xea\xd4\xf2\xe6\x4a\xbb\xc6\xa0\xf8\x18\x60\xa9\xe6\x98\x5f\x58\x51\xf6\x8c\x6d\x5a\xa4\xe1\xad\x14\xf9\x9d\x52\x2e\x97\x4d\x6e\x10\xe2\x80\xa0\x4e\x77\xd1\x6b\x84\xe2\x1a\x8c\xb1\x5b\x72\xb1\x1e\x8d\x53\xa1\x07\xaf\x6d\xf3\xd9\xda\x41\x6c\xaf\x94\xf3\xdd\xa9\xe8\xc1\xaf\xce\xb2\x3b\x60\xfb\x66\x1a\xde\x9b\x97\x88\x34\xe2\xd2\xb3\xd4\x00\xe8\x85\x5c\xef\x99\x8b\x71\xd2\x9b\x8b\x71\xd2\x98\xe1\x11\xaa\xa3\x16\x6a\xcf\x2b\x9f\x5b\xe5\x0d\x16\xf2\x76\x45\xad\xe4\x33\x90\xa8\xa9\x18\x61\x45\x97\x2b\x34\x0c\x6d\xa5\x98\x1f\x42\x6c\xde\x1a\x28\xa6\x1a\xbc\x88\x22\x98\xf9\x83\x4a\x94\x50\x51\x3e\x6f\x05\xc8\x8e\x33\x36\xe6\xe8\xe1\xde\x01\xc8\x63\x50\x29\xce\x7f\x89\x5b\x97\x43\x58\xd3\x54\xa0\xb7\x36\xb6\x3f\x9b\xc3\x33\xfe\xa5\x75\xbf\x4c\xa6\x1a\xb4\x23\x9d\xd9\x38\xe9\xac\x6e\x2f\xdd\x79\xbc\x5f\x9d\x5f\x7c\x07\xe7\x34\x68\xa5\xea\x69\xa6\x75\x9f\xb6\xd7\xe8\xeb\xdb\xeb\x1e\x7d\x2b\xda\x22\xa6\xad\xde\x34\x3c\xf2\xca\xe7\x16\x7e\x47\x08\x06\xd9\xcf\xd3\xb3\xe9\xcf\x27\x71\xc1\x90\xd4\x3b\x8a\x14\x66\x6f\x4e\x0a\x07\x9d\xef\x23\x4e\xe9\x5e\x3c\x3a\x95\xe7\xe6\x46\x49\x8b\xa6\x83\xc1\xdd\xfa\x6a\x40\x17\x2a\xaf\x5e\xa9\xa9\x7c\xc7\xfa\x66\xfb\x41\x25\x6c\x9f\xd5\x6c\xdb\x3c\x02\xeb\x35\x30\xb4\x9d\x57\xd9\x29\xee\x6c\xba\x4e\xce\x16\x38\x27\xf4\xa7\xdb\xf4\x09\xb4\x04\x04\xf7\xf8\x21\xa6\x56\xbe\x4f\x9a\x1e\x6a\xae\x1a\x27\x98\x5f\x72\x1d\x10\x99\x0a\xd1\xa5\xff\x3d\x7e\xf1\x46\x59\xd1\x00\xd3\xd0\x0a\x5e\x71\xa5\xb3\xeb\x7a\x72\x71\xd7\x0c\x40\xfa\xf7\x7f\x3a\x80\x2a\x4a\x1c\xd7\x69\x97\x14\x62\x25\xdf\x50\xa5\x59\x57\xbf\xa0\xcf\x8e\x54\x64\xe5\x8a\xa7\x60\xfb\x50\xa1\xd5\xc0\xfd\x8e\x12\xeb\xd5\x75\x42\x08\xf6\x74\x5e\x53\x49\x23\xd0\x73\x91\xc5\xdf\x29\x22\x5a\x6e\x19\x91\x0f\xbd\xd2\x7a\x90\x06\xa8\xe9\xa2\xa3\x2c\xca\x59\xb6\xe8\x2c\x57\x3f\x39\x81\x31\x3b\x40\x90\x0c\xf0\x50\x5f\x9c\xbc\x8b\xf0\x30\x48\xd1\xf5\x71\x73\x3f\xa3\xda\x17\xfc\xc9\x3f\x40\x80\x1c\x27\x57\xec\x6e\x57\xa0\x6d\x5b\x44\x23\x98\xcf\xda\xdb\xfc\x5f\x17\x33\x8d\x04\x78\x07\x28\x48\x31\x35\xd3\x44\x85\x0d\x6b\xaf\xae\x85\x5e\x51\x9f\xfd\x5f\xcb\xaa\x44\xf3\x8c\x0b\x88\x20\xec\x74\x2c\xad\x9e\xe5\xec\xed\x15\x56\x75\xb4\x6d\x9b\x22\x00\xfd\xa2\xcb\x30\x7e\xbb\x6d\x69\xf7\x69\xc5\x7c\xad\x12\x1a\x39\xa3\x01\xf9\xcc\x43\xae\xc1\x95\x92\x86\xba\xa9\xfd\x62\xc7\x3b\x92\x1b\x11\x5d\x3d\x20\xc5\xef\xf0\xa7\xda\xb4\xd3\x47\xac\x0d\x0b\x4b\xd7\xb5\x8d\x88\xca\x10\xb2\xde\x9c\x10\xb2\x11\x3b\x26\xef\x5b\x31\xf9\x28\xb2\x81\x96\xf8\x45\xc5\x5a\x39\x6f\xe4\x04\x9f\xe0\x42\xbb\x98\xab\x02\xe3\xca\xb7\xab\x60\xcb\x08\x56\x15\xae\xc8\xcb\xa4\x55\x48\xba\xd9\xb6\xa7\x54\x0c\x56\xe5\x41\x85\xdc\x1e\x35\xac\x39\xbf\x97\x03\x5f\x16\x77\x2e\x7f\x0a\x2a\xa9\x77\xaf\x83\x6c\x36\xfd\x79\x7a\x76\x12\x37\x75\xd7\xfa\x70\x71\xf6\x62\x26\x36\x83\xde\x9b\xdd\xca\x88\xdd\x1a\xcd\xc7\xe7\x3b\x30\xa5\x63\x8b\x90\xec\x53\x4c\x1b\x65\x0a\xcb\x4d\x6e\x1d\x67\xb6\xd1\x33\x52\xfc\x04\x75\xe9\x4e\x85\xd2\xf9\xad\xbe\xa8\xde\xb7\x18\xf5\xc2\x29\x40\x1e\xab\x0e\xd0\x3f\xda\xfe\x1e\x3f\x9e\xe4\x8e\x31\xa2\x3f\x0c\xcd\x20\xbd\x1f\x87\xa5\xcd\xf5\x87\x99\xed\x30\xbc\xb7\x97\xc3\x0f\x94\xc0\x6e\x62\x57\xfe\x1e\xb0\x89\x57\xc8\xa7\x3d\x4c\x3b\x62\xbc\x5d\x89\x0e\xb3\xd2\xae\x54\xa3\xcb\xb7\xcb\xd6\x81\x87\xa2\x2c\x6b\xdd\xc7\x01\xed\xb7\x76\xfc\x6c\xf6\x04\x48\xeb\xb7\x30\xee\x97\x97\x45\xeb\xf5\x36\x4f\x07\x1a\x41\xa9\x34\x2b\x45\xa4\x6c\x73\x57\xfe\xdc\x17\x10\xf7\xa3\x97\xfb\x1d\x3c\x5c\xca\xb5\xba\x95\x8e\x15\x6b\xbe\x2c\xe1\x5f\x94\x4f\x77\xeb\xeb\x05\x15\x7d\xe1\x6b\x60\x39\x13\x70\xad\xc2\xea\xa5\xa1\x55\xfd\x62\x9a\xfb\x73\x91\x6c\x20\x06\x4d\xc5\xe4\xbf\x01\x00\x00\xff\xff\xa5\xeb\x20\x7d\x9d\x2b\x00\x00") func deployKubernetes119AlphaLvmPmemCsiYamlBytes() ([]byte, error) { return bindataRead( @@ -200,12 +200,12 @@ func deployKubernetes119AlphaLvmPmemCsiYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "deploy/kubernetes-1.19-alpha/lvm/pmem-csi.yaml", size: 11225, mode: os.FileMode(436), modTime: time.Unix(1608146563, 0)} + info := bindataFileInfo{name: "deploy/kubernetes-1.19-alpha/lvm/pmem-csi.yaml", size: 11165, mode: os.FileMode(420), modTime: time.Unix(1608283284, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _deployKubernetes119DirectPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\xc1\x6e\xef\xe1\x0e\xa8\xac\x78\xdb\x03\x5a\x01\x7e\xc8\x26\xbe\xd4\xe8\xc6\x31\x92\xec\xbd\x06\x0c\x35\x96\x59\x53\x24\x4b\x8e\xbc\xf1\x15\xfd\xdf\x0b\x52\x92\xad\x2f\xcb\x1f\xcd\x07\x8a\xf3\x3e\xac\x23\x72\x38\xbf\xf9\xe0\xcc\x6f\x6c\xff\x91\xdc\x80\x04\x43\x11\x62\xf2\x9d\xe3\x92\x7c\x4a\xe9\x0a\xc8\x2a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x18\x50\xcd\x7f\x05\x63\xb9\x92\x11\x59\x8f\x06\x2b\x2e\xe3\x88\xcc\x68\x0a\x56\x53\x06\x83\x14\x90\xc6\x14\x69\x34\x20\x44\xd0\x67\x10\xd6\xbd\x23\x44\xa7\x90\x06\xcc\xf2\x21\x97\x08\x62\xc8\x54\x1a\xc6\xa0\x85\xda\xa4\x20\x31\x22\x31\x37\xc0\x30\xd0\x46\xc5\x19\x43\xae\xe4\x80\x10\x49\x53\x88\xb6\x82\x83\x20\x08\xba\x95\x3f\x80\x59\x73\x06\x97\x8c\xa9\x4c\xe2\xdb\x21\x08\x98\x92\x68\x94\x10\x60\x8a\x35\x6f\x72\x0f\x44\xf3\x4c\xd9\x90\x66\xb8\x54\x86\xff\x46\xdd\xa1\xc3\xd5\x5f\xed\x90\xab\x70\x0b\xfe\x5e\x89\x37\x74\x5a\x00\x2f\x08\x46\x52\xe1\x36\xad\xb9\x43\x05\x26\x60\x8b\x64\x8f\x01\x26\x13\x60\xa3\x41\x40\xa8\xe6\x37\x46\x65\xda\x03\x09\xc8\xa7\x4f\x03\x42\x0c\x58\x95\x19\x06\xc5\x33\x90\xb1\x56\x5c\xa2\x1d\x10\xb2\x06\xf3\x5c\x3c\x4e\x00\xfd\xff\xdf\x29\xb2\xa5\x7f\x27\xb8\xcd\x1f\xc5\x20\x00\xc1\xbf\xcd\x74\x4c\x8b\xb7\xcc\x80\x7b\xdb\xd2\xc9\x94\x32\x31\x97\x55\xb7\xb5\x41\x08\xa0\x16\xde\x0a\x81\x45\x65\x68\x02\x7b\x95\x33\xcb\x8b\x2d\x8c\x6a\xca\x38\xf2\x7d\x50\xb6\x00\x76\x98\x0a\xa5\x0d\x28\x7a\xbb\x5e\x40\x3d\x2a\x14\x5a\xc5\x1d\x8a\x5b\xa2\x54\x6b\xdb\x16\x36\xa0\x05\x67\xd4\x42\x57\x24\xcf\xc8\xe8\x2b\x91\x59\x04\xf3\x11\x89\x6d\x32\x29\xc1\x9c\x94\xc5\xda\x59\x66\x11\x24\xae\x95\xc8\xd2\xf3\x02\x78\x52\xac\x1a\x0a\x99\xa0\x3c\x3d\x5e\x6b\x91\x2b\x27\xe7\x6a\x99\xa8\x82\xda\xbd\x17\xa6\xa1\xee\xb8\x2a\xb0\x86\x56\x09\x38\x31\xdb\xdb\xb6\x48\xaa\xed\x52\xe1\xf0\x90\x51\x45\xc8\x8a\xed\x7d\x56\xbd\x96\x0e\xd7\x02\xda\x06\x1f\x50\x75\xb8\x8c\x48\x15\xbf\x66\x50\x4e\x38\xee\xbc\x8e\xf5\x85\xcb\x98\xcb\xe4\x2d\x7b\xad\xe5\xf5\xab\xad\x04\xf4\x35\x2e\x25\xe0\x1e\x16\x4e\x7b\xe9\x9f\x1e\x63\x06\x84\x54\xba\xef\xf1\x4d\xd3\x66\xcf\xff\x04\x86\xbe\xb6\x74\x72\x8f\x77\xa1\x0c\x95\x02\xfb\x31\x71\x38\xd7\xdb\xd5\xce\x70\x52\x41\x7f\x07\xbf\x37\xd9\xe4\x47\xd2\x48\xab\x81\x39\x65\x5a\x19\xdc\x76\x78\x83\x11\x19\x5d\x5c\x5c\x5c\x78\x14\x48\x4d\x02\x38\xaf\x3d\xb5\x20\x80\xa1\x32\x39\x4e\xaa\xf5\x3e\x9d\x67\x18\xf1\x81\xee\x4a\x01\x0d\x67\xf6\x0c\x5f\x8d\x3a\x7d\x35\x7a\x6b\x5f\x11\x82\x1b\x0d\x11\x99\xa9\x18\x9c\xd6\x96\xf3\x1c\x0f\xdb\x5d\xe7\x07\xa4\x08\x8b\x4c\x3c\xc0\x87\xce\x2e\xa5\x23\x4b\x3a\x18\x91\x51\xcb\x4f\xa9\xeb\x19\x5f\x2b\xb8\x0e\xb8\xee\x2c\xe0\x36\xcf\xa8\x59\x0f\x7e\x84\x54\x0b\x8a\x50\xa0\xaa\x38\xcd\x43\x92\x52\xa1\x2f\x40\x5b\x94\x9d\x40\x2c\x33\xd4\xc5\xc9\x1d\x4d\xb9\x04\x63\x8b\xdd\xa2\x66\xe1\x41\x1b\xcf\xb2\x72\xaf\xe0\x77\x78\x5e\x2a\xb5\x8a\x08\x4f\xa4\x32\xe0\xb7\x96\xb1\xf1\x60\x16\x0b\x2e\x39\x6e\x76\xf0\x5c\xb7\xbf\x6c\x3d\x75\x91\xfc\x57\xc6\x0d\xc4\xd7\x99\xe1\x32\x79\x60\x4b\x88\x33\xc1\x65\x32\xf5\x07\x17\x8f\x27\x2f\xc0\x32\x87\xa9\x2a\x99\x9f\xf9\x50\xc4\xfe\x11\x4c\x6a\xeb\xcb\x41\x9e\x0a\x93\x17\x6d\xc0\xda\xba\xa7\xcb\x1d\x2b\xd8\x44\x5d\x06\x76\xf8\xaf\x7c\x29\x0d\x86\xba\x6c\x23\x33\x85\x53\xd9\x5a\x5f\x53\x91\x41\x4b\x95\x67\x41\x52\x7d\xea\x7a\xbc\xa0\xc2\x42\xb9\xb2\x0b\x74\x79\x84\x9b\x32\xd3\x94\xca\x78\x77\x66\x40\xc2\xcc\x9a\x50\x28\x46\x45\xf8\xcc\x65\xb8\x0d\x7c\x6c\xf8\xba\x02\x3a\x20\xc1\x7a\xfc\xe7\xea\x9f\xa9\x8a\x61\xdc\x61\x5e\x40\x82\x72\x58\x1e\x67\x92\xbf\x44\x61\x18\x32\xcb\xc3\x7a\x36\x0d\xad\x62\xab\xaa\x8c\x81\x84\x5b\x34\x9b\x49\x29\x8b\x4c\x47\x61\x78\x31\xf4\xff\xa2\x5d\x33\x28\xf6\xbb\x98\xf1\x78\xfc\xc3\x8f\xff\xf8\xf6\x65\xf2\x34\xbb\xbb\x9e\x3c\xcd\x2e\x6f\x27\x3f\x55\xf7\x30\xfa\x0b\x17\x30\x0e\x19\x18\xb4\x21\xa3\x43\x66\xb0\xb6\x0e\x06\xab\x3b\x50\xd8\xe6\x96\x15\x6c\x9a\x3b\x56\xb0\xa9\xee\xc8\x1d\xe5\x8a\xcc\xf8\x87\x1f\xe7\xb7\x93\xdb\xa7\xab\x87\xe9\xd3\xf5\xfd\xf4\xd7\xc9\x7d\x1b\x52\x51\xdf\xbf\xfa\xa1\x68\x1c\xed\xea\xb6\x7b\x81\x5c\x57\x43\x93\x17\xb5\xba\x7d\x83\x46\x7e\xfc\x62\x54\x5a\x4f\x91\x05\x07\x11\x17\x7c\xa5\xfa\x6a\x34\xb4\xfa\xa2\x17\x9a\x53\x5c\x46\xfe\xfa\x0d\x9d\x77\x5d\x4d\x6a\xa1\x79\x9c\xdc\xdf\x4e\x67\x97\x8f\xd3\xbb\xd9\xd3\xd7\xbb\x9b\xa7\xf9\xe5\xe3\xdf\x9b\x98\x22\x12\x62\xaa\x43\x04\x93\x16\x9f\x68\x04\x42\x25\xad\xa3\xba\x7c\xd5\x3e\xaa\x7d\xa7\x5a\x07\xdd\xdc\x5d\x4f\xbe\x7c\xbb\x69\xcb\xbe\xfc\x7c\xf1\xb7\xbc\xb0\x5c\xcd\xc6\x3b\x37\xf3\x94\x26\x10\x11\x7f\x60\x33\xe1\x23\x46\x25\x35\x9b\xfa\xde\x79\x26\xc4\x5c\x09\xce\x36\x11\x99\x2e\x66\x0a\xe7\x06\x2c\xc8\x5d\xa2\x54\xda\x4f\xe3\xde\x6c\x3b\x75\x09\x79\x7b\x2d\xe7\x8d\xc6\x5d\x3d\x69\xc7\x02\xf2\x97\x05\x96\x19\x8e\x9b\x2b\x37\x90\xbd\x60\xbd\xee\xd1\xf8\x4e\x8a\xcd\xbd\x52\x3e\x97\xed\xc6\x22\xa4\x11\x41\x93\xed\xa2\x57\x09\xc5\x2d\x58\xeb\x4c\xf2\xb1\xee\x8d\x53\x3e\x0b\xde\x3a\xca\x59\xb3\x20\x75\x4f\x0a\x79\x7f\x2b\x5a\xf0\xcb\xbb\xec\x2f\xd8\x3e\x49\xcb\x5b\x72\x5a\x64\x09\x97\x81\x2b\x0d\x80\x41\xcc\xcd\x1e\x59\x4c\x75\x4b\x16\x53\x5d\x91\x08\x08\x35\x49\x0d\x75\xb3\x7c\xf9\x98\xd3\x38\x76\x25\x7d\x7c\x4c\x81\x0a\x16\x40\x31\x33\x10\x24\x14\xc1\x8e\x1f\x95\x56\x42\x25\x9b\x71\xcd\xd1\x6e\x9f\x75\xb1\xc3\x00\xf7\x6e\x40\x9e\x82\xca\x70\xfc\x73\x5a\x7b\x1c\xc3\x82\x66\x02\x83\x85\x75\x8c\x6a\x0c\x2f\xf8\x97\xda\x7a\x91\x14\x5b\xd0\xbe\x78\x8c\x9a\x59\xed\xa6\x90\x84\x19\x37\x43\x59\x9e\x04\xc5\x38\x1e\x36\x26\x9b\x68\xfd\x79\x78\x31\xfc\x7c\x56\x9a\x77\xcd\x2e\x27\xe5\xfb\xe8\xcd\xf3\xfd\xa8\xd4\x3d\x21\x01\xf7\xe2\x31\x99\xbc\xb4\x33\x25\x1d\x9a\x06\x06\xbf\xf4\xcd\x82\xc9\x67\x96\xed\x49\xd5\x51\xae\x8f\xf6\xb9\x17\x2a\xe1\x38\x42\x95\x72\x04\x04\x16\x0b\x60\xe8\x58\x43\xc1\x72\x76\x3a\x3d\x0b\x71\xb5\xdb\x4f\xae\xc3\x55\xf6\x0c\x46\x02\x82\x1f\xa9\x53\xea\xe6\xd1\x41\xd5\x43\xd5\x53\x53\x8d\x9b\x6b\x6e\x22\x22\x33\x21\x9a\x95\x6d\x8f\x5f\x82\xde\x0b\x6f\x81\x19\xa8\x05\x2f\x7f\xd2\xb0\x7a\x2b\x9c\xaf\xda\x0e\x48\xff\xfe\x4f\x03\x50\x79\xdb\xfb\x87\x8d\x6b\x0a\xa9\x92\x6f\x3b\x6a\x38\x6f\x1f\x18\x32\x4e\x1c\x2b\x8a\x13\xcf\x84\xf7\xa1\xd3\x42\x05\xfa\xfb\xce\x09\xaf\x4e\x76\x63\x70\xd7\xf4\x96\x4a\x9a\x80\x19\xe7\x58\x0f\x91\xe1\x9a\xf5\x3d\x34\xb8\xd5\x5a\x8e\xe2\xb2\xdb\xda\xd0\x60\xc8\x85\xd4\xfc\xee\xfa\x69\x3a\xff\xc9\x13\xe5\xd1\x11\xc4\xba\xa3\xe8\xb4\x49\xf6\xbb\x10\x68\x8b\x14\x3d\x1f\x19\x87\x6b\x6a\x42\xc1\x9f\xc3\x23\x88\xf4\x69\xb4\xdb\x59\x3b\x07\xc3\x40\x22\x4d\x60\x3c\xaa\x9b\xf9\xff\x4e\xca\x2b\x09\xf0\x0e\x50\x90\x62\x66\x87\x5a\xc5\x15\x6d\xaf\xce\xe9\x5f\x71\xce\xf8\x5d\x8f\x07\xda\xf0\x35\x17\x90\x40\xdc\xa0\x27\x35\x82\x72\xf1\xf6\x93\x42\x79\xb5\x1d\x27\x11\x80\x61\x4e\x29\x6c\x58\xe7\x28\x75\x52\x96\xcb\x1b\xa5\x69\xe2\x95\x46\xe4\x0b\xcf\x4b\x31\x57\x92\x8a\xb6\x5f\xdc\x7e\x5f\xe4\x7a\x86\x87\x16\x90\xfc\xeb\xe4\x73\x75\x3a\xf1\x1e\x6d\xdd\x03\x92\xa7\x68\x3d\xc3\x51\x0c\xeb\x96\x4c\x0c\xeb\x1e\x3d\x76\xd3\xd6\x62\x37\xbd\xc8\x3a\xf8\xef\xc1\xc9\xab\x74\x5e\xcf\x0d\x3e\xc3\x85\xee\x30\xdf\x05\x4e\x9b\xe0\x8a\x08\x96\x1d\x2e\xcf\x4b\x5d\x6b\x24\xcd\x6c\xdb\xd3\x2a\x3a\xbb\x72\xe7\x84\x58\xdf\xd5\xd9\x1b\xfe\xe7\x1a\x78\x78\x92\xf3\xf9\x93\x97\x92\xad\xf5\x26\x5a\x8f\x86\x9f\x87\x17\x67\xd5\xa6\xe6\x59\x1f\x3e\x89\x1d\xcc\xc4\x6a\xd0\x5b\xd2\xb5\x8c\xd8\x9d\x51\xfd\x9c\x77\x07\xa6\x70\x6c\x1e\x92\x7d\xe3\xd1\x52\xd9\x5c\x73\xb5\xb6\xf6\x57\xb6\xde\x3b\x92\x7f\x69\x72\xed\x6f\x85\x32\x9b\x3b\x73\x55\xfe\x66\xa0\xd7\x0b\xe7\x00\x79\x2a\x19\x60\x78\xb2\xfe\x3d\x7e\x3c\xcb\x1d\x7d\x85\xfe\x38\x34\x9d\xe5\xfd\x34\x2c\xf5\x5a\x7f\x9c\xda\x46\x85\x0f\xf6\xd6\xf0\x23\xe7\x5d\x2f\xd8\x9c\x75\x8f\x30\xe2\x15\xf2\x69\x4f\xa5\xed\x51\x5e\xef\x44\xc7\x69\xa9\x77\xaa\xde\xe3\xeb\x6d\xeb\xc8\x4b\x51\xb4\xb5\xe6\xec\x5f\xff\xe5\x49\xb8\x1e\x3d\x03\xd2\xed\xcf\x08\x1e\xa6\xd7\x39\xf5\x7a\xb3\x8f\x02\x2a\x71\x29\x47\x53\x8a\x48\xd9\xf2\xbe\xf8\x6a\x2a\x22\xfe\x0b\x1a\xff\xfd\x6d\x3c\x95\x0b\x75\x27\x7d\x61\xdc\x96\xcc\xbc\xea\x7c\xe5\x0b\x60\x1b\x26\xe0\x56\xc5\xe5\x6f\x5c\xe6\xdb\xdf\x51\xf9\x3f\x27\x7a\x09\x29\x18\x2a\x06\xff\x0d\x00\x00\xff\xff\xc5\x8a\x47\x12\xd2\x2a\x00\x00") +var _deployKubernetes119DirectPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\xc1\x6e\xef\xe1\x0e\xa8\xac\x78\xdb\x03\x5a\x01\x7e\xc8\x26\xbe\xd4\xe8\xc6\x31\x92\xec\xbd\x06\x0c\x35\x96\x59\x53\x24\x4b\x8e\xbc\xf1\x15\xfd\xdf\x0b\x52\x92\xad\x2f\xcb\x1f\x97\x0f\x14\xf5\x3e\xac\x43\x71\x38\xbf\xf9\xe0\xcc\x6f\x6c\xff\x91\xdc\x80\x04\x43\x11\x62\xf2\x9d\xe3\x92\x7c\x4a\xe9\x0a\xc8\x2a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x18\x50\xcd\x7f\x05\x63\xb9\x92\x11\x59\x8f\x06\x2b\x2e\xe3\x88\x3c\x80\x59\x73\x06\x97\x8c\xa9\x4c\xe2\x20\x05\xa4\x31\x45\x1a\x0d\x08\x11\xf4\x19\x84\x75\xef\x08\xd1\x29\xa4\x01\xb3\x7c\xc8\x25\x82\x18\x32\x95\x86\x31\x68\xa1\x36\x29\x48\x8c\x48\xcc\x0d\x30\x0c\xb4\x51\x71\xc6\x90\x2b\x39\x20\x44\xd2\x14\xa2\xad\x60\xc0\x94\x44\xa3\x84\x00\x53\x3c\xb3\x9a\xb2\xca\x86\x41\x10\x04\x35\x88\xe6\x99\xb2\x21\xcd\x70\xa9\x0c\xff\x8d\xba\x43\x87\xab\xbf\xda\x21\x57\xe1\x16\xfc\xbd\x12\xf0\x86\x90\xe1\x05\xc1\x48\x2a\xdc\xa6\x35\x77\xa8\xc0\x04\x6c\x91\xec\x31\xc0\x64\x02\x6c\x34\x08\x08\xd5\xfc\xc6\xa8\x4c\x7b\x20\x01\xf9\xf4\x69\x40\x88\x01\xab\x32\xc3\xa0\x58\x03\x19\x6b\xc5\x25\xda\x01\x21\x6b\x30\xcf\xc5\x72\x02\xe8\xff\xff\x4e\x91\x2d\xfd\x3b\xc1\x6d\xbe\x14\x83\x00\x04\xff\x36\xd3\x31\x2d\xde\x32\x03\xee\x6d\x4b\x27\x53\xca\xc4\x5c\x56\xdd\xd6\x06\x21\x80\x5a\x78\x2b\x04\x16\x95\xa1\x09\xec\x55\xce\x2c\x2f\xb6\x30\xaa\x29\xe3\xc8\xf7\x41\xd9\x02\xd8\x61\x2a\x94\x36\xa0\xe8\xed\xf3\x02\xea\x51\xa1\xd0\x2a\xee\x50\xdc\x12\xa5\x5a\xdb\xb6\xb0\x01\x2d\x38\xa3\x16\xba\x22\x79\x46\x46\x5f\x89\xcc\x22\x98\x8f\x48\x6c\x93\x49\x09\xe6\xa4\x2c\xd6\xce\x32\x8b\x20\x71\xad\x44\x96\x9e\x17\xc0\x93\x62\xd5\x50\xc8\x04\xe5\xe9\xf1\x5a\x8b\x5c\x39\x39\x57\xcb\x44\x15\xd4\xee\xbd\x30\x0d\x75\xc7\x55\x81\x35\xb4\x4a\xc0\x89\xd9\xde\xb6\x45\x52\x6d\x97\x0a\x87\x87\x8c\x2a\x42\x56\x6c\xef\xb3\xea\xb5\x74\xb8\x16\xd0\x36\xf8\x80\xaa\xc3\x65\x44\xaa\xf8\x35\x83\x72\xc2\x71\xe7\x75\xac\x2f\x5c\xc6\x5c\x26\x6f\xd9\x6b\x2d\xaf\x5f\x6d\x25\xa0\xaf\x71\x29\x01\xf7\xb0\x70\xda\x4b\xff\xf4\x18\x33\x20\xa4\xd2\x7d\x8f\x6f\x9a\x36\x7b\xfe\x27\x30\xf4\xb5\xa5\x93\x7b\xbc\x0b\x65\xa8\x14\xd8\x8f\x89\xc3\xb9\xde\xae\x76\x86\x93\x0a\xfa\x3b\xf8\xbd\xc9\x26\x3f\x92\x46\x5a\x0d\xcc\x29\xd3\xca\xe0\xb6\xc3\x1b\x8c\xc8\xe8\xe2\xe2\xe2\xc2\xa3\x40\x6a\x12\xc0\x79\x6d\xd5\x82\x00\x86\xca\xe4\x38\xa9\xd6\xfb\x74\x9e\x61\xc4\x07\xba\x2b\x05\x34\x9c\xd9\x33\x7c\x35\xea\xf4\xd5\xe8\xad\x7d\x45\x08\x6e\x34\x44\x64\xa6\x62\x70\x5a\x5b\xce\x73\x3c\x6c\x77\x9d\x1f\x90\x22\x2c\x32\xf1\x00\x1f\x3a\xbb\x94\x8e\x2c\xe9\x60\x44\x46\x2d\x3f\xa5\xae\x67\x7c\xad\xe0\x3a\xe0\xba\xb3\x80\xdb\x3c\xa3\x66\x3d\xf8\x11\x52\x2d\x28\x42\x81\xaa\xe2\x34\x0f\x49\x4a\x85\xbe\x00\x6d\x51\x76\x02\xb1\xcc\x50\x17\x27\x77\x34\xe5\x12\x8c\x2d\x76\x8b\x9a\x85\x07\x6d\x3c\xcb\xca\xbd\x82\xdf\xe1\x79\xa9\xd4\x2a\x22\x3c\x91\xca\x80\xdf\x5a\xc6\xc6\x83\x59\x2c\xb8\xe4\xb8\xd9\xc1\x73\xdd\xfe\xb2\xb5\xea\x22\xf9\xaf\x8c\x1b\x88\xaf\x33\xc3\x65\xf2\xc0\x96\x10\x67\x82\xcb\x64\xea\x0f\x2e\x96\x27\x2f\xc0\x32\x87\xa9\x2a\x99\x9f\xf9\x50\xc4\xfe\x11\x4c\x6a\xeb\x8f\x83\x3c\x15\x26\x2f\xda\x80\xb5\x75\x4f\x97\x3b\x56\xb0\x89\xba\x0c\xec\xf0\x5f\xf9\x52\x1a\x0c\x75\xd9\x46\x66\x0a\xa7\xb2\xf5\x7c\x4d\x45\x06\x2d\x55\x9e\x05\x49\xf5\xa9\x6b\x79\x41\x85\x85\xf2\xc9\x2e\xd0\xe5\x11\x6e\xca\x4c\x53\x2a\xe3\xdd\x99\x01\x09\x33\x6b\x42\xa1\x18\x15\xe1\x33\x97\xe1\x36\xf0\xb1\xe1\xeb\x0a\xe8\x80\x04\xeb\xf1\x9f\xab\x7f\x0a\x95\x24\x5c\x26\xc1\x42\x99\x94\xe2\x18\xe1\x05\xab\x8f\x53\x15\xc3\xb8\xc3\xfa\x80\x04\xe5\x2c\x3d\xce\x24\x7f\x89\xc2\x30\x64\x96\x87\xf5\x64\x1b\x5a\xc5\x56\x55\x19\x03\x09\xb7\x68\x36\x93\x52\x16\x99\x8e\xc2\xf0\x62\xe8\xff\x45\xbb\x5e\x51\xec\x77\x21\xe5\xf1\xf8\x87\x1f\xff\xf1\xed\xcb\xe4\x69\x76\x77\x3d\x79\x9a\x5d\xde\x4e\x7e\xaa\xee\x61\xf4\x17\x2e\x60\x1c\x32\x30\x68\x43\x46\x87\xcc\xd4\x4c\x70\xeb\xd5\x1d\x28\x6c\x73\xcb\x0a\x36\xcd\x1d\x2b\xd8\x54\x77\xe4\x7e\x74\x35\x68\xfc\xc3\x8f\xf3\xdb\xc9\xed\xd3\xd5\xc3\xf4\xe9\xfa\x7e\xfa\xeb\xe4\xbe\x0d\xa9\x28\xff\x5f\xfd\xcc\x34\x8e\x76\x65\xdd\xbd\x40\xae\xab\x91\xcb\x6b\x5e\xdd\xbe\x41\x23\x7d\x7e\x31\x2a\xad\x67\xd0\x82\x83\x88\x0b\x3a\x53\x7d\x35\xfa\x5d\xfd\xa1\x17\x9a\x53\x5c\x46\xfe\x76\x0e\x9d\x77\x5d\xc9\x6a\xa1\x79\x9c\xdc\xdf\x4e\x67\x97\x8f\xd3\xbb\xd9\xd3\xd7\xbb\x9b\xa7\xf9\xe5\xe3\xdf\x9b\x98\x22\x12\x62\xaa\x43\x04\x93\x16\x1f\x78\xb8\x5c\x6a\x1d\xd5\xe5\xab\xf6\x51\xed\x2b\xd7\x3a\xe8\xe6\xee\x7a\xf2\xe5\xdb\x4d\x5b\xf6\xe5\xe7\x8b\xbf\xe5\x75\xe7\x6a\x36\xde\xb9\x99\xa7\x34\x81\x88\xf8\x03\x9b\xf7\x21\x62\x54\x52\xb3\xa9\xef\x9d\x67\x42\xcc\x95\xe0\x6c\x13\x91\xe9\x62\xa6\x70\x6e\xc0\x82\xdc\x25\x4a\xa5\x3b\x35\xae\xd5\xb6\x91\x97\x90\xb7\xb7\x76\xde\xe8\xeb\xd5\x93\x76\x24\x21\x7f\x59\x60\x99\xe1\xb8\xb9\x72\xf3\xda\x0b\xd6\xcb\x22\x8d\xef\xa4\xd8\xdc\x2b\xe5\x73\xd9\x6e\x2c\x42\x1a\x11\x34\xd9\x2e\x7a\x95\x50\xdc\x82\xb5\xce\x24\x1f\xeb\xde\x38\xe5\xa3\xe2\xad\x63\xa4\x35\x0b\x52\xb7\x52\xc8\xfb\x5b\xd1\x82\x5f\xde\x65\x7f\xc1\xf6\x49\x5a\xde\x92\xd3\x22\x4b\xb8\x0c\x5c\x69\x00\x0c\x62\x6e\xf6\xc8\x62\xaa\x5b\xb2\x98\xea\x8a\x44\x40\xa8\x49\x6a\xa8\x9b\xd5\xcd\xc7\x9c\xc6\xb1\xab\xf8\xe3\x63\x0a\x54\xb0\x00\x8a\x99\x81\x20\xa1\x08\x76\xfc\xa8\xb4\x12\x2a\xd9\x8c\x6b\x8e\x76\xfb\xac\x8b\x1d\x06\xb8\x77\x03\xf2\x14\x54\x86\xe3\x9f\xd3\xda\x72\x0c\x0b\x9a\x09\x0c\x16\xd6\x11\xae\x31\xbc\xe0\x5f\x6a\xcf\x8b\xa4\xd8\x82\xf6\xc5\x63\xd4\xcc\x6a\x37\xa4\x24\xcc\xb8\x11\xcb\xf2\x24\x28\xa6\xf5\xb0\x31\xf8\x44\xeb\xcf\xc3\x8b\xe1\xe7\xb3\xd2\xbc\x6b\xb4\x39\x29\xdf\x47\x6f\x9e\xef\x47\xa5\xee\x09\x09\xb8\x17\x8f\xc9\xe4\xa5\x9d\x29\xe9\xd0\x34\x30\xf8\x47\xdf\x2c\x98\x7c\xa4\xd9\x9e\x54\x9d\xf4\xfa\x58\xa1\x7b\xa1\x12\x8e\x42\x54\x19\x49\x40\x60\xb1\x00\x86\x8e\x54\x14\x24\x68\xa7\xd3\x93\x14\x57\xbb\xfd\x60\x3b\x5c\x65\xcf\x60\x24\x20\xf8\x89\x3b\xa5\x6e\x5c\x1d\x54\x3d\x54\x3d\x35\xd5\xb8\xb9\xe6\x26\x22\x32\x13\xa2\x59\xd9\xf6\xf8\x25\xe8\xbd\xf0\x16\x98\x81\x5a\xf0\xf2\x95\x86\xd5\x5b\xe1\xfc\xa9\xed\x80\xf4\xef\xff\x34\x00\x95\xb7\xbd\x7f\x16\xb9\xa6\x90\x2a\xf9\xb6\x93\x88\xf3\xf6\x81\x19\xe4\xc4\xa9\xa3\x38\xf1\x4c\x78\x1f\x3a\x4c\x54\xa0\xbf\xef\x18\xf1\xea\x5c\x38\x06\x77\x4d\x6f\xa9\xa4\x09\x98\x71\x8e\xf5\x77\x72\xe5\x9a\x73\x7a\x58\x72\xab\xf3\x1c\x45\x75\xb7\xa5\xa3\x41\xa0\x0b\xa9\xf9\xdd\xf5\xd3\x74\xfe\x93\xe7\xd1\xa3\x23\x78\x77\x47\x4d\x6a\x73\xf0\x77\xe1\xd7\x16\x29\x7a\xba\x32\x0e\xd7\xd4\x84\x82\x3f\x87\x47\xf0\xec\xd3\x58\xb9\xb3\x76\x0e\x86\x81\x44\x9a\xc0\x78\x54\x37\xf3\x7f\x9d\xb3\x57\x12\xe0\x1d\xa0\x20\xc5\xcc\x0e\xb5\x8a\x2b\xda\x5e\x9d\xf2\xbf\xe2\x18\xf2\x7f\x3d\x3d\x68\xc3\xd7\x5c\x40\x02\x71\x83\xbd\xd4\xf8\xcb\xc5\xdb\x0f\x12\xe5\xd5\x76\x94\x45\x00\x86\x39\xe3\xb0\x61\x9d\xc2\xd4\x39\x5b\x2e\x6f\x94\xa6\x89\x57\x1a\x91\x2f\x3c\xaf\xd4\x5c\x49\x2a\xda\x7e\x71\xfb\x7d\x91\xeb\x99\x2d\x5a\x40\xf2\x2f\xa3\xcf\xd5\xe9\xc4\x7b\xb4\x75\xcf\x4f\x9e\xc1\xf5\xcc\x4e\x31\xac\x5b\x32\x31\xac\x7b\xf4\xd8\x4d\x5b\x8b\xdd\xf4\x22\xeb\xa0\xc7\x07\x07\xb3\xd2\x79\x3d\x37\xf8\x0c\x17\xba\xc3\x7c\x17\x38\x6d\xc0\x2b\x22\x58\x76\xb8\x3c\x2f\x75\xad\x91\x34\xb3\x6d\x4f\xab\xe8\xec\xca\x9d\x03\x64\x7d\x57\x67\x6f\xf8\xdd\x35\xf0\xf0\xa0\xe7\xf3\x27\x2f\x25\x5b\xeb\x4d\xb4\x1e\x0d\x3f\x0f\x2f\xce\xaa\x4d\xcd\xb3\x3e\x7c\x50\x3b\x98\x89\xd5\xa0\xb7\xa4\x6b\x19\xb1\x3b\xa3\xfa\x29\xf1\x0e\x4c\xe1\xd8\x3c\x24\xfb\xa6\xa7\xa5\xb2\xb9\xe6\x6a\x6d\xed\xaf\x6c\xbd\x77\x24\xff\xca\xe5\xda\xdf\x0a\x65\x36\x77\xe6\xaa\xfc\xc5\x41\xaf\x17\xce\x01\xf2\x54\x32\xc0\xf0\x64\xfd\x7b\xfc\x78\x96\x3b\xfa\x0a\xfd\x71\x68\x3a\xcb\xfb\x69\x58\xea\xb5\xfe\x38\xb5\x8d\x0a\x1f\xec\xad\xe1\x47\x8e\xc3\x5e\xb0\x39\x0a\x1f\x61\xc4\x2b\xe4\xd3\x9e\x4a\xdb\xa3\xbc\xde\x89\x8e\xd3\x52\xef\x54\xbd\xc7\xd7\xdb\xd6\x91\x97\xa2\x68\x6b\xcd\x8f\x06\xea\xbf\x5b\x09\xd7\xa3\x67\x40\xba\xfd\x11\xc2\xc3\xf4\x3a\xa7\x5e\x6f\xf6\x49\x41\x25\x2e\xe5\xe4\x4a\x11\x29\x5b\xde\x17\x5f\x6c\x45\xc4\x7f\xbd\xe3\xbf\xfd\x8d\xa7\x72\xa1\xee\xa4\x2f\x8c\xdb\x92\x99\x57\x9d\xaf\x7c\x01\x6c\xc3\x04\xdc\xaa\xb8\xfc\x85\xcc\x7c\xfb\x2b\x2c\xff\xe7\x44\x2f\x21\x05\x43\xc5\xe0\xbf\x01\x00\x00\xff\xff\x99\xe3\x8f\xb5\x93\x2a\x00\x00") func deployKubernetes119DirectPmemCsiYamlBytes() ([]byte, error) { return bindataRead( @@ -220,12 +220,12 @@ func deployKubernetes119DirectPmemCsiYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "deploy/kubernetes-1.19/direct/pmem-csi.yaml", size: 10962, mode: os.FileMode(436), modTime: time.Unix(1608146551, 0)} + info := bindataFileInfo{name: "deploy/kubernetes-1.19/direct/pmem-csi.yaml", size: 10899, mode: os.FileMode(420), modTime: time.Unix(1608283277, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _deployKubernetes119FakePmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\xc1\x6e\xef\xe1\x0e\xa8\xac\x78\xdb\x03\x5a\x01\x7e\xc8\x26\xbe\xd4\xe8\xc6\x31\x92\xec\xbd\x06\x0c\x35\x96\x59\x53\x24\x4b\x8e\xbc\xf1\x15\xfd\xdf\x0b\x52\x92\xad\x2f\xcb\x1f\xcd\x07\x8a\xf3\x3e\xac\x23\x72\x38\xbf\xf9\xe0\xcc\x6f\x6c\xff\x91\xdc\x80\x04\x43\x11\x62\xf2\x9d\xe3\x92\x7c\x4a\xe9\x0a\xc8\x2a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x18\x50\xcd\x7f\x05\x63\xb9\x92\x11\x59\x8f\x06\x2b\x2e\xe3\x88\xcc\x68\x0a\x56\x53\x06\x83\x14\x90\xc6\x14\x69\x34\x20\x44\xd0\x67\x10\xd6\xbd\x23\x44\xa7\x90\x06\xcc\xf2\x21\x97\x08\x62\xc8\x54\x1a\xc6\xa0\x85\xda\xa4\x20\x31\x22\x0b\xba\x82\x40\x1b\x15\x67\x0c\xb9\x92\x03\x42\x24\x4d\x21\xda\x8a\x0d\x82\x20\xe8\x56\xfd\x00\x66\xcd\x19\x5c\x32\xa6\x32\x89\x6f\xa5\x3f\x60\x4a\xa2\x51\x42\x80\x29\xd6\xbc\xb9\x3d\x00\xcd\x33\x65\x43\x9a\xe1\x52\x19\xfe\x1b\x75\x87\x0e\x57\x7f\xb5\x43\xae\xc2\x2d\xf4\x7b\x25\xde\xcc\x61\x01\xbc\x20\x18\x49\x85\xdb\xb4\xe6\x0e\x13\x98\x80\x2d\x92\x3d\xf0\x4d\x26\xc0\x46\x83\x80\x50\xcd\x6f\x8c\xca\xb4\x87\x11\x90\x4f\x9f\x06\x84\x18\xb0\x2a\x33\x0c\x8a\x67\x20\x63\xad\xb8\x44\x3b\x20\x64\x0d\xe6\xb9\x78\x9c\x00\xfa\xff\xbf\x53\x64\x4b\xff\x4e\x70\x9b\x3f\x8a\x41\x00\x82\x7f\x9b\xe9\x98\x16\x6f\x99\x01\xf7\xb6\xa5\x93\x29\x65\x62\x2e\xab\x4e\x6b\x83\x10\x40\x2d\xbc\x15\x02\x8b\xca\xd0\x04\xf6\x2a\x67\x96\x17\x5b\x18\xd5\x94\x71\xe4\xfb\xa0\x6c\x01\xec\x30\x15\x4a\x1b\x50\xf4\x76\xbd\x80\x7a\x54\x28\xb4\x8a\x3b\x14\xb7\x44\xa9\xd6\xb6\x2d\x6c\x40\x0b\xce\xa8\x85\xae\x48\x9e\x91\xcf\x57\x22\xb3\x08\xe6\xfd\xd3\xda\x64\x52\x82\x39\x29\x87\xb5\xb3\xcb\x22\x48\x5c\x2b\x91\xa5\xe7\x85\xef\xa4\x48\x35\x14\x32\x41\x79\x7a\xbc\xd6\x22\x53\x4e\xce\xd4\x32\x4d\x05\xb5\x7b\xaf\x4b\x43\xdd\x71\x35\x60\x0d\xad\x02\x70\x62\xae\xb7\x6d\x91\x54\xdb\xa5\xc2\xe1\x21\xa3\x8a\x90\x15\xdb\xfb\xac\x7a\x2d\x1d\xae\xfc\xb7\x0d\x3e\xa0\xea\x70\x11\x91\x2a\x7e\xcd\xa0\x9c\x70\xdc\x79\xdd\xea\x0b\x97\x31\x97\xc9\xdb\x75\x59\xcb\xeb\x17\x5b\x09\xe8\x6b\x5a\x4a\xc0\x3d\x2c\x9c\xee\xd2\x3b\x3d\xa6\x0c\x08\xa9\xf4\xdd\xe3\x1b\xa6\xcd\x9e\xff\x09\x0c\x7d\x65\xe9\xe4\x1c\xef\x42\x16\x2a\xc5\xf5\x23\xa2\x70\xae\xaf\xab\x3d\xe1\xa4\x62\xfe\x0e\x5e\x6f\x72\xc8\x8f\x23\x8f\x56\x03\x73\xaa\xb4\x32\xb8\xed\xec\x06\x23\x32\xba\xb8\xb8\xb8\xf0\x18\x90\x9a\x04\x70\x5e\x7b\x6a\x41\x00\x43\x65\x72\x94\x54\xeb\x7d\x3a\x4f\x36\xe1\xc3\x5c\x95\x02\x1a\xce\xec\x19\x7e\x1a\x75\xfa\x69\xf4\xb6\x7e\x22\x04\x37\x1a\x22\x32\x53\x31\x38\x9d\x2d\xc7\x39\xe6\xb5\xbb\xc4\x0f\x48\x11\x16\x99\x78\x80\x0f\x9c\x54\x4a\x27\x96\xf4\x2f\x22\xa3\x96\x8f\x52\xd7\x25\xbe\x56\x50\x1d\x70\xdb\x19\xb0\x6d\x9e\x49\xb3\x1e\xf4\x08\xa9\x16\x14\xa1\xc0\x54\x71\x98\x07\x24\xa5\x42\x5f\x74\xb6\x18\x3b\x61\x58\x66\xa8\x8b\x91\x3b\x9a\x72\x09\xc6\x16\xbb\x45\xcd\xbe\x83\x16\x9e\x61\xe3\x5e\xb1\xef\xf0\xbc\x54\x6a\x15\x11\x9e\x48\x65\xc0\x6f\x2d\xe3\xe2\xa1\x2c\x16\x5c\x72\xdc\xec\xc0\xb9\xde\x7e\xd9\x7a\xea\xa2\xf8\xaf\x8c\x1b\x88\xaf\x33\xc3\x65\xf2\xc0\x96\x10\x67\x82\xcb\x64\xea\x0f\x2e\x1e\x4f\x5e\x80\x65\x0e\x53\x55\x32\x3f\xf3\xa1\x88\xfb\x23\x98\xd4\xd6\x97\x83\x3c\x0d\x26\x2f\xda\x80\xb5\x75\x3f\x97\x3b\x56\xb0\x89\xba\x0c\xec\xf0\x5e\xf9\x52\x1a\x0c\x75\x99\x46\x66\x0a\xa7\xb2\xb5\xbe\xa6\x22\x83\x96\x2a\xcf\x79\xa4\xfa\xd4\xf5\x78\x41\x85\x85\x72\x65\x17\xe6\xf2\x08\x37\x51\xa6\x29\x95\xf1\xee\xcc\x80\x84\x99\x35\xa1\x50\x8c\x8a\xf0\x99\xcb\x70\x1b\xf6\xd8\xf0\x75\x05\x74\x40\x82\xf5\xf8\xcf\xd5\x3f\x53\x15\xc3\xb8\xc3\xbc\x80\x04\xe5\x60\x3c\xce\x24\x7f\x89\xc2\x30\x64\x96\x87\xf5\x5c\x1a\x5a\xc5\x56\x55\x19\x03\x09\xb7\x68\x36\x93\x52\x16\x99\x8e\xc2\xf0\x62\xe8\xff\x45\xbb\x06\x50\xec\x77\x31\xe3\xf1\xf8\x87\x1f\xff\xf1\xed\xcb\xe4\x69\x76\x77\x3d\x79\x9a\x5d\xde\x4e\x7e\xaa\xee\x61\xf4\x17\x2e\x60\x1c\x32\x30\x68\x43\x46\x87\xcc\x60\x6d\x1d\x0c\x56\x77\xa0\xb0\xcd\x2d\x2b\xd8\x34\x77\xac\x60\x53\xdd\x91\x3b\xca\x15\x98\xf1\x0f\x3f\xce\x6f\x27\xb7\x4f\x57\x0f\xd3\xa7\xeb\xfb\xe9\xaf\x93\xfb\x36\xa4\xa2\xae\x7f\xf5\x23\xd0\x38\xda\xd5\x6b\xf7\x02\xb9\xae\x86\x26\x2f\x68\x75\xfb\x06\x8d\xfc\xf8\xc5\xa8\xb4\x9e\x22\x0b\x0e\x22\x2e\x18\x4a\xf5\xd5\x68\x63\xf5\x45\x2f\x34\xa7\xb8\x8c\xfc\xf5\x1b\x3a\xef\xba\x8a\xd4\x42\xf3\x38\xb9\xbf\x9d\xce\x2e\x1f\xa7\x77\xb3\xa7\xaf\x77\x37\x4f\xf3\xcb\xc7\xbf\x37\x31\x45\x24\xc4\x54\x87\x08\x26\x2d\x3e\xbd\x08\x84\x4a\x5a\x47\x75\xf9\xaa\x7d\x54\xfb\x4e\xb5\x0e\xba\xb9\xbb\x9e\x7c\xf9\x76\xd3\x96\x7d\xf9\xf9\xe2\x6f\x79\x61\xb9\x9a\x8d\x77\x6e\xe6\x29\x4d\x20\x22\xfe\xc0\x66\xc2\x47\x8c\x4a\x6a\x36\xf5\xbd\xf3\x4c\x88\xb9\x12\x9c\x6d\x22\x32\x5d\xcc\x14\xce\x0d\x58\x90\xbb\x44\xa9\xb4\x9e\xc6\xbd\xd9\x76\xe8\x12\xf2\xf6\x5a\xce\x1b\x0d\xbb\x7a\xd2\xae\xfb\xe7\x2f\x0b\x2c\x33\x1c\x37\x57\x6e\xfc\x7a\xc1\x7a\xdd\xa3\xf1\x9d\x14\x9b\x7b\xa5\x7c\x2e\xdb\x8d\x45\x48\x23\x82\x26\xdb\x45\xaf\x12\x8a\x5b\xb0\xd6\x99\xe4\x63\xdd\x1b\xa7\x7c\xf2\xbb\x75\x24\xb3\x66\x41\xea\x9e\x14\xf2\xfe\x56\xb4\xe0\x97\x77\xd9\x5f\xb0\x7d\x92\x96\xb7\xe4\xb4\xc8\x12\x2e\x03\x57\x1a\x00\x83\x98\x9b\x3d\xb2\x98\xea\x96\x2c\xa6\xba\x22\x11\x10\x6a\x92\x1a\xea\x66\xf9\xf2\x31\xa7\x71\xec\x4a\xfa\xf8\x98\x02\x15\x2c\x80\x62\x66\x20\x48\x28\x82\x1d\x3f\x2a\xad\x84\x4a\x36\xe3\x9a\xa3\xdd\x3e\xeb\x62\x87\x01\xee\xdd\x80\x3c\x05\x95\xe1\xf8\xe7\xb4\xf6\x38\x86\x05\xcd\x04\x06\x0b\xeb\xb8\xd4\x18\x5e\xf0\x2f\xb5\xf5\x22\x29\xb6\xa0\x7d\xf1\x18\x35\xb3\xda\xcd\x1d\x09\x33\x6e\x66\xb2\x3c\x09\x8a\xe1\x3b\x6c\xcc\x32\xd1\xfa\xf3\xf0\x62\xf8\xf9\xac\x34\xef\x9a\x56\x4e\xca\xf7\xd1\x9b\xe7\xfb\x51\xa9\x7b\x42\x02\xee\xc5\x63\x32\x79\x69\x67\x4a\x3a\x34\x0d\x0c\x7e\xe9\x9b\x05\x93\xcf\x29\xdb\x93\xaa\xc3\x5b\x1f\xe9\x73\x2f\x54\xc2\x71\x84\x2a\xe5\x08\x08\x2c\x16\xc0\xd0\xb1\x86\x82\xe5\xec\x74\x7a\x16\xe2\x6a\xb7\x9f\x55\x87\xab\xec\x19\x8c\x04\x04\x3f\x42\xa7\xd4\x4d\xa0\x83\xaa\x87\xaa\xa7\xa6\x1a\x37\xd7\xdc\x44\x44\x66\x42\x34\x2b\xdb\x1e\xbf\x04\xbd\x17\xde\x02\x33\x50\x0b\x5e\xfe\xa4\x61\xf5\x56\x38\x5f\xb5\x1d\x90\xfe\xfd\x9f\x06\xa0\xf2\xb6\xf7\x8f\x19\xd7\x14\x52\x25\xdf\x72\xc8\x70\xbe\x3e\x30\x5e\x9c\x38\x50\x14\x27\x9e\x05\xee\x43\xe7\x84\x0a\xf0\xf7\x9c\x10\x5e\x9d\xe6\xc6\xe0\x2e\xe8\x2d\x95\x34\x01\x33\x8e\xb9\x01\x86\x87\x68\x70\xcd\xf6\x1e\x02\xdc\x6a\x2a\x47\xb1\xd8\x6d\x55\x68\x70\xe3\x42\x6a\x7e\x77\xfd\x34\x9d\xff\xe4\x29\xf2\xe8\x08\x4a\xdd\x51\x6e\xda\xf4\xfa\x5d\xa8\xb3\x45\x8a\x9e\x89\x8c\xc3\x35\x35\xa1\xe0\xcf\xe1\x11\x14\xfa\x34\xc2\xed\xac\x9d\x83\x61\x20\x91\x26\x30\x1e\xd5\xcd\xec\xa5\xe3\xad\x64\x70\x69\xfb\xff\x44\xd6\x2b\xe9\xf1\x0e\x50\x90\x62\x66\x87\x5a\xc5\x15\x6d\xaf\xce\xf5\x5f\x71\xfe\xf8\x5d\x8f\x0d\xda\xf0\x35\x17\x90\x40\xdc\xa0\x2d\x35\xe2\x72\xf1\xf6\x13\x44\x79\xf1\x1d\x57\x11\x80\x61\x4e\x35\x6c\x58\xe7\x2e\x75\xb2\x96\xcb\x1b\xa5\x69\xe2\x95\x46\xe4\x0b\xcf\x0b\x35\x57\x92\x8a\xb6\x5f\xdc\x7e\x5f\x02\x7b\x86\x8a\x16\x90\xfc\x2b\xe5\x73\x75\x3a\xf1\x1e\x6d\xdd\x83\x93\xa7\x6e\x3d\x43\x53\x0c\xeb\x96\x4c\x0c\xeb\x1e\x3d\x76\xd3\xd6\x62\x37\xbd\xc8\x3a\x78\xf1\xc1\x89\xac\x74\x5e\xcf\x0d\x3e\xc3\x85\xee\x30\xdf\x23\x4e\x9b\xec\x8a\x08\x96\xfd\x2f\xcf\x4b\x5d\x6b\x33\xcd\x6c\xdb\xd3\x48\x3a\x7b\x76\xe7\xe4\x58\xdf\xd5\xd9\x1b\xfe\xe7\x1a\x78\x78\xc2\xf3\xf9\x93\x97\x92\xad\xf5\x26\x5a\x8f\x86\x9f\x87\x17\x67\xd5\xa6\xe6\x59\x1f\x3e\xa1\x1d\xcc\xc4\x6a\xd0\x5b\xd2\xb5\x8c\xd8\x9d\x51\xfd\xfc\x77\x07\xa6\x70\x6c\x1e\x92\x7d\x63\xd3\x52\xd9\x5c\x73\xb5\xb6\xf6\x57\xb6\xde\x3b\x92\x7f\x8d\x72\xed\x6f\x85\x32\x9b\x3b\x73\x55\xfe\x72\xa0\xd7\x0b\xe7\x00\x79\x2a\xf9\x61\x78\xb2\xfe\x3d\x7e\x3c\xcb\x1d\x7d\x85\xfe\x38\x34\x9d\xe5\xfd\x34\x2c\xf5\x5a\x7f\x9c\xda\x46\x85\x0f\xf6\xd6\xf0\x23\xe7\x60\x2f\xd8\x9c\x81\x8f\x30\xe2\x15\xf2\x69\x4f\xa5\xed\x51\x5e\xef\x44\xc7\x69\xa9\x77\xaa\xde\xe3\xeb\x6d\xeb\xc8\x4b\x51\xb4\xb5\xe6\x67\x02\xf5\xdf\x9f\x84\xeb\xd1\x33\x20\xdd\xfe\x9c\xe0\x61\x7a\x9d\x53\xaf\x37\xfa\x88\xa0\x12\x95\x72\x6c\xa5\x88\x94\x2d\xef\x8b\x2f\xac\xdc\x11\xc2\x82\xff\x36\x37\x9e\xca\x85\xba\x93\xbe\x2c\x6e\x0b\x66\x5e\x73\xbe\xf2\x05\xb0\x0d\x13\x70\xab\xe2\xf2\x77\x2e\xf3\xed\x6f\xa9\xfc\x9f\x13\xbd\x84\x14\x0c\x15\x83\xff\x06\x00\x00\xff\xff\xba\x68\x0a\x1a\xce\x2a\x00\x00") +var _deployKubernetes119FakePmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\xc1\x6e\xef\xe1\x0e\xa8\xac\x78\xdb\x03\x5a\x01\x7e\xc8\x26\xbe\xd4\xe8\x26\x31\x92\xec\xbd\x06\x0c\x35\x96\x59\x53\x24\x4b\x8e\xbc\xd1\x15\xfd\xdf\x0b\x52\x92\xad\x2f\x2b\xb6\x2f\x1f\x28\xea\x7d\x58\x87\xe2\x70\x7e\xf3\xc1\x99\xdf\xd8\xfe\x23\xb9\x02\x09\x86\x22\xc4\xe4\x3b\xc7\x15\xf9\x94\xd2\x35\x90\x75\x66\x51\xa5\xfc\x37\xf8\xf4\x27\x12\x2b\x22\x15\x12\x88\x39\xfe\x61\x34\xa2\x9a\xff\x0a\xc6\x72\x25\x23\xb2\x99\x8c\xd6\x5c\xc6\x11\xb9\x07\xb3\xe1\x0c\xce\x19\x53\x99\xc4\x51\x0a\x48\x63\x8a\x34\x1a\x11\x22\xe8\x13\x08\xeb\xde\x11\xa2\x53\x48\x03\x66\xf9\x98\x4b\x04\x31\x66\x2a\x0d\x63\xd0\x42\xe5\x29\x48\x8c\xc8\x92\xae\x21\xd0\x46\xc5\x19\x43\xae\xe4\x88\x10\x49\x53\x88\xb6\x62\x01\x53\x12\x8d\x12\x02\x4c\xf9\xcc\x6a\xca\x6a\x1b\x46\x41\x10\x34\x00\x9a\x27\xca\xc6\x34\xc3\x95\x32\xfc\x37\xea\x0e\x1d\xaf\xff\x6a\xc7\x5c\x85\x5b\xe8\x77\x4a\xc0\x9b\x01\x86\x67\x04\x23\xa9\x70\x9b\x36\xdc\x61\x02\x13\xb0\x65\xb2\x07\xbe\xc9\x04\xd8\x68\x14\x10\xaa\xf9\x95\x51\x99\xf6\x30\x02\xf2\xe9\xd3\x88\x10\x03\x56\x65\x86\x41\xb9\x06\x32\xd6\x8a\x4b\xb4\x23\x42\x36\x60\x9e\xca\xe5\x04\xd0\xff\xff\x9d\x22\x5b\xf9\x77\x82\xdb\x62\x29\x06\x01\x08\xfe\x6d\xa6\x63\x5a\xbe\x65\x06\xdc\xdb\x8e\x4e\xa6\x94\x89\xb9\xac\x3b\xad\x0b\x42\x00\xb5\xf0\x56\x08\x2c\x2a\x43\x13\xd8\xab\x9c\x59\x5e\x6e\x61\x54\x53\xc6\x91\xef\x83\xb2\x05\xb0\xc3\x54\x2a\x6d\x41\xd1\xdb\xe7\x25\xd4\x83\x42\xa1\x55\xdc\xa3\xb8\x23\x4a\xb5\xb6\x5d\x61\x03\x5a\x70\x46\x2d\xf4\x45\xf2\x84\x7c\xbe\x10\x99\x45\x30\xef\x9f\xd6\x26\x93\x12\xcc\x51\x39\xac\x9d\x5d\x16\x41\xe2\x46\x89\x2c\x3d\x2d\x7c\x47\x45\xaa\xa5\x90\x09\xca\xd3\xc3\xb5\x96\x99\x72\x74\xa6\x56\x69\x2a\xa8\xdd\x7b\x5d\x5a\xea\x0e\xab\x01\x1b\xe8\x14\x80\x23\x73\xbd\x6b\x8b\xa4\xda\xae\x14\x8e\x5f\x32\xaa\x0c\x59\xb9\x7d\xc8\xaa\xd7\xd2\xe1\xca\x7f\xd7\xe0\x17\x54\xbd\x5c\x44\xa4\x8a\x5f\x33\x28\x47\x1c\x77\x5a\xb7\xfa\xc2\x65\xcc\x65\xf2\x76\x5d\xd6\xf2\xe6\xc5\x56\x02\x86\x9a\x96\x12\x70\x07\x4b\xa7\xbb\xf2\xce\x80\x29\x23\x42\x6a\x7d\xf7\xf0\x86\x69\xb3\xa7\x7f\x02\x43\x5f\x59\x7a\x39\xc7\xbb\x90\x85\x5a\x71\xfd\x88\x28\x9c\xea\xeb\x7a\x4f\x38\xaa\x98\xbf\x83\xd7\xdb\x1c\xf2\xe3\xc8\xa3\xd5\xc0\x9c\x2a\xad\x0c\x6e\x3b\xbb\xc1\x88\x4c\xce\xce\xce\xce\x3c\x06\xa4\x26\x01\x5c\x34\x56\x2d\x08\x60\xa8\x4c\x81\x92\x6a\xbd\x4f\xe7\xd1\x26\x7c\x98\xab\x52\x40\xc3\x99\x3d\xc1\x4f\x93\x5e\x3f\x4d\xde\xd6\x4f\x84\x60\xae\x21\x22\x37\x2a\x06\xa7\xb3\xe3\x38\xc7\xbc\x76\x97\xf8\x1e\x29\xc2\x32\x13\xf7\xf0\x81\x93\x4a\xe5\xc4\x8a\xfe\x45\x64\xd2\xf1\x51\xea\xba\xc4\xd7\x1a\xaa\x17\xdc\x76\x02\x6c\x5b\x64\xd2\xcd\x00\x7a\x84\x54\x0b\x8a\x50\x62\xaa\x39\xcc\x03\x92\x52\xa1\x2f\x3a\x5b\x8c\xbd\x30\x2c\x33\xd4\xc5\xc8\x1d\x4d\xb9\x04\x63\xcb\xdd\xa2\x61\xdf\x8b\x16\x9e\x60\xe3\x5e\xb1\xef\xf0\xb4\x52\x6a\x1d\x11\x9e\x48\x65\xc0\x6f\xad\xe2\xe2\xa1\x2c\x97\x5c\x72\xcc\x77\xe0\x5c\x6f\x3f\xef\xac\xba\x28\xfe\x2b\xe3\x06\xe2\xcb\xcc\x70\x99\xdc\xb3\x15\xc4\x99\xe0\x32\x99\xfb\x83\xcb\xe5\xd9\x33\xb0\xcc\x61\xaa\x4b\x16\x67\xde\x97\x71\x7f\x00\x93\xda\xe6\xe3\xa0\x48\x83\xd9\xb3\x36\x60\x6d\xd3\xcf\xd5\x8e\x35\xe4\x51\x9f\x81\x3d\xde\xab\x5e\x4a\xbb\xa1\x5f\x19\x77\x6b\x70\x2e\x3b\xcf\x37\x54\x64\xd0\x51\xe5\x39\x8f\x54\x9f\xfa\x96\x97\x54\x58\xa8\x9e\xec\xc2\x5c\x1d\xe1\x26\xca\x34\xa5\x32\xde\x9d\x19\x90\x30\xb3\x26\x14\x8a\x51\x11\x3e\x71\x19\x6e\xc3\x1e\x1b\xbe\xa9\x81\x0e\x48\xb0\x99\xfe\xb9\xfe\xa7\x50\x49\xc2\x65\x12\x2c\x95\x49\x29\x4e\x11\x9e\xb1\xfe\x38\x55\x31\x4c\x7b\xac\x0f\x48\x50\xcd\xcd\xd3\x4c\xf2\xe7\x28\x0c\x43\x66\x79\xd8\x4c\xb5\xb1\x55\x6c\x5d\x97\x31\x90\x70\x8b\x26\x9f\x55\xb2\xc8\x74\x14\x86\x67\x63\xff\x2f\xda\xf5\x87\x72\xbf\x0b\x29\x8f\xa7\x3f\xfc\xf8\x8f\x6f\x5f\x66\x8f\x37\xb7\x97\xb3\xc7\x9b\xf3\xeb\xd9\x4f\xf5\x3d\x8c\xfe\xc2\x05\x4c\x43\x06\x06\x6d\xc8\xe8\x98\x99\x86\x09\x6e\xbd\xbe\x03\x85\x6d\x6f\x59\x43\xde\xde\xb1\x86\xbc\xbe\xa3\xf0\xa3\xab\x3f\xd3\x1f\x7e\x5c\x5c\xcf\xae\x1f\x2f\xee\xe7\x8f\x97\x77\xf3\x5f\x67\x77\x5d\x48\x65\xd9\xff\xea\x27\xa4\x69\xb4\x2b\xe7\xee\x05\x72\x53\x8f\x5c\x51\xef\x9a\xf6\x8d\x5a\xe9\xf3\x8b\x51\x69\x33\x83\x96\x1c\x44\x5c\x12\x98\xfa\xab\xd5\xe5\x9a\x0f\xbd\xd0\x82\xe2\x2a\xf2\xb7\x73\xec\xbc\xeb\x0a\x56\x07\xcd\xc3\xec\xee\x7a\x7e\x73\xfe\x30\xbf\xbd\x79\xfc\x7a\x7b\xf5\xb8\x38\x7f\xf8\x7b\x1b\x53\x44\x42\x4c\x75\x88\x60\xd2\xf2\xc3\x0d\x97\x4b\x9d\xa3\xfa\x7c\xd5\x3d\xaa\x7b\xe5\x3a\x07\x5d\xdd\x5e\xce\xbe\x7c\xbb\xea\xca\x3e\xff\x7c\xf6\xb7\xa2\xee\x5c\xdc\x4c\x77\x6e\xe6\x29\x4d\x20\x22\xfe\xc0\xf6\x7d\x88\x18\x95\xd4\xe4\xcd\xbd\x8b\x4c\x88\x85\x12\x9c\xe5\x11\x99\x2f\x6f\x14\x2e\x0c\x58\x90\xbb\x44\xa9\x75\xa6\xd6\xb5\xda\x36\xf0\x0a\xf2\xf6\xd6\x2e\x5a\xfd\xbc\x7e\xd2\x8e\x1c\x14\x2f\x0b\x2c\x33\x1c\xf3\x0b\x37\x9d\x3d\x63\xb3\x2c\xd2\xf8\x56\x8a\xfc\x4e\x29\x9f\xcb\x36\xb7\x08\x69\x44\xd0\x64\xbb\xe8\xd5\x42\x71\x0d\xd6\x3a\x93\x7c\xac\x07\xe3\x54\x0c\x86\xd7\x8e\x83\x36\x2c\x48\xdd\x4a\x29\xef\x6f\x45\x07\x7e\x75\x97\xfd\x05\xdb\x27\x69\x79\x47\x4e\x8b\x2c\xe1\x32\x70\xa5\x01\x30\x88\xb9\xd9\x23\x8b\xa9\xee\xc8\x62\xaa\x6b\x12\x01\xa1\x26\x69\xa0\x6e\x57\x37\x1f\x73\x1a\xc7\xae\xe2\x4f\x0f\x29\x50\xc1\x12\x28\x66\x06\x82\x84\x22\xd8\xe9\x83\xd2\x4a\xa8\x24\x9f\x36\x1c\xed\xf6\x59\x17\x3b\x0c\x70\xef\x06\xe4\x29\xa8\x0c\xa7\x3f\xa7\x8d\xe5\x18\x96\x34\x13\x18\x2c\xad\xa3\x5a\x53\x78\xc6\xbf\x34\x9e\x97\x49\xb1\x05\xed\x8b\xc7\xa4\x9d\xd5\x6e\x2c\x49\x98\x71\x23\x95\xe5\x49\x50\xce\xe6\x61\x6b\xd4\x89\x36\x9f\xc7\x67\xe3\xcf\x27\xa5\x79\xdf\x30\x73\x54\xbe\x4f\xde\x3c\xdf\x0f\x4a\xdd\x23\x12\x70\x2f\x1e\x93\xc9\x73\x7b\xa3\xa4\x43\xd3\xc2\xe0\x1f\x7d\xb3\x60\x8a\x31\x66\x7b\x52\x7d\xb6\x1b\xe2\x84\xee\x85\x4a\x38\x0a\x51\x67\x24\x01\x81\xe5\x12\x18\x3a\x52\x51\x92\xa0\x9d\x4e\x4f\x52\x5c\xed\xf6\xa3\xec\x78\x9d\x3d\x81\x91\x80\xe0\x27\xec\x94\xba\x01\x75\x54\xf7\x50\xfd\xd4\x54\x63\x7e\xc9\x4d\x44\x64\x26\x44\xbb\xb2\xed\xf1\x4b\x30\x78\xe1\x2d\x30\x03\x8d\xe0\x15\x2b\x2d\xab\xb7\xc2\xc5\x53\xdb\x03\xe9\xdf\xff\x69\x01\xaa\x6e\xfb\xf0\x14\x72\x49\x21\x55\xf2\x2d\x67\x10\xe7\xeb\x17\xa6\x8f\x23\xe7\x8d\xf2\xc4\x93\xc0\x7d\xe8\x18\x51\x03\xfe\x9e\x03\xc4\xab\xb3\xe0\x18\xdc\x05\xbd\xa6\x92\x26\x60\xa6\x31\x37\xc0\xf0\x77\xb2\xe4\x86\x6b\x06\xf8\x71\xa7\xe7\x1c\x44\x72\xb7\x45\xa3\x45\x9d\x4b\xa9\xc5\xed\xe5\xe3\x7c\xf1\x93\x67\xd0\x93\x03\x18\x77\x4f\x35\xea\xb2\xef\x77\x61\xd6\x16\x29\x7a\xa2\x32\x0d\x37\xd4\x84\x82\x3f\x85\x07\x30\xec\xe3\xf8\xb8\xb3\x76\x01\x86\x81\x44\x9a\xc0\x74\xd2\x34\x73\x90\xad\x77\x72\xc5\x65\xf5\xff\x12\x97\xaf\xa5\xc7\x3b\x40\x41\x8a\x99\x1d\x6b\x15\xd7\xb4\xbd\xfa\x28\xf0\x8a\xe3\xc9\xff\xf5\x54\xa1\x0d\xdf\x70\x01\x09\xc4\x2d\x56\xd3\xe0\x35\x67\x6f\x3f\x60\x54\x17\xdf\x51\x19\x01\x18\x16\x4c\xc4\x86\x4d\x6a\xd3\xe4\x72\x85\xbc\x51\x9a\x26\x5e\x69\x44\xbe\xf0\xa2\x8e\x73\x25\xa9\xe8\xfa\xc5\xed\xf7\x25\x70\x60\xe6\xe8\x00\x29\xbe\x90\x3e\x55\xa7\x13\x1f\xd0\xd6\x3f\x57\x79\x66\x37\x30\x53\xc5\xb0\xe9\xc8\xc4\xb0\x19\xd0\x63\xf3\xae\x16\x9b\x0f\x22\xeb\xa1\xcd\x2f\x0e\x6c\x95\xf3\x06\x6e\xf0\x09\x2e\x74\x87\xf9\x1e\x71\xdc\xe0\x57\x46\xb0\xea\x7f\x45\x5e\xea\x46\x9b\x69\x67\xdb\x9e\x46\xd2\xdb\xb3\x7b\x07\xcb\xe6\xae\xde\xde\xf0\xbb\x6b\xe0\xcb\x03\xa0\xcf\x9f\xa2\x94\x6c\xad\x37\xd1\x66\x32\xfe\x3c\x3e\x3b\xa9\x36\xb5\xcf\xfa\xf0\x01\xee\xc5\x4c\xac\x07\xbd\x23\xdd\xc8\x88\xdd\x19\xf5\x4f\x8f\x77\x60\x4a\xc7\x16\x21\xd9\x37\x55\xad\x94\x2d\x34\xd7\x6b\xeb\x70\x65\x1b\xbc\x23\xc5\x97\x30\x97\xfe\x56\x28\x93\xdf\x9a\x8b\xea\x77\x07\x83\x5e\x38\x05\xc8\x63\xc5\x0f\xc3\xa3\xf5\xef\xf1\xe3\x49\xee\x18\x2a\xf4\x87\xa1\xe9\x2d\xef\xc7\x61\x69\xd6\xfa\xc3\xd4\xb6\x2a\x7c\xb0\xb7\x86\x1f\x38\x26\x7b\xc1\xf6\x88\x7c\x80\x11\xaf\x90\x4f\x7b\x2a\xed\x80\xf2\x66\x27\x3a\x4c\x4b\xb3\x53\x0d\x1e\xdf\x6c\x5b\x07\x5e\x8a\xb2\xad\xb5\x3f\x32\x68\xfe\x7a\x25\xdc\x4c\x9e\x00\xe9\xf6\xc7\x08\xf7\xf3\xcb\x82\x7a\xbd\xd1\x27\x08\xb5\xa8\x54\x53\x2d\x45\xa4\x6c\x75\x57\x7e\xdd\xe5\x8e\x10\x16\xfc\x77\xc1\xf1\x5c\x2e\xd5\xad\xf4\x65\x71\x5b\x30\x8b\x9a\xf3\x95\x2f\x81\xe5\x4c\xc0\xb5\x8a\xab\x5f\xc9\x2c\xb6\xbf\xc4\xf2\x7f\xce\xf4\x0a\x52\x30\x54\x8c\xfe\x1b\x00\x00\xff\xff\xc7\x92\xe8\x5c\x91\x2a\x00\x00") func deployKubernetes119FakePmemCsiYamlBytes() ([]byte, error) { return bindataRead( @@ -240,12 +240,12 @@ func deployKubernetes119FakePmemCsiYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "deploy/kubernetes-1.19/fake/pmem-csi.yaml", size: 10958, mode: os.FileMode(436), modTime: time.Unix(1608146582, 0)} + info := bindataFileInfo{name: "deploy/kubernetes-1.19/fake/pmem-csi.yaml", size: 10897, mode: os.FileMode(420), modTime: time.Unix(1608283294, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _deployKubernetes119LvmPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\xdd\x6f\xe3\xb8\x11\x7f\xf7\x5f\xc1\x6e\xef\xe1\x0e\xa8\xac\x78\xdb\x03\x5a\x01\x7e\xc8\x26\xbe\xd4\xe8\xc6\x31\x92\xec\xbd\x06\x0c\x35\x96\x59\x53\x24\x4b\x8e\xbc\xf1\x15\xfd\xdf\x0b\x52\x92\xad\x2f\xcb\x1f\xcd\x07\x8a\xf3\x3e\xac\x23\x72\x38\xbf\xf9\xe0\xcc\xfc\x6c\xff\x91\xdc\x80\x04\x43\x11\x62\xf2\x9d\xe3\x92\x7c\x4a\xe9\x0a\xc8\x2a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x18\x50\xcd\x7f\x05\x63\xb9\x92\x11\x59\x8f\x06\x2b\x2e\xe3\x88\xcc\x68\x0a\x56\x53\x06\x83\x14\x90\xc6\x14\x69\x34\x20\x44\xd0\x67\x10\xd6\xbd\x23\x44\xa7\x90\x06\xcc\xf2\x21\x97\x08\x62\xc8\x54\x1a\xc6\xa0\x85\xda\xa4\x20\x31\x22\x62\x9d\x06\xda\xa8\x38\x63\xc8\x95\x1c\x10\x22\x69\x0a\xd1\x56\x6a\x10\x04\x41\xb7\xe6\x07\x30\x6b\xce\xe0\x92\x31\x95\x49\x7c\x23\xf5\x01\x53\x12\x8d\x12\x02\x4c\xb1\xe6\x8d\xed\xc1\x67\x9e\x29\x1b\xd2\x0c\x97\xca\xf0\xdf\xa8\x3b\x74\xb8\xfa\xab\x1d\x72\x15\x6e\x91\xdf\x2b\xf1\x56\xee\x0a\xe0\x05\xc1\x48\x2a\xdc\xa6\x35\x77\x90\xc0\x04\x6c\x91\xec\x41\x6f\x32\x01\x36\x1a\x04\x84\x6a\x7e\x63\x54\xa6\x3d\x8a\x80\x7c\xfa\x34\x20\xc4\x80\x55\x99\x61\x50\x3c\x03\x19\x6b\xc5\x25\xda\x01\x21\x6b\x30\xcf\xc5\xe3\x04\xd0\xff\xff\x9d\x22\x5b\xfa\x77\x82\xdb\xfc\x51\x0c\x02\x10\xfc\xdb\x4c\xc7\xb4\x78\xcb\x0c\xb8\xb7\x2d\x9d\x4c\x29\x13\x73\x59\xf5\x59\x1b\x84\x00\x6a\xe1\xad\x10\x58\x54\x86\x26\xb0\x57\x39\xb3\xbc\xd8\xc2\xa8\xa6\x8c\x23\xdf\x07\x65\x0b\x60\x87\xa9\x50\xda\x80\xa2\xb7\xeb\x05\xd4\xa3\x42\xa1\x55\xdc\xa1\xb8\x25\x4a\xb5\xb6\x6d\x61\x03\x5a\x70\x46\x2d\x74\x45\xf2\x8c\x74\xbe\x12\x99\x45\x30\xef\x9e\xd5\x26\x93\x12\xcc\x49\x29\xac\x9d\x59\x16\x41\xe2\x5a\x89\x2c\x3d\x2f\x7a\x27\x05\xaa\xa1\x90\x09\xca\xd3\xe3\xb5\x16\x89\x72\x72\xa2\x96\x59\x2a\xa8\xdd\x7b\x5b\x1a\xea\x8e\x2b\x01\x6b\x68\xdd\xff\x13\x53\xbd\x6d\x8b\xa4\xda\x2e\x15\x0e\x0f\x19\x55\x84\xac\xd8\xde\x67\xd5\x6b\xe9\x70\xc5\xbf\x6d\xf0\x01\x55\x87\x6b\x88\x54\xf1\x6b\x06\xe5\x84\xe3\xce\xeb\x55\x5f\xb8\x8c\xb9\x4c\xde\xac\xc5\x5a\x5e\xbf\xd7\x4a\x40\x5f\xcb\x52\x02\xee\x61\xe1\x54\x97\xce\xe9\xb1\x64\x40\x48\xa5\xe9\x1e\xdf\x2e\x6d\xf6\xfc\x4f\x60\xe8\x0b\x4b\xe7\xbc\xf1\x2e\x93\x42\xa5\xb4\x7e\x40\x10\xce\x75\x75\xb5\x21\x9c\x54\xca\xdf\xc1\xe9\xcd\xf1\xf1\xc3\xe6\x46\xab\x81\x39\x4d\x5a\x19\xdc\x76\x75\x83\x11\x19\x5d\x5c\x5c\x5c\x78\x08\x48\x4d\x02\x38\xaf\x3d\xb5\x20\x80\xa1\x32\x39\x48\xaa\xf5\x3e\x9d\xa7\x5a\xf0\x51\x8e\x4a\x01\x0d\x67\xf6\x0c\x2f\x8d\x3a\xbd\x34\x7a\x53\x2f\x11\x82\x1b\x0d\x11\x99\xa9\x18\x9c\xca\x96\xdb\xdc\xc8\xb5\xbb\xbf\x0f\x48\x11\x16\x99\x78\x80\x8f\x23\x28\xa5\x0b\xcb\xb1\x2f\x22\xa3\x96\x87\x52\xd7\x1e\xbe\x56\x40\x1d\x70\xda\xe9\xa8\x6d\x9e\x45\xb3\x1e\xf0\x08\xa9\x16\x14\xa1\x80\x54\x71\x97\xc7\x23\xa5\x42\x5f\x6e\xb6\x10\x3b\x51\x58\x66\xa8\x8b\x90\x3b\x9a\x72\x09\xc6\x16\xbb\x45\xcd\xbc\x83\x06\x9e\x6e\xe2\x5e\xa9\xef\xf0\xbc\x54\x6a\x15\x11\x9e\x48\x65\xc0\x6f\x2d\xa3\xe2\x91\x2c\x16\x5c\x72\xdc\xec\xb0\xb9\x96\x7e\xd9\x7a\xea\x62\xf8\xaf\x8c\x1b\x88\xaf\x33\xc3\x65\xf2\xc0\x96\x10\x67\x82\xcb\x64\xea\x0f\x2e\x1e\x4f\x5e\x80\x65\x0e\x53\x55\x32\x3f\xf3\xa1\x88\xfa\x23\x98\xd4\xd6\x97\x83\x3c\x09\x26\x2f\xda\x80\xb5\x75\x37\x97\x3b\x56\xb0\x89\xba\x0c\xec\x70\x5e\xf9\x52\x1a\x0c\x75\x79\x46\x66\x0a\xa7\xb2\xb5\xbe\xa6\x22\x83\x96\x2a\x3f\xea\x48\xf5\xa9\xeb\xf1\x82\x0a\x0b\xe5\xca\x2e\xca\xe5\x11\x8e\x47\xa6\x29\x95\xf1\xee\xcc\x80\x84\x99\x35\xa1\x50\x8c\x8a\xf0\x99\xcb\x70\x1b\xf5\xd8\xf0\x75\x05\x74\x40\x82\xf5\xf8\xcf\xd5\x3f\x53\x15\xc3\xb8\xc3\xbc\x80\x04\x25\x1d\x1e\x67\x92\xbf\x44\x61\x18\x32\xcb\xc3\x7a\x2a\x0d\xad\x62\xab\xaa\x8c\x81\x84\x5b\x34\x9b\x49\x29\x8b\x4c\x47\x61\x78\x31\xf4\xff\xa2\x5d\xe9\x2f\xf6\xbb\x98\xf1\x78\xfc\xc3\x8f\xff\xf8\xf6\x65\xf2\x34\xbb\xbb\x9e\x3c\xcd\x2e\x6f\x27\x3f\x55\xf7\x30\xfa\x0b\x17\x30\x0e\x19\x18\xb4\x21\xa3\x43\x66\xb0\xb6\x0e\x06\xab\x3b\x50\xd8\xe6\x96\x15\x6c\x9a\x3b\x56\xb0\xa9\xee\xc8\x1d\xe5\xca\xcb\xf8\x87\x1f\xe7\xb7\x93\xdb\xa7\xab\x87\xe9\xd3\xf5\xfd\xf4\xd7\xc9\x7d\x1b\x52\x51\xd3\xbf\x7a\xe6\x33\x8e\x76\xb5\xda\xbd\x40\xae\xab\xa1\xc9\xcb\x59\xdd\xbe\x41\x23\x3f\x7e\x31\x2a\xad\xa7\xc8\x82\x83\x88\x8b\xd1\xa4\xfa\x6a\x74\xb0\xfa\xa2\x17\x9a\x53\x5c\x46\xfe\xfa\x0d\x9d\x77\x5d\x41\x6a\xa1\x79\x9c\xdc\xdf\x4e\x67\x97\x8f\xd3\xbb\xd9\xd3\xd7\xbb\x9b\xa7\xf9\xe5\xe3\xdf\x9b\x98\x22\x12\x62\xaa\x43\x04\x93\x16\x9f\x59\x04\x42\x25\xad\xa3\xba\x7c\xd5\x3e\xaa\x7d\xa7\x5a\x07\xdd\xdc\x5d\x4f\xbe\x7c\xbb\x69\xcb\xbe\xfc\x7c\xf1\xb7\xbc\xb0\x5c\xcd\xc6\x3b\x37\xf3\x94\x26\x10\x11\x7f\x60\x33\xe1\x23\x46\x25\x35\x9b\xfa\xde\x79\x26\xc4\x5c\x09\xce\x36\x11\x99\x2e\x66\x0a\xe7\x06\x2c\xc8\x5d\xa2\x54\x1a\x4f\xe3\xde\x6c\xbb\x73\x09\x79\x7b\x2d\xe7\x8d\x66\x5d\x3d\x69\xd7\xf9\xf3\x97\x05\x96\x19\x8e\x9b\x2b\xc7\xba\x5e\xb0\x5e\xf7\x68\x7c\x27\xc5\xe6\x5e\x29\x9f\xcb\x76\x63\x11\xd2\x88\xa0\xc9\x76\xd1\xab\x84\xe2\x16\xac\x75\x26\xf9\x58\xf7\xc6\x29\x27\x7c\xb7\x6e\xba\xac\x59\x90\xba\x27\x85\xbc\xbf\x15\x2d\xf8\xe5\x5d\xf6\x17\x6c\x9f\xa4\xe5\x2d\x39\x2d\xb2\x84\xcb\xc0\x95\x06\xc0\x20\xe6\x66\x8f\x2c\xa6\xba\x25\x8b\xa9\xae\x48\x04\x84\x9a\xa4\x86\xba\x59\xbe\x7c\xcc\x69\x1c\xbb\x92\x3e\x3e\xa6\x40\x05\x0b\xa0\x98\x19\x08\x12\x8a\x60\xc7\x8f\x4a\x2b\xa1\x92\xcd\xb8\xe6\x68\xb7\xcf\xba\xd8\x61\x80\x7b\x37\x20\x4f\x41\x65\x38\xfe\x39\xad\x3d\x8e\x61\x41\x33\x81\xc1\xc2\xba\x41\x6a\x0c\x2f\xf8\x97\xda\x7a\x91\x14\x5b\xd0\xbe\x78\x8c\x9a\x59\xed\x08\x47\xc2\x8c\xe3\x4a\x96\x27\x41\xc1\xb9\xc3\x06\x89\x89\xd6\x9f\x87\x17\xc3\xcf\x67\xa5\x79\x17\x4d\x39\x29\xdf\x47\x6f\x9e\xef\x47\xa5\xee\x09\x09\xb8\x17\x8f\xc9\xe4\xa5\x9d\x29\xe9\xd0\x34\x30\xf8\xa5\x6f\x16\x4c\xce\x50\xb6\x27\x55\x59\x5b\xdf\xcc\xe7\x5e\xa8\x84\x9b\x11\xaa\x23\x47\x40\x60\xb1\x00\x86\x6e\x6a\x28\xa6\x9c\x9d\x4e\x3f\x85\xb8\xda\xed\x49\xea\x70\x95\x3d\x83\x91\x80\xe0\xa9\x73\x4a\x1d\xf5\x1c\x54\x3d\x54\x3d\x35\xd5\xb8\xb9\xe6\x26\x22\x32\x13\xa2\x59\xd9\xf6\xf8\x25\xe8\xbd\xf0\x16\x98\x81\x5a\xf0\xf2\x27\x0d\xab\xb7\xc2\xf9\xaa\xed\x80\xf4\xef\xff\x34\x00\x95\xb7\xbd\x9f\x63\x5c\x53\x48\x95\x7c\x43\x86\xe1\x5c\x7d\x80\x5b\x9c\xc8\x26\x8a\x13\xcf\xc1\xf6\xa1\x24\xa1\x82\xfb\x1d\xe9\xc1\xab\xcf\xb8\x31\xb8\xdb\x79\x4b\x25\x4d\xc0\x8c\xc5\x3a\x3d\x34\x00\xd7\xec\xee\x19\x7d\x5b\xed\xe4\xa8\xf9\x75\x5b\x0f\x1a\x53\x71\x21\x35\xbf\xbb\x7e\x9a\xce\x7f\xf2\xc3\xf1\xe8\x88\x61\xba\xa3\xd0\xb4\x07\xeb\x77\x19\x9a\xad\x63\xff\xae\x10\x8f\xc3\x35\x35\xa1\xe0\xcf\xe1\x11\xc3\xf3\x69\xa3\xb6\xb3\x76\x0e\x86\x81\x44\x9a\xc0\x78\x54\x37\xf3\xff\x7d\x10\xaf\x24\xc0\x3b\x40\x41\x8a\x99\x1d\x6a\x15\x57\xb4\xbd\xfa\x1c\xff\x8a\xdc\xe2\x77\x4d\x09\xb4\xe1\x6b\x2e\x20\x81\xb8\x31\x92\xd4\x86\x92\x8b\xb7\x67\x07\xe5\xd5\x76\x73\x88\x00\x0c\xf3\x31\xc2\x86\xf5\xb9\xa4\x3e\x88\xe5\xf2\x46\x69\x9a\x78\xa5\x11\xf9\xc2\x63\x6e\xc0\xf7\x0a\x2a\xda\x7e\x71\xfb\x7d\x91\xeb\x21\x0c\x2d\x20\xf9\x97\xc4\xe7\xea\x74\xe2\x3d\xda\xba\x49\x91\x1f\xcb\x7a\x08\x51\x0c\xeb\x96\x4c\x0c\xeb\x1e\x3d\x76\xd3\xd6\x62\x37\xbd\xc8\x3a\x66\xde\x83\x6c\xab\x74\x5e\xcf\x0d\x3e\xc3\x85\xee\x30\xdf\x05\x4e\x63\x6d\x45\x04\xcb\x0e\x97\xe7\xa5\xae\x35\x92\x66\xb6\xed\x69\x15\x9d\x5d\xb9\x93\x15\xd6\x77\x75\xf6\x86\xff\xb9\x06\x1e\x66\x6f\x3e\x7f\xf2\x52\xb2\xb5\xde\x44\xeb\xd1\xf0\xf3\xf0\xe2\xac\xda\xd4\x3c\xeb\xc3\xd9\xd7\xc1\x4c\xac\x06\xbd\x25\x5d\xcb\x88\xdd\x19\xd5\xcf\x76\x77\x60\x0a\xc7\xe6\x21\xd9\x47\x89\x96\xca\xe6\x9a\xab\xb5\xb5\xbf\xb2\xf5\xde\x91\xfc\xfb\x91\x6b\x7f\x2b\x94\xd9\xdc\x99\xab\xf2\xc7\x00\xbd\x5e\x38\x07\xc8\x53\x39\x01\x86\x27\xeb\xdf\xe3\xc7\xb3\xdc\xd1\x57\xe8\x8f\x43\xd3\x59\xde\x4f\xc3\x52\xaf\xf5\xc7\xa9\x6d\x54\xf8\x60\x6f\x0d\x3f\x92\xe3\x7a\xc1\x26\xbf\x3d\xc2\x88\x57\xc8\xa7\x3d\x95\xb6\x47\x79\xbd\x13\x1d\xa7\xa5\xde\xa9\x7a\x8f\xaf\xb7\xad\x23\x2f\x45\xd1\xd6\x9a\x7c\xbf\xfe\x93\x92\x70\x3d\x7a\x06\xa4\xdb\x9f\x08\x3c\x4c\xaf\xf3\xd1\xeb\x6d\xe8\x7f\x25\x28\x25\x29\xa5\x88\x94\x2d\xef\x8b\xef\xa2\x22\xe2\xbf\x91\xf1\x5f\xd2\xc6\x53\xb9\x50\x77\xd2\x57\xc5\x6d\xbd\xcc\x4b\xce\x57\xbe\x00\xb6\x61\x02\x6e\x55\x5c\xfe\x72\x65\xbe\xfd\x75\x94\xff\x73\xa2\x97\x90\x82\xa1\x62\xf0\xdf\x00\x00\x00\xff\xff\xfa\x42\x3c\xbb\x9c\x2a\x00\x00") +var _deployKubernetes119LvmPmemCsiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\x5b\x6f\xe3\xb8\x15\x7e\xf7\xaf\x60\xa7\xfb\xb0\x0b\x54\x56\x3c\xed\x02\xad\x00\x3f\x64\x12\x6f\x6a\x74\x92\x18\x49\x66\x5f\x03\x86\x3a\x96\x59\x53\x24\x4b\x1e\x69\xe2\x2d\xfa\xdf\x0b\x52\x92\xad\x9b\x15\xdb\x9b\x0b\x8a\x7a\x1e\xc6\xa1\x78\x78\x3e\x9e\xeb\x77\x6c\xff\x91\x5c\x81\x04\x43\x11\x62\xf2\x9d\xe3\x8a\x7c\x4a\xe9\x1a\xc8\x3a\xb3\xa8\x52\xfe\x1b\x7c\xfa\x13\x89\x15\x91\x0a\x09\xc4\x1c\xff\x30\x1a\x51\xcd\x7f\x05\x63\xb9\x92\x11\xc9\x27\xa3\x35\x97\x71\x44\xee\xc1\xe4\x9c\xc1\x39\x63\x2a\x93\x38\x4a\x01\x69\x4c\x91\x46\x23\x42\x04\x7d\x02\x61\xdd\x3b\x42\x74\x0a\x69\xc0\x2c\x1f\x73\x89\x20\xc6\x4c\xa5\x61\x0c\x5a\xa8\x4d\x0a\x12\x23\x22\xf2\x34\xd0\x46\xc5\x19\x43\xae\xe4\x88\x10\x49\x53\x88\xb6\x52\x01\x53\x12\x8d\x12\x02\x4c\xf9\xcc\x6a\xca\x6a\x1b\x46\x41\x10\x34\xf0\x99\x27\xca\xc6\x34\xc3\x95\x32\xfc\x37\xea\x0e\x1d\xaf\xff\x6a\xc7\x5c\x85\x5b\xe4\x77\x4a\xc0\x5b\xe1\x85\x67\x04\x23\xa9\x70\x9b\x72\xee\x20\x81\x09\xd8\x32\xd9\x83\xde\x64\x02\x6c\x34\x0a\x08\xd5\xfc\xca\xa8\x4c\x7b\x14\x01\xf9\xf4\x69\x44\x88\x01\xab\x32\xc3\xa0\x5c\x03\x19\x6b\xc5\x25\xda\x11\x21\x39\x98\xa7\x72\x39\x01\xf4\xff\x7f\xa7\xc8\x56\xfe\x9d\xe0\xb6\x58\x8a\x41\x00\x82\x7f\x9b\xe9\x98\x96\x6f\x99\x01\xf7\xb6\xa3\x93\x29\x65\x62\x2e\xeb\x36\xeb\x82\x10\x40\x2d\xbc\x15\x02\x8b\xca\xd0\x04\xf6\x2a\x67\x96\x97\x5b\x18\xd5\x94\x71\xe4\xfb\xa0\x6c\x01\xec\x30\x95\x4a\x5b\x50\xf4\xf6\x79\x09\xf5\x20\x57\x68\x15\xf7\x28\xee\x88\x52\xad\x6d\x57\xd8\x80\x16\x9c\x51\x0b\x7d\x9e\x3c\x21\x9c\x2f\x44\x66\x11\xcc\xbb\x47\xb5\xc9\xa4\x04\x73\x54\x08\x6b\x77\x2d\x8b\x20\x31\x57\x22\x4b\x4f\xf3\xde\x51\x8e\x6a\x29\x64\x82\xf2\xf4\x70\xad\x65\xa0\x1c\x1d\xa8\x55\x94\x0a\x6a\xf7\x66\x4b\x4b\xdd\x61\x25\x20\x87\x4e\xfe\x1f\x19\xea\xdd\xbb\x48\xaa\xed\x4a\xe1\xf8\xa5\x4b\x95\x2e\x2b\xb7\x0f\xdd\xea\xb5\x74\xb8\xe2\xdf\xbd\xf0\x0b\xaa\x5e\xae\x21\x52\xc5\xaf\xe9\x94\x23\x8e\x3b\xad\x57\x7d\xe1\x32\xe6\x32\x79\xb3\x16\x6b\x79\x33\xaf\x95\x80\xa1\x96\xa5\x04\xdc\xc1\xd2\xa9\xae\x8c\x33\x70\x93\x11\x21\xb5\xa6\x7b\x78\xbb\xb4\xd9\xd3\x3f\x81\xa1\x2f\x2c\xbd\x7c\xe3\x5d\x98\x42\xad\xb4\x7e\x80\x13\x4e\x35\x75\xbd\x21\x1c\x55\xca\xdf\xc1\xe8\x6d\xfa\xf8\x61\xbc\xd1\x6a\x60\x4e\x93\x56\x06\xb7\x5d\xdd\x60\x44\x26\x67\x67\x67\x67\x1e\x02\x52\x93\x00\x2e\x1a\xab\x16\x04\x30\x54\xa6\x00\x49\xb5\xde\xa7\xf3\xd8\x1b\x7c\x94\xa1\x52\x40\xc3\x99\x3d\xc1\x4a\x93\x5e\x2b\x4d\xde\xd4\x4a\x84\xe0\x46\x43\x44\x6e\x54\x0c\x4e\x65\xc7\x6c\x8e\x72\xed\xf2\xf7\x1e\x29\xc2\x32\x13\xf7\xf0\x71\x03\x4a\x65\xc2\x8a\xf6\x45\x64\xd2\xb1\x50\xea\xda\xc3\xd7\x1a\xa8\x17\x8c\x76\x3c\x6a\x5b\x44\xd1\xcd\x00\x78\x84\x54\x0b\x8a\x50\x42\xaa\x99\xcb\xe3\x91\x52\xa1\x2f\x37\x5b\x88\xbd\x28\x2c\x33\xd4\x79\xc8\x1d\x4d\xb9\x04\x63\xcb\xdd\xa2\x71\xbd\x17\x2f\x78\xfc\x15\xf7\x4a\x7d\x87\xa7\x95\x52\xeb\x88\xf0\x44\x2a\x03\x7e\x6b\xe5\x15\x8f\x64\xb9\xe4\x92\xe3\x66\x87\xcd\xb5\xf4\xf3\xce\xaa\xf3\xe1\xbf\x32\x6e\x20\xbe\xcc\x0c\x97\xc9\x3d\x5b\x41\x9c\x09\x2e\x93\xb9\x3f\xb8\x5c\x9e\x3d\x03\xcb\x1c\xa6\xba\x64\x71\xe6\x7d\xe9\xf5\x07\x30\xa9\x6d\x3e\x0e\x8a\x20\x98\x3d\x6b\x03\xd6\x36\xcd\x5c\xed\x58\xc3\x26\xea\xbb\x60\x8f\xf1\xaa\x97\xd2\x6e\xd0\x57\xc6\xa5\x0c\xce\x65\xe7\x79\x4e\x45\x06\x1d\x55\x9e\xea\x48\xf5\xa9\x6f\x79\x49\x85\x85\xea\xc9\xce\xcb\xd5\x11\x6e\x8e\x4c\x53\x2a\xe3\xdd\x99\x01\x09\x33\x6b\x42\xa1\x18\x15\xe1\x13\x97\xe1\xd6\xeb\xb1\xe1\x79\x0d\x74\x40\x82\x7c\xfa\xe7\xfa\x9f\x42\x25\x09\x97\x49\xb0\x54\x26\xa5\x38\x45\x78\xc6\xfa\xe3\x54\xc5\x30\xed\xb9\x7d\x40\x82\x6a\x5a\x9e\x66\x92\x3f\x47\x61\x18\x32\xcb\xc3\x66\xa4\x8d\xad\x62\xeb\xba\x8c\x81\x84\x5b\x34\x9b\x59\x25\x8b\x4c\x47\x61\x78\x36\xf6\xff\xa2\x5d\x67\x28\xf7\x3b\x97\xf2\x78\xfa\xc3\x8f\xff\xf8\xf6\x65\xf6\x78\x73\x7b\x39\x7b\xbc\x39\xbf\x9e\xfd\x54\xdf\xc3\xe8\x2f\x5c\xc0\x34\x64\x60\xd0\x86\x8c\x8e\x99\x69\x5c\xc1\xad\xd7\x77\xa0\xb0\xed\x2d\x6b\xd8\xb4\x77\xac\x61\x53\xdf\x51\xd8\xd1\x55\x9f\xe9\x0f\x3f\x2e\xae\x67\xd7\x8f\x17\xf7\xf3\xc7\xcb\xbb\xf9\xaf\xb3\xbb\x2e\xa4\xb2\xe4\x7f\xf5\x83\xd1\x34\xda\x95\x72\xf7\x02\x99\xd7\x3d\x57\x54\xbb\xe6\xfd\x46\xad\xf0\xf9\xc5\xa8\xb4\x19\x41\x4b\x0e\x22\x2e\x99\x4b\xfd\xd5\x6a\x70\xcd\x87\x5e\x68\x41\x71\x15\xf9\xec\x1c\x3b\xeb\xba\x7a\xd5\x41\xf3\x30\xbb\xbb\x9e\xdf\x9c\x3f\xcc\x6f\x6f\x1e\xbf\xde\x5e\x3d\x2e\xce\x1f\xfe\xde\xc6\x14\x91\x10\x53\x1d\x22\x98\xb4\xfc\x48\xc3\xc5\x52\xe7\xa8\x3e\x5b\x75\x8f\xea\xa6\x5c\xe7\xa0\xab\xdb\xcb\xd9\x97\x6f\x57\x5d\xd9\xe7\x9f\xcf\xfe\x56\xd4\x9d\x8b\x9b\xe9\xce\xcc\x3c\xa5\x09\x44\xc4\x1f\xd8\xce\x87\x88\x51\x49\xcd\xa6\xb9\x77\x91\x09\xb1\x50\x82\xb3\x4d\x44\xe6\xcb\x1b\x85\x0b\x03\x16\xe4\x2e\x50\x6a\x7d\xa9\x95\x56\xdb\xe6\x5d\x41\xde\x66\xed\xa2\xd5\xcb\xeb\x27\xed\x88\x41\xf1\xb2\xc0\x32\xc3\x71\x73\xe1\x86\xb2\x67\x6c\x96\x45\x1a\xdf\x4a\xb1\xb9\x53\xca\xc7\xb2\xdd\x58\x84\x34\x22\x68\xb2\x9d\xf7\x6a\xae\xb8\x06\x6b\xdd\x95\xbc\xaf\x07\xfd\x54\xcc\x83\xd7\x8e\x7c\x36\x6e\x90\xba\x95\x52\xde\x67\x45\x07\x7e\x95\xcb\x3e\xc1\xf6\x49\x5a\xde\x91\xd3\x22\x4b\xb8\x0c\x5c\x69\x00\x0c\x62\x6e\xf6\xc8\x62\xaa\x3b\xb2\x98\xea\x9a\x44\x40\xa8\x49\x1a\xa8\xdb\xd5\xcd\xfb\x9c\xc6\xb1\xab\xf8\xd3\x43\x0a\x54\xb0\x04\x8a\x99\x81\x20\xa1\x08\x76\xfa\xa0\xb4\x12\x2a\xd9\x4c\x1b\x86\x76\xfb\xac\xf3\x1d\x06\xb8\x77\x03\xf2\x14\x54\x86\xd3\x9f\xd3\xc6\x72\x0c\x4b\x9a\x09\x0c\x96\xd6\xf1\xac\x29\x3c\xe3\x5f\x1a\xcf\xcb\xa0\xd8\x82\xf6\xc5\x63\xd2\x8e\x6a\x37\x8f\x24\xcc\xb8\x51\xca\xf2\x24\x28\x47\xf2\xb0\x35\xe3\x44\xf9\xe7\xf1\xd9\xf8\xf3\x49\x61\xde\x37\xc5\x1c\x15\xef\x93\x37\x8f\xf7\x83\x42\xf7\x88\x00\xdc\x8b\xc7\x64\xf2\xdc\xde\x28\xe9\xd0\xb4\x30\xf8\x47\xdf\x2c\x98\x62\x80\xd9\x9e\x54\x1f\xea\x86\x28\xa1\x7b\xa1\x12\x8e\x42\xd4\x19\x49\x40\x60\xb9\x04\x86\x8e\x54\x94\x24\x68\xa7\xd3\x93\x14\x57\xbb\xfd\x0c\x3b\x5e\x67\x4f\x60\x24\x20\xf8\xc9\x3a\xa5\x6e\x32\x1d\xd5\x2d\x54\x3f\x35\xd5\xb8\xb9\xe4\x26\x22\x32\x13\xa2\x5d\xd9\xf6\xd8\x25\x18\x4c\x78\x0b\xcc\x40\xc3\x79\xc5\x4a\xeb\xd6\x5b\xe1\xe2\xa9\xed\x81\xf4\xef\xff\xb4\x00\x55\xd9\x3e\x3c\x82\x5c\x52\x48\x95\x7c\xc3\x01\xc4\x99\xfa\x85\xd1\xe3\xc8\x61\xa3\x3c\xf1\x14\x6c\x1f\x3a\x43\xd4\x70\xbf\xe3\xf4\xf0\xea\x14\x38\x06\x97\x9d\xd7\x54\xd2\x04\xcc\x54\xe4\xe9\xef\xe4\xc7\x0d\xb3\x0c\x30\xe3\x4e\xb7\x39\x88\xde\x6e\xcb\x45\x8b\x34\x97\x52\x8b\xdb\xcb\xc7\xf9\xe2\x27\xcf\x9d\x27\x07\x70\xed\x9e\x3a\xd4\xe5\xdd\xef\xc2\xa9\x2d\x52\xf4\x14\x65\x1a\xe6\xd4\x84\x82\x3f\x85\x07\x70\xeb\xe3\x98\xb8\xbb\xed\x02\x0c\x03\x89\x34\x81\xe9\xa4\x79\xcd\xff\x75\x9e\x5e\x0b\x80\x77\x80\x82\x14\x33\x3b\xd6\x2a\xae\x69\x7b\x75\x9a\xff\x8a\xa3\xc7\xff\xf5\xc4\xa0\x0d\xcf\xb9\x80\x04\xe2\x16\x63\x69\x70\x96\xb3\xb7\x1f\x1e\xaa\xd4\x76\x34\x45\x00\x86\x05\xcb\xb0\x61\x93\xb6\x34\x79\x5a\x21\x6f\x94\xa6\x89\x57\x1a\x91\x2f\x3c\xe6\x06\x7c\x2b\xa1\xa2\x6b\x17\xb7\xdf\x17\xb9\x81\x79\xa2\x03\xa4\xf8\x8a\xf9\x54\x9d\x4e\x7c\x40\x5b\xff\xcc\xe4\x59\xdb\xc0\xbc\x14\x43\xde\x91\x89\x21\x1f\xd0\x63\x37\x5d\x2d\x76\x33\x88\xac\x87\x12\xbf\x38\x8c\x55\xc6\x1b\xc8\xe0\x13\x4c\xe8\x0e\xf3\x5d\xe0\xb8\xa1\xae\xf4\x60\xd5\xe1\x8a\xb8\xd4\x8d\x46\xd2\x8e\xb6\x3d\xad\xa2\xb7\x2b\xf7\x0e\x8d\xcd\x5d\xbd\xbd\xe1\x77\xd7\xc0\x97\x87\x3b\x1f\x3f\x45\x29\xd9\xde\xde\x44\xf9\x64\xfc\x79\x7c\x76\x52\x6d\x6a\x9f\xf5\xe1\xc3\xd9\x8b\x91\x58\x77\x7a\x47\xba\x11\x11\xbb\x33\xea\x9f\x0c\xef\xc0\x94\x86\x2d\x5c\xb2\x6f\x62\x5a\x29\x5b\x68\xae\xd7\xd6\xe1\xca\x36\x98\x23\xc5\xb7\x2b\x97\x3e\x2b\x94\xd9\xdc\x9a\x8b\xea\xa7\x04\x83\x56\x38\x05\xc8\x63\xc5\x00\xc3\xa3\xf5\xef\xb1\xe3\x49\xe6\x18\x2a\xf4\x87\xa1\xe9\x2d\xef\xc7\x61\x69\xd6\xfa\xc3\xd4\xb6\x2a\x7c\xb0\xb7\x86\x1f\x38\x02\x7b\xc1\xf6\xf8\x7b\xc0\x25\x5e\x21\x9e\xf6\x54\xda\x01\xe5\xcd\x4e\x74\x98\x96\x66\xa7\x1a\x3c\xbe\xd9\xb6\x0e\x4c\x8a\xb2\xad\xb5\x3f\x0e\x68\xfe\x20\x25\xcc\x27\x4f\x80\x74\xfb\x03\x83\xfb\xf9\x65\x41\xbd\xde\xe6\xd3\x81\x9a\x53\xaa\x99\x95\x22\x52\xb6\xba\x2b\xbf\xc9\x8a\x88\xff\x3e\xc7\x7f\xc5\x1b\xcf\xe5\x52\xdd\x4a\x5f\x15\xb7\xf5\xb2\x28\x39\x5f\xf9\x12\xd8\x86\x09\xb8\x56\x71\xf5\xbb\x97\xc5\xf6\xb7\x55\xfe\xcf\x99\x5e\x41\x0a\x86\x8a\xd1\x7f\x03\x00\x00\xff\xff\x3a\x78\x18\xc6\x60\x2a\x00\x00") func deployKubernetes119LvmPmemCsiYamlBytes() ([]byte, error) { return bindataRead( @@ -260,7 +260,7 @@ func deployKubernetes119LvmPmemCsiYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "deploy/kubernetes-1.19/lvm/pmem-csi.yaml", size: 10908, mode: os.FileMode(436), modTime: time.Unix(1608146553, 0)} + info := bindataFileInfo{name: "deploy/kubernetes-1.19/lvm/pmem-csi.yaml", size: 10848, mode: os.FileMode(420), modTime: time.Unix(1608283278, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/deploy/crd/pmem-csi.intel.com_deployments.yaml b/deploy/crd/pmem-csi.intel.com_deployments.yaml index 19cd7c363b..80df4d13e2 100644 --- a/deploy/crd/pmem-csi.intel.com_deployments.yaml +++ b/deploy/crd/pmem-csi.intel.com_deployments.yaml @@ -342,6 +342,12 @@ spec: description: Labels contains additional labels for all objects created by the operator. type: object + logFormat: + description: LogFormat + enum: + - text + - json + type: string logLevel: description: LogLevel number for the log verbosity type: integer diff --git a/deploy/crd/pmem-csi.intel.com_deployments_webhook.yaml b/deploy/crd/pmem-csi.intel.com_deployments_webhook.yaml index a1b07a160d..a5739300c6 100644 --- a/deploy/crd/pmem-csi.intel.com_deployments_webhook.yaml +++ b/deploy/crd/pmem-csi.intel.com_deployments_webhook.yaml @@ -307,6 +307,12 @@ spec: type: string description: Labels contains additional labels for all objects created by the operator. type: object + logFormat: + description: LogFormat + enum: + - text + - json + type: string logLevel: description: LogLevel number for the log verbosity type: integer diff --git a/deploy/kubernetes-1.17/direct/pmem-csi.yaml b/deploy/kubernetes-1.17/direct/pmem-csi.yaml index ef79e37981..8aa197f272 100644 --- a/deploy/kubernetes-1.17/direct/pmem-csi.yaml +++ b/deploy/kubernetes-1.17/direct/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.17/direct/testing/pmem-csi.yaml b/deploy/kubernetes-1.17/direct/testing/pmem-csi.yaml index b42d037aee..2fd604ff23 100644 --- a/deploy/kubernetes-1.17/direct/testing/pmem-csi.yaml +++ b/deploy/kubernetes-1.17/direct/testing/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -390,6 +384,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.17/lvm/pmem-csi.yaml b/deploy/kubernetes-1.17/lvm/pmem-csi.yaml index 93b59e032f..23c2720183 100644 --- a/deploy/kubernetes-1.17/lvm/pmem-csi.yaml +++ b/deploy/kubernetes-1.17/lvm/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.17/lvm/testing/pmem-csi.yaml b/deploy/kubernetes-1.17/lvm/testing/pmem-csi.yaml index 4e5c4984e9..cd1028d7af 100644 --- a/deploy/kubernetes-1.17/lvm/testing/pmem-csi.yaml +++ b/deploy/kubernetes-1.17/lvm/testing/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -390,6 +384,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.17/pmem-csi-direct-testing.yaml b/deploy/kubernetes-1.17/pmem-csi-direct-testing.yaml index b42d037aee..2fd604ff23 100644 --- a/deploy/kubernetes-1.17/pmem-csi-direct-testing.yaml +++ b/deploy/kubernetes-1.17/pmem-csi-direct-testing.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -390,6 +384,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.17/pmem-csi-direct.yaml b/deploy/kubernetes-1.17/pmem-csi-direct.yaml index ef79e37981..8aa197f272 100644 --- a/deploy/kubernetes-1.17/pmem-csi-direct.yaml +++ b/deploy/kubernetes-1.17/pmem-csi-direct.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.17/pmem-csi-lvm-testing.yaml b/deploy/kubernetes-1.17/pmem-csi-lvm-testing.yaml index 4e5c4984e9..cd1028d7af 100644 --- a/deploy/kubernetes-1.17/pmem-csi-lvm-testing.yaml +++ b/deploy/kubernetes-1.17/pmem-csi-lvm-testing.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -390,6 +384,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.17/pmem-csi-lvm.yaml b/deploy/kubernetes-1.17/pmem-csi-lvm.yaml index 93b59e032f..23c2720183 100644 --- a/deploy/kubernetes-1.17/pmem-csi-lvm.yaml +++ b/deploy/kubernetes-1.17/pmem-csi-lvm.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.18/direct/pmem-csi.yaml b/deploy/kubernetes-1.18/direct/pmem-csi.yaml index ef79e37981..8aa197f272 100644 --- a/deploy/kubernetes-1.18/direct/pmem-csi.yaml +++ b/deploy/kubernetes-1.18/direct/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.18/direct/testing/pmem-csi.yaml b/deploy/kubernetes-1.18/direct/testing/pmem-csi.yaml index b42d037aee..2fd604ff23 100644 --- a/deploy/kubernetes-1.18/direct/testing/pmem-csi.yaml +++ b/deploy/kubernetes-1.18/direct/testing/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -390,6 +384,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.18/lvm/pmem-csi.yaml b/deploy/kubernetes-1.18/lvm/pmem-csi.yaml index 93b59e032f..23c2720183 100644 --- a/deploy/kubernetes-1.18/lvm/pmem-csi.yaml +++ b/deploy/kubernetes-1.18/lvm/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.18/lvm/testing/pmem-csi.yaml b/deploy/kubernetes-1.18/lvm/testing/pmem-csi.yaml index 4e5c4984e9..cd1028d7af 100644 --- a/deploy/kubernetes-1.18/lvm/testing/pmem-csi.yaml +++ b/deploy/kubernetes-1.18/lvm/testing/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -390,6 +384,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.18/pmem-csi-direct-testing.yaml b/deploy/kubernetes-1.18/pmem-csi-direct-testing.yaml index b42d037aee..2fd604ff23 100644 --- a/deploy/kubernetes-1.18/pmem-csi-direct-testing.yaml +++ b/deploy/kubernetes-1.18/pmem-csi-direct-testing.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -390,6 +384,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.18/pmem-csi-direct.yaml b/deploy/kubernetes-1.18/pmem-csi-direct.yaml index ef79e37981..8aa197f272 100644 --- a/deploy/kubernetes-1.18/pmem-csi-direct.yaml +++ b/deploy/kubernetes-1.18/pmem-csi-direct.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.18/pmem-csi-lvm-testing.yaml b/deploy/kubernetes-1.18/pmem-csi-lvm-testing.yaml index 4e5c4984e9..cd1028d7af 100644 --- a/deploy/kubernetes-1.18/pmem-csi-lvm-testing.yaml +++ b/deploy/kubernetes-1.18/pmem-csi-lvm-testing.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -390,6 +384,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.18/pmem-csi-lvm.yaml b/deploy/kubernetes-1.18/pmem-csi-lvm.yaml index 93b59e032f..23c2720183 100644 --- a/deploy/kubernetes-1.18/pmem-csi-lvm.yaml +++ b/deploy/kubernetes-1.18/pmem-csi-lvm.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19-alpha/direct/pmem-csi.yaml b/deploy/kubernetes-1.19-alpha/direct/pmem-csi.yaml index 9d92a236c5..f6029c785f 100644 --- a/deploy/kubernetes-1.19-alpha/direct/pmem-csi.yaml +++ b/deploy/kubernetes-1.19-alpha/direct/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -352,6 +346,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19-alpha/direct/testing/pmem-csi.yaml b/deploy/kubernetes-1.19-alpha/direct/testing/pmem-csi.yaml index 9d8fdda086..d810dc53c7 100644 --- a/deploy/kubernetes-1.19-alpha/direct/testing/pmem-csi.yaml +++ b/deploy/kubernetes-1.19-alpha/direct/testing/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -400,6 +394,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19-alpha/lvm/pmem-csi.yaml b/deploy/kubernetes-1.19-alpha/lvm/pmem-csi.yaml index b60eff0b26..d145fa4ed5 100644 --- a/deploy/kubernetes-1.19-alpha/lvm/pmem-csi.yaml +++ b/deploy/kubernetes-1.19-alpha/lvm/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -352,6 +346,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19-alpha/lvm/testing/pmem-csi.yaml b/deploy/kubernetes-1.19-alpha/lvm/testing/pmem-csi.yaml index 20db94dc5f..01b1295cca 100644 --- a/deploy/kubernetes-1.19-alpha/lvm/testing/pmem-csi.yaml +++ b/deploy/kubernetes-1.19-alpha/lvm/testing/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -400,6 +394,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19-alpha/pmem-csi-direct-testing.yaml b/deploy/kubernetes-1.19-alpha/pmem-csi-direct-testing.yaml index 9d8fdda086..d810dc53c7 100644 --- a/deploy/kubernetes-1.19-alpha/pmem-csi-direct-testing.yaml +++ b/deploy/kubernetes-1.19-alpha/pmem-csi-direct-testing.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -400,6 +394,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19-alpha/pmem-csi-direct.yaml b/deploy/kubernetes-1.19-alpha/pmem-csi-direct.yaml index 9d92a236c5..f6029c785f 100644 --- a/deploy/kubernetes-1.19-alpha/pmem-csi-direct.yaml +++ b/deploy/kubernetes-1.19-alpha/pmem-csi-direct.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -352,6 +346,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19-alpha/pmem-csi-lvm-testing.yaml b/deploy/kubernetes-1.19-alpha/pmem-csi-lvm-testing.yaml index 20db94dc5f..01b1295cca 100644 --- a/deploy/kubernetes-1.19-alpha/pmem-csi-lvm-testing.yaml +++ b/deploy/kubernetes-1.19-alpha/pmem-csi-lvm-testing.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -400,6 +394,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19-alpha/pmem-csi-lvm.yaml b/deploy/kubernetes-1.19-alpha/pmem-csi-lvm.yaml index b60eff0b26..d145fa4ed5 100644 --- a/deploy/kubernetes-1.19-alpha/pmem-csi-lvm.yaml +++ b/deploy/kubernetes-1.19-alpha/pmem-csi-lvm.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -352,6 +346,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19/direct/pmem-csi.yaml b/deploy/kubernetes-1.19/direct/pmem-csi.yaml index ef79e37981..8aa197f272 100644 --- a/deploy/kubernetes-1.19/direct/pmem-csi.yaml +++ b/deploy/kubernetes-1.19/direct/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19/direct/testing/pmem-csi.yaml b/deploy/kubernetes-1.19/direct/testing/pmem-csi.yaml index b42d037aee..2fd604ff23 100644 --- a/deploy/kubernetes-1.19/direct/testing/pmem-csi.yaml +++ b/deploy/kubernetes-1.19/direct/testing/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -390,6 +384,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19/fake/pmem-csi.yaml b/deploy/kubernetes-1.19/fake/pmem-csi.yaml index 9c66e52940..a9378c2d94 100644 --- a/deploy/kubernetes-1.19/fake/pmem-csi.yaml +++ b/deploy/kubernetes-1.19/fake/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: fake-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19/lvm/pmem-csi.yaml b/deploy/kubernetes-1.19/lvm/pmem-csi.yaml index 93b59e032f..23c2720183 100644 --- a/deploy/kubernetes-1.19/lvm/pmem-csi.yaml +++ b/deploy/kubernetes-1.19/lvm/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19/lvm/testing/pmem-csi.yaml b/deploy/kubernetes-1.19/lvm/testing/pmem-csi.yaml index 4e5c4984e9..cd1028d7af 100644 --- a/deploy/kubernetes-1.19/lvm/testing/pmem-csi.yaml +++ b/deploy/kubernetes-1.19/lvm/testing/pmem-csi.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -390,6 +384,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19/pmem-csi-direct-testing.yaml b/deploy/kubernetes-1.19/pmem-csi-direct-testing.yaml index b42d037aee..2fd604ff23 100644 --- a/deploy/kubernetes-1.19/pmem-csi-direct-testing.yaml +++ b/deploy/kubernetes-1.19/pmem-csi-direct-testing.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -390,6 +384,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19/pmem-csi-direct.yaml b/deploy/kubernetes-1.19/pmem-csi-direct.yaml index ef79e37981..8aa197f272 100644 --- a/deploy/kubernetes-1.19/pmem-csi-direct.yaml +++ b/deploy/kubernetes-1.19/pmem-csi-direct.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: direct-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19/pmem-csi-fake.yaml b/deploy/kubernetes-1.19/pmem-csi-fake.yaml index 9c66e52940..a9378c2d94 100644 --- a/deploy/kubernetes-1.19/pmem-csi-fake.yaml +++ b/deploy/kubernetes-1.19/pmem-csi-fake.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: fake-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=direct - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19/pmem-csi-lvm-testing.yaml b/deploy/kubernetes-1.19/pmem-csi-lvm-testing.yaml index 4e5c4984e9..cd1028d7af 100644 --- a/deploy/kubernetes-1.19/pmem-csi-lvm-testing.yaml +++ b/deploy/kubernetes-1.19/pmem-csi-lvm-testing.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-testing - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -259,6 +252,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -390,6 +384,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kubernetes-1.19/pmem-csi-lvm.yaml b/deploy/kubernetes-1.19/pmem-csi-lvm.yaml index 93b59e032f..23c2720183 100644 --- a/deploy/kubernetes-1.19/pmem-csi-lvm.yaml +++ b/deploy/kubernetes-1.19/pmem-csi-lvm.yaml @@ -1,12 +1,5 @@ # Generated with "make kustomize", do not edit! -apiVersion: v1 -kind: Namespace -metadata: - labels: - pmem-csi.intel.com/deployment: lvm-production - name: pmem-csi ---- apiVersion: v1 kind: ServiceAccount metadata: @@ -244,6 +237,7 @@ spec: - command: - /usr/local/bin/pmem-csi-driver - -v=3 + - -logging-format=text - -mode=controller - -endpoint=unix:///csi/csi-controller.sock - -registryEndpoint=tcp://0.0.0.0:10000 @@ -342,6 +336,7 @@ spec: - /usr/local/bin/pmem-csi-driver - -deviceManager=lvm - -v=3 + - -logging-format=text - -mode=node - -endpoint=unix:///csi/csi.sock - -nodeid=$(KUBE_NODE_NAME) diff --git a/deploy/kustomize/driver/kustomization.yaml b/deploy/kustomize/driver/kustomization.yaml index 8b38dec781..00b80c6553 100644 --- a/deploy/kustomize/driver/kustomization.yaml +++ b/deploy/kustomize/driver/kustomization.yaml @@ -1,3 +1,2 @@ resources: - pmem-csi.yaml - - namespace.yaml diff --git a/deploy/kustomize/driver/namespace.yaml b/deploy/kustomize/driver/namespace.yaml deleted file mode 100644 index 854af147a8..0000000000 --- a/deploy/kustomize/driver/namespace.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: pmem-csi diff --git a/deploy/kustomize/driver/pmem-csi.yaml b/deploy/kustomize/driver/pmem-csi.yaml index 175d79d426..821b77fef3 100644 --- a/deploy/kustomize/driver/pmem-csi.yaml +++ b/deploy/kustomize/driver/pmem-csi.yaml @@ -85,6 +85,7 @@ spec: command: [ "/usr/local/bin/pmem-csi-driver", "-v=3", + "-logging-format=text", "-mode=controller", "-endpoint=unix:///csi/csi-controller.sock", "-registryEndpoint=tcp://0.0.0.0:10000", @@ -166,6 +167,7 @@ spec: command: [ "/usr/local/bin/pmem-csi-driver", "-v=3", + "-logging-format=text", "-mode=node", "-endpoint=unix:///csi/csi.sock", "-nodeid=$(KUBE_NODE_NAME)", diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 4dcce0eb6b..32f1a9c197 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -257,6 +257,8 @@ The klog.Info statements are used via the verbosity checker using the following - klog.V(4) - Elevated verbosity messages. - klog.V(5) - Even more verbose messages, useful for debugging and issue resolving. This level is used in testing type of deployment examples. +These are *not* the same levels as in the [Kubernetes logging conventions](https://github.com/kubernetes/community/blob/4eeba4d57bed01502cb09598a74d21671d4ee876/contributors/devel/sig-instrumentation/logging.md). + There are also messages using klog.Warning, klog.Error and klog.Fatal, and their formatted counterparts. ## Performance and resource measurements diff --git a/docs/install.md b/docs/install.md index 4307528cee..f325370ac0 100644 --- a/docs/install.md +++ b/docs/install.md @@ -63,6 +63,11 @@ Optionally, the administrator can enable [the scheduler extensions](#enable-scheduler-extensions) (recommended) and monitoring of resource usage via the [metrics support](#metrics-support). +Optionally, the log output format can be changed from the default +"text" format (= the traditional glog format) to "json" (= output via +[zap](https://github.com/uber-go/zap/blob/master/README.md)) for easier +processing. + When using the operator, existing PMEM-CSI installations can be upgraded seamlessly by installing a newer version of the operator. Downgrading by installing an older version is also @@ -239,17 +244,26 @@ PMEM-CSI operator or by using reference yaml files provided in source code. [PMEM-CSI operator](./design.md#operator) facilitates deploying and managing the [PMEM-CSI driver](https://github.com/intel/pmem-csi) on a Kubernetes cluster. -If your cluster supports managing the operators using the [Operator Life Manager](https://olm.operatorframework.io/), -then it is recommended to install the PMEM-CSI operator from the [OperatorHub](https://operatorhub.io/operator/pmem-csi-operator). -Otherwise, follow below steps to install the operator manually: +##### Installing the operator from Operator Hub + +If your cluster supports managing the operators using the [Operator +Lifecycle Manager](https://olm.operatorframework.io/), then it is +recommended to install the PMEM-CSI operator from the +[OperatorHub](https://operatorhub.io/operator/pmem-csi-operator). Follow +the instructions shown by the "Install" button. When using this +approach, the operator itself always runs with default parameters, in +particular log output in "text" format. + +##### Installing the operator from YAML -- **Install the PMEM-CSI Deployment CRD** +Alternatively, the you can install the operator manually from YAML files. +First install the PMEM-CSI Deployment CRD: ``` console $ kubectl create -f https://github.com/intel/pmem-csi/raw/devel/deploy/crd/pmem-csi.intel.com_deployments.yaml ``` -- **Install the PMEM-CSI operator** +Then install the PMEM-CSI operator itself: ``` console $ kubectl create -f https://github.com/intel/pmem-csi/raw/devel/deploy/operator/pmem-csi-operator.yaml @@ -259,9 +273,9 @@ The operator gets deployed in a namespace called 'pmem-csi' which gets created b **NOTE:** Refer to the [PMEM-CSI operator API conversion webhook](#pmem-csi-operator-api-conversion-webhook) section for steps to install the operator with built-in conversion webhook. -- **Create a custom resource** +##### Create a driver deployment -Once the operator deployed in the previous step is in the `Running` state, +Once the operator is installed and running, it is ready to handle PMEM-CSI `Deployment` objects in the `pmem-csi.intel.com` API group. Refer to the [Deployment CRD API](#PMEM-CSI-Deployment-CRD) for a complete list of supported properties. @@ -371,8 +385,6 @@ pmem-csi-intel-com-node-msgds 2/2 Running 0 51s pmem-csi-operator-749c7c7c69-k5k8n 1/1 Running 0 3m ``` -- **Setup deployment certificates** - By default, the operator creates the needed private keys and certificates required for running the driver as described in the [driver security](./design.md#security) section. Those certificates are generated by the operator using a self-signed CA. @@ -399,6 +411,17 @@ To get the source code, use: $ git clone https://github.com/intel/pmem-csi ``` +- **Choose a namespace** + +By default, setting up certificates as described in the next step will +automatically create a `pmem-csi` namespace if it does not exist yet. +Later the driver will be installed in that namespace. + +This can be changed by: +- setting the `TEST_DRIVER_NAMESPACE` env variable to a different name + when invoking `setup-ca-kubernetes.sh` and +- modifying the deployment with kustomize as explained below. + - **Set up certificates** Certificates are required as explained in [Security](design.md#security). @@ -463,7 +486,6 @@ for `kubectl kustomize`. For example: bases: - ../deploy/kubernetes-1.17/lvm EOF - $ kubectl create namespace pmem-driver $ kubectl create --kustomize my-pmem-csi-deployment ``` @@ -1232,9 +1254,10 @@ of the API specification. | nodeRegistrarImage | string | [CSI node driver registrar](https://github.com/kubernetes-csi/node-driver-registrar) docker image name | latest [node driver registrar](https://kubernetes-csi.github.io/docs/node-driver-registrar.html) stable release image2 | | pullPolicy | string | Docker image pull policy. either one of `Always`, `Never`, `IfNotPresent` | `IfNotPresent` | | logLevel | integer | PMEM-CSI driver logging level | 3 | +| logFormat | text | log output format | "text" or "json" 3 | | deviceMode | string | Device management mode to use. Supports one of `lvm` or `direct` | `lvm` -| controllerResources | [ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#resourcerequirements-v1-core) | Describes the compute resource requirements for controller pod.
3_Deprecated and only available in `v1alpha1`._ | -| nodeResources | [ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#resourcerequirements-v1-core) | Describes the compute resource requirements for the pods running on node(s).
_3Deprecated and only available in `v1alpha1`._ | +| controllerResources | [ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#resourcerequirements-v1-core) | Describes the compute resource requirements for controller pod.
4_Deprecated and only available in `v1alpha1`._ | +| nodeResources | [ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#resourcerequirements-v1-core) | Describes the compute resource requirements for the pods running on node(s).
_4Deprecated and only available in `v1alpha1`._ | | controllerDriverResources | [ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#resourcerequirements-v1-core) | Describes the compute resource requirements for controller driver container running on master node. Available since `v1beta1`. | | nodeDriverResources | [ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#resourcerequirements-v1-core) | Describes the compute resource requirements for the driver container running on worker node(s).
_Available since `v1beta1`._ | | provisionerResources | [ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/#resourcerequirements-v1-core) | Describes the compute resource requirements for the [external provisioner](https://kubernetes-csi.github.io/docs/external-provisioner.html) sidecar container.
_Available since `v1beta1`._ | @@ -1259,7 +1282,13 @@ appropriate values: operator dynamically chooses suitable image versions. Users have to take care of that themselves when overriding the values. -3 Pod level resource requirements (`nodeResources` and `controllerResources`) +3 In PMEM-CSI 0.9.0, "json" output is only available for +the PMEM-CSI container. The sidecars are still producing plain text +messages. This may change in the future. Also, the migration from +formatted log messages (= printf style) to structured log messages +(message plus key/value pairs) is not complete. + +4 Pod level resource requirements (`nodeResources` and `controllerResources`) are deprecated in favor of per-container resource requirements (`nodeDriverResources`, `nodeRegistrarResources`, `controllerDriverResources` and `provisionerResources`). diff --git a/go.mod b/go.mod index 35de96cd20..c8f80c75ec 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c // indirect github.com/emicklei/go-restful v2.9.6+incompatible // indirect github.com/go-bindata/go-bindata v3.1.2+incompatible - github.com/go-logr/logr v0.2.1 + github.com/go-logr/logr v0.3.0 github.com/go-logr/zapr v0.2.0 // indirect github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect github.com/golang/protobuf v1.4.2 diff --git a/go.sum b/go.sum index 8d06293ce5..839c7a5c51 100644 --- a/go.sum +++ b/go.sum @@ -223,8 +223,8 @@ github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.2.1 h1:fV3MLmabKIZ383XifUjFSwcoGee0v9qgPp8wy5svibE= -github.com/go-logr/logr v0.2.1/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v0.3.0 h1:q4c+kbcR0d5rSurhBR8dIgieOaYpXtsdTYfx22Cu6rs= +github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v0.2.0 h1:v6Ji8yBW77pva6NkJKQdHLAJKrIJKRHz0RXwPqCHSR4= github.com/go-logr/zapr v0.2.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= diff --git a/pkg/apis/pmemcsi/v1beta1/deployment_types.go b/pkg/apis/pmemcsi/v1beta1/deployment_types.go index ad783ed01d..016f7b6bbd 100644 --- a/pkg/apis/pmemcsi/v1beta1/deployment_types.go +++ b/pkg/apis/pmemcsi/v1beta1/deployment_types.go @@ -50,6 +50,15 @@ const ( DeviceModeFake DeviceMode = "fake" ) +type LogFormat string + +const ( + // LogFormatText selects logging via the traditional glog (aka klog) plain text format. + LogFormatText LogFormat = "text" + // LogFormatJSON selects logging via the zap JSON format. + LogFormatJSON LogFormat = "json" +) + // +k8s:deepcopy-gen=true // DeploymentSpec defines the desired state of Deployment type DeploymentSpec struct { @@ -76,6 +85,10 @@ type DeploymentSpec struct { DeviceMode DeviceMode `json:"deviceMode,omitempty"` // LogLevel number for the log verbosity LogLevel uint16 `json:"logLevel,omitempty"` + // LogFormat + // +kubebuilder:validation:Required + // +kubebuilder:validation:Enum=text;json + LogFormat LogFormat `json:"logFormat,omitempty"` // RegistryCert encoded certificate signed by a CA for registry server authentication // If not provided, provisioned one by the operator using self-signed CA RegistryCert []byte `json:"registryCert,omitempty"` @@ -367,6 +380,9 @@ func (d *Deployment) EnsureDefaults(operatorImage string) error { if d.Spec.LogLevel == 0 { d.Spec.LogLevel = DefaultLogLevel } + if d.Spec.LogFormat == "" { + d.Spec.LogFormat = LogFormatText + } if d.Spec.ProvisionerImage == "" { d.Spec.ProvisionerImage = DefaultProvisionerImage diff --git a/pkg/deployments/load.go b/pkg/deployments/load.go index a7b57679d4..5b531a5398 100644 --- a/pkg/deployments/load.go +++ b/pkg/deployments/load.go @@ -69,6 +69,12 @@ func LoadAndCustomizeObjects(kubernetes version.Version, deviceMode api.DeviceMo []byte("-v=3"), []byte(fmt.Sprintf("-v=%d", deployment.Spec.LogLevel))) + if deployment.Spec.LogFormat != "" { + *yaml = bytes.ReplaceAll(*yaml, + []byte("-logging-format=text"), + []byte(fmt.Sprintf("-logging-format=%s", deployment.Spec.LogFormat))) + } + *yaml = pmemImage.ReplaceAll(*yaml, []byte("image: "+deployment.Spec.Image)) } @@ -232,12 +238,6 @@ func loadObjects(kubernetes version.Version, deviceMode api.DeviceMode, if err != nil { return nil, fmt.Errorf("decode item %q from file %q: %v", item, path, err) } - if obj.GetKind() == "Namespace" { - // Though the driver deployment manifests have Namespace object defined - // but, Namespaces are not owned by PMEM-CSI Deployments. So we can - // ignore. - continue - } if patchUnstructured != nil { patchUnstructured(&obj) } diff --git a/pkg/logger/flag.go b/pkg/logger/flag.go new file mode 100644 index 0000000000..b4cac8f89c --- /dev/null +++ b/pkg/logger/flag.go @@ -0,0 +1,35 @@ +/* +Copyright 2020 Intel Coporation. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package logger + +import ( + "flag" + + utilerrors "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/component-base/logs" +) + +func NewFlag() *Options { + f := &Options{} + flag.Var(f, "logging-format", "determines log output format, 'text' and 'json' are supported") + return f +} + +// Options is a wrapper around Options which makes +// it usable with flags.Var. +type Options struct { + logs.Options +} + +func (f *Options) Set(value string) error { + f.LogFormat = value + return utilerrors.NewAggregate(f.Validate()) +} + +func (f *Options) String() string { + return f.LogFormat +} diff --git a/pkg/logger/klogr/klogr.go b/pkg/logger/klogr/klogr.go new file mode 100644 index 0000000000..9e526305d2 --- /dev/null +++ b/pkg/logger/klogr/klogr.go @@ -0,0 +1,212 @@ +/* +Copyright 2019 The Kubernetes Authors. +Copyright 2020 Intel Coporation. + +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package klogr implements github.com/go-logr/logr.Logger in terms of +// k8s.io/klog. It's a fork of klog/klogr because that serializes +// differently than klog itself. +// +// The formating of key/value pairs had to be copied from +// klog because there is no klog.InfosDepth and klog.ErrorsDepth +// and therefore klog cannot be called. +// +// This package can be removed once https://github.com/kubernetes/klog/pull/197 +// is merged. +package klogr + +import ( + "bytes" + "fmt" + "runtime" + + "github.com/go-logr/logr" + "k8s.io/klog/v2" +) + +// New returns a logr.Logger which is implemented by klog. +func New() logr.Logger { + return klogger{ + level: 0, + prefix: "", + values: nil, + } +} + +type klogger struct { + level int + prefix string + values []interface{} +} + +func (l klogger) clone() klogger { + return klogger{ + level: l.level, + prefix: l.prefix, + values: copySlice(l.values), + } +} + +func copySlice(in []interface{}) []interface{} { + out := make([]interface{}, len(in)) + copy(out, in) + return out +} + +// Magic string for intermediate frames that we should ignore. +const autogeneratedFrameName = "" + +// Discover how many frames we need to climb to find the caller. This approach +// was suggested by Ian Lance Taylor of the Go team, so it *should* be safe +// enough (famous last words). +func framesToCaller() int { + // 1 is the immediate caller. 3 should be too many. + for i := 1; i < 3; i++ { + _, file, _, _ := runtime.Caller(i + 1) // +1 for this function's frame + if file != autogeneratedFrameName { + return i + } + } + return 1 // something went wrong, this is safe +} + +// trimDuplicates will deduplicates elements provided in multiple KV tuple +// slices, whilst maintaining the distinction between where the items are +// contained. +func trimDuplicates(kvLists ...[]interface{}) [][]interface{} { + // maintain a map of all seen keys + seenKeys := map[interface{}]struct{}{} + // build the same number of output slices as inputs + outs := make([][]interface{}, len(kvLists)) + // iterate over the input slices backwards, as 'later' kv specifications + // of the same key will take precedence over earlier ones + for i := len(kvLists) - 1; i >= 0; i-- { + // initialise this output slice + outs[i] = []interface{}{} + // obtain a reference to the kvList we are processing + kvList := kvLists[i] + + // start iterating at len(kvList) - 2 (i.e. the 2nd last item) for + // slices that have an even number of elements. + // We add (len(kvList) % 2) here to handle the case where there is an + // odd number of elements in a kvList. + // If there is an odd number, then the last element in the slice will + // have the value 'null'. + for i2 := len(kvList) - 2 + (len(kvList) % 2); i2 >= 0; i2 -= 2 { + k := kvList[i2] + // if we have already seen this key, do not include it again + if _, ok := seenKeys[k]; ok { + continue + } + // make a note that we've observed a new key + seenKeys[k] = struct{}{} + // attempt to obtain the value of the key + var v interface{} + // i2+1 should only ever be out of bounds if we handling the first + // iteration over a slice with an odd number of elements + if i2+1 < len(kvList) { + v = kvList[i2+1] + } + // add this KV tuple to the *start* of the output list to maintain + // the original order as we are iterating over the slice backwards + outs[i] = append([]interface{}{k, v}, outs[i]...) + } + } + return outs +} + +// Serialization from klog.Infos (https://github.com/kubernetes/klog/blob/199a06da05a146312d7e58c2eeda84f069b1b932/klog.go#L798-L841). +const missingValue = "(MISSING)" + +func kvListFormat(keysAndValues ...interface{}) string { + b := bytes.Buffer{} + for i := 0; i < len(keysAndValues); i += 2 { + var v interface{} + k := keysAndValues[i] + if i+1 < len(keysAndValues) { + v = keysAndValues[i+1] + } else { + v = missingValue + } + if i > 0 { + b.WriteByte(' ') + } + + switch v.(type) { + case string, error: + b.WriteString(fmt.Sprintf("%s=%q", k, v)) + default: + if _, ok := v.(fmt.Stringer); ok { + b.WriteString(fmt.Sprintf("%s=%q", k, v)) + } else { + b.WriteString(fmt.Sprintf("%s=%+v", k, v)) + } + } + } + return b.String() +} + +func (l klogger) Info(msg string, kvList ...interface{}) { + if l.Enabled() { + trimmed := trimDuplicates(l.values, kvList) + fixedStr := kvListFormat(trimmed[0]...) + userStr := kvListFormat(trimmed[1]...) + klog.InfoDepth(framesToCaller(), concatenate(l.prefix, msg, fixedStr, userStr)...) + } +} + +func (l klogger) Enabled() bool { + return bool(klog.V(klog.Level(l.level)).Enabled()) +} + +func (l klogger) Error(err error, msg string, kvList ...interface{}) { + errStr := kvListFormat("err", err) + trimmed := trimDuplicates(l.values, kvList) + fixedStr := kvListFormat(trimmed[0]...) + userStr := kvListFormat(trimmed[1]...) + klog.ErrorDepth(framesToCaller(), concatenate(l.prefix, msg, errStr, fixedStr, userStr)...) +} + +func concatenate(prefix string, pieces ...string) []interface{} { + var args []interface{} + if prefix != "" { + args = append(args, prefix+":") + } + for _, piece := range pieces { + if piece != "" { + if args != nil { + args = append(args, " ") + } + args = append(args, piece) + } + } + return args +} + +func (l klogger) V(level int) logr.Logger { + new := l.clone() + new.level = level + return new +} + +// WithName returns a new logr.Logger with the specified name appended. klogr +// uses '/' characters to separate name elements. Callers should not pass '/' +// in the provided name string, but this library does not actually enforce that. +func (l klogger) WithName(name string) logr.Logger { + new := l.clone() + if len(l.prefix) > 0 { + new.prefix = l.prefix + "/" + } + new.prefix += name + return new +} + +func (l klogger) WithValues(kvList ...interface{}) logr.Logger { + new := l.clone() + new.values = append(new.values, kvList...) + return new +} + +var _ logr.Logger = klogger{} diff --git a/pkg/logger/klogr/klogr_test.go b/pkg/logger/klogr/klogr_test.go new file mode 100644 index 0000000000..3ad5fde7a6 --- /dev/null +++ b/pkg/logger/klogr/klogr_test.go @@ -0,0 +1,154 @@ +/* +Copyright 2019 The Kubernetes Authors. +Copyright 2020 Intel Coporation. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package klogr + +import ( + "bytes" + "errors" + "flag" + "testing" + + "k8s.io/klog/v2" + + "github.com/go-logr/logr" +) + +func TestInfo(t *testing.T) { + klog.InitFlags(nil) + flag.CommandLine.Set("v", "10") + flag.CommandLine.Set("skip_headers", "true") + flag.CommandLine.Set("logtostderr", "false") + flag.CommandLine.Set("alsologtostderr", "false") + flag.CommandLine.Set("stderrthreshold", "10") + flag.Parse() + + tests := map[string]struct { + klogr logr.Logger + text string + keysAndValues []interface{} + names []string + err error + expectedOutput string + }{ + "should log with values passed to keysAndValues": { + klogr: New().V(0), + text: "test", + keysAndValues: []interface{}{"akey", "avalue"}, + expectedOutput: `test akey="avalue" +`, + }, + "should support single name": { + klogr: New().V(0), + names: []string{"hello"}, + text: "test", + keysAndValues: []interface{}{"akey", "avalue"}, + expectedOutput: `hello: test akey="avalue" +`, + }, + "should support multiple names": { + klogr: New().V(0), + names: []string{"hello", "world"}, + text: "test", + keysAndValues: []interface{}{"akey", "avalue"}, + expectedOutput: `hello/world: test akey="avalue" +`, + }, + "should not print duplicate keys with the same value": { + klogr: New().V(0), + text: "test", + keysAndValues: []interface{}{"akey", "avalue", "akey", "avalue"}, + expectedOutput: `test akey="avalue" +`, + }, + "should only print the last duplicate key when the values are passed to Info": { + klogr: New().V(0), + text: "test", + keysAndValues: []interface{}{"akey", "avalue", "akey", "avalue2"}, + expectedOutput: `test akey="avalue2" +`, + }, + "should only print the duplicate key that is passed to Info if one was passed to the logger": { + klogr: New().WithValues("akey", "avalue"), + text: "test", + keysAndValues: []interface{}{"akey", "avalue"}, + expectedOutput: `test akey="avalue" +`, + }, + "should only print the key passed to Info when one is already set on the logger": { + klogr: New().WithValues("akey", "avalue"), + text: "test", + keysAndValues: []interface{}{"akey", "avalue2"}, + expectedOutput: `test akey="avalue2" +`, + }, + "should correctly handle odd-numbers of KVs": { + text: "test", + keysAndValues: []interface{}{"akey", "avalue", "akey2"}, + expectedOutput: `test akey="avalue" akey2= +`, + }, + "should correctly html characters": { + text: "test", + keysAndValues: []interface{}{"akey", "<&>"}, + expectedOutput: `test akey="<&>" +`, + }, + "should correctly handle odd-numbers of KVs in both log values and Info args": { + klogr: New().WithValues("basekey1", "basevar1", "basekey2"), + text: "test", + keysAndValues: []interface{}{"akey", "avalue", "akey2"}, + expectedOutput: `test basekey1="basevar1" basekey2= akey="avalue" akey2= +`, + }, + "should correctly print regular error types": { + klogr: New().V(0), + text: "test", + keysAndValues: []interface{}{"err", errors.New("whoops")}, + expectedOutput: `test err="whoops" +`, + }, + "should correctly print regular error types when using logr.Error": { + klogr: New().V(0), + text: "test", + err: errors.New("whoops"), + // The message is printed to three different log files (info, warning, error), so we see it three times in our output buffer. + expectedOutput: `test err="whoops" +test err="whoops" +test err="whoops" +`, + }, + } + for n, test := range tests { + t.Run(n, func(t *testing.T) { + klogr := test.klogr + if klogr == nil { + klogr = New() + } + for _, name := range test.names { + klogr = klogr.WithName(name) + } + + // hijack the klog output + tmpWriteBuffer := bytes.NewBuffer(nil) + klog.SetOutput(tmpWriteBuffer) + + if test.err != nil { + klogr.Error(test.err, test.text, test.keysAndValues...) + } else { + klogr.Info(test.text, test.keysAndValues...) + } + // call Flush to ensure the text isn't still buffered + klog.Flush() + + actual := tmpWriteBuffer.String() + if actual != test.expectedOutput { + t.Errorf("expected %q did not match actual %q", test.expectedOutput, actual) + } + }) + } +} diff --git a/pkg/logger/kubernetes.go b/pkg/logger/kubernetes.go new file mode 100644 index 0000000000..2ed66f52a9 --- /dev/null +++ b/pkg/logger/kubernetes.go @@ -0,0 +1,31 @@ +/* +Copyright 2020 Intel Coporation. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package logger + +import ( + "fmt" + + "k8s.io/klog/v2" +) + +// ObjectRef references a kubernetes object +type ObjectRefWithType struct { + klog.ObjectRef + Type string `json:"type,omitempty"` +} + +func (ref ObjectRefWithType) String() string { + return fmt.Sprintf("%s <%s>", ref.ObjectRef.String(), ref.Type) +} + +// KObj returns ObjectRefWithType from ObjectMeta +func KObjWithType(obj klog.KMetadata) ObjectRefWithType { + return ObjectRefWithType{ + ObjectRef: klog.KObj(obj), + Type: fmt.Sprintf("%T", obj), + } +} diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go new file mode 100644 index 0000000000..9d3a358bef --- /dev/null +++ b/pkg/logger/logger.go @@ -0,0 +1,40 @@ +/* +Copyright 2020 Intel Coporation. + +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package logger defines an interface for adding a structured logger +// to a context and retrieving it again. The fallback when a context +// doesn't have a logger is the global klog logger. +// +// This uses the same context key as logr and thus is compatible +// with code that uses that interface. The difference is that +// the Get function here never returns nil. +// +// Also contains an extension of klog.KObj which includes the +// type of the object in the log output. +package logger + +import ( + "context" + + "github.com/intel/pmem-csi/pkg/logger/klogr" + + "github.com/go-logr/logr" +) + +// Set returns a context with the given structured logger added to the given context. +func Set(ctx context.Context, logger logr.Logger) context.Context { + return logr.NewContext(ctx, logger) +} + +// Get returns the structured logger stored in the context or (if not set) +// a klog based logger. +func Get(ctx context.Context) logr.Logger { + l := logr.FromContext(ctx) + if l != nil { + return l + } + return klogr.New() +} diff --git a/pkg/logger/testinglogger/testinglogger.go b/pkg/logger/testinglogger/testinglogger.go new file mode 100644 index 0000000000..ea6f86073e --- /dev/null +++ b/pkg/logger/testinglogger/testinglogger.go @@ -0,0 +1,198 @@ +/* +Copyright 2019 The Kubernetes Authors. +Copyright 2020 Intel Coporation. + +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package testinglogger contains an implementation of the logr interface +// which is logging through a function like testing.TB.Log function. +// Serialization of the structured log parameters is done in the format +// used also by klog/klogr. +// +// The code had to be copied because: +// - klog/klogr always prints to the global klog +// - go-logr/stdr (a very similar code) allows redirecting output, +// but its own functions then appear as source code location +// because they are not calling t.Helper() +// - we want to output *all* messages regardless of their log level; +// "go test" will suppress output by default unless a test +// failed, in which case we want all output that we can get +package testinglogger + +import ( + "bytes" + "fmt" + + "github.com/go-logr/logr" +) + +// Logger is the relevant subset of testing.TB. +type Logger interface { + Helper() + Log(args ...interface{}) +} + +// New constructs a new logger for the given test interface. +func New(l Logger) logr.Logger { + return tlogger{ + l: l, + prefix: "", + values: nil, + } +} + +type tlogger struct { + l Logger + prefix string + values []interface{} +} + +func (l tlogger) clone() tlogger { + return tlogger{ + l: l.l, + prefix: l.prefix, + values: copySlice(l.values), + } +} + +func copySlice(in []interface{}) []interface{} { + out := make([]interface{}, len(in)) + copy(out, in) + return out +} + +// trimDuplicates will deduplicates elements provided in multiple KV tuple +// slices, whilst maintaining the distinction between where the items are +// contained. +func trimDuplicates(kvLists ...[]interface{}) [][]interface{} { + // maintain a map of all seen keys + seenKeys := map[interface{}]struct{}{} + // build the same number of output slices as inputs + outs := make([][]interface{}, len(kvLists)) + // iterate over the input slices backwards, as 'later' kv specifications + // of the same key will take precedence over earlier ones + for i := len(kvLists) - 1; i >= 0; i-- { + // initialise this output slice + outs[i] = []interface{}{} + // obtain a reference to the kvList we are processing + kvList := kvLists[i] + + // start iterating at len(kvList) - 2 (i.e. the 2nd last item) for + // slices that have an even number of elements. + // We add (len(kvList) % 2) here to handle the case where there is an + // odd number of elements in a kvList. + // If there is an odd number, then the last element in the slice will + // have the value 'null'. + for i2 := len(kvList) - 2 + (len(kvList) % 2); i2 >= 0; i2 -= 2 { + k := kvList[i2] + // if we have already seen this key, do not include it again + if _, ok := seenKeys[k]; ok { + continue + } + // make a note that we've observed a new key + seenKeys[k] = struct{}{} + // attempt to obtain the value of the key + var v interface{} + // i2+1 should only ever be out of bounds if we handling the first + // iteration over a slice with an odd number of elements + if i2+1 < len(kvList) { + v = kvList[i2+1] + } + // add this KV tuple to the *start* of the output list to maintain + // the original order as we are iterating over the slice backwards + outs[i] = append([]interface{}{k, v}, outs[i]...) + } + } + return outs +} + +// Serialization from klog.Infos (https://github.com/kubernetes/klog/blob/199a06da05a146312d7e58c2eeda84f069b1b932/klog.go#L798-L841). +const missingValue = "(MISSING)" + +func kvListFormat(keysAndValues ...interface{}) string { + b := bytes.Buffer{} + for i := 0; i < len(keysAndValues); i += 2 { + var v interface{} + k := keysAndValues[i] + if i+1 < len(keysAndValues) { + v = keysAndValues[i+1] + } else { + v = missingValue + } + if i > 0 { + b.WriteByte(' ') + } + + switch v.(type) { + case string, error: + b.WriteString(fmt.Sprintf("%s=%q", k, v)) + default: + if _, ok := v.(fmt.Stringer); ok { + b.WriteString(fmt.Sprintf("%s=%q", k, v)) + } else { + b.WriteString(fmt.Sprintf("%s=%+v", k, v)) + } + } + } + return b.String() +} + +func (l tlogger) Info(msg string, kvList ...interface{}) { + l.l.Helper() + trimmed := trimDuplicates(l.values, kvList) + fixedStr := kvListFormat(trimmed[0]...) + userStr := kvListFormat(trimmed[1]...) + l.log("INFO", l.prefix, msg, fixedStr, userStr) +} + +func (l tlogger) Enabled() bool { + return true +} + +func (l tlogger) Error(err error, msg string, kvList ...interface{}) { + l.l.Helper() + errStr := kvListFormat("err", err) + trimmed := trimDuplicates(l.values, kvList) + fixedStr := kvListFormat(trimmed[0]...) + userStr := kvListFormat(trimmed[1]...) + l.log("ERROR", l.prefix, msg, errStr, fixedStr, userStr) +} + +func (l tlogger) log(what, prefix string, pieces ...string) { + args := []interface{}{what} + if prefix != "" { + args = append(args, prefix+":") + } + for _, piece := range pieces { + if piece != "" { + args = append(args, piece) + } + } + l.l.Log(args...) +} + +func (l tlogger) V(level int) logr.Logger { + // No-op, level is ignored. + return l +} + +// WithName returns a new logr.Logger with the specified name appended. klogr +// uses '/' characters to separate name elements. Callers should not pass '/' +// in the provided name string, but this library does not actually enforce that. +func (l tlogger) WithName(name string) logr.Logger { + new := l.clone() + if len(l.prefix) > 0 { + new.prefix = l.prefix + "/" + } + new.prefix += name + return new +} + +func (l tlogger) WithValues(kvList ...interface{}) logr.Logger { + new := l.clone() + new.values = append(new.values, kvList...) + return new +} + +var _ logr.Logger = tlogger{} diff --git a/pkg/logger/testinglogger/testinglogger_test.go b/pkg/logger/testinglogger/testinglogger_test.go new file mode 100644 index 0000000000..e36dc1fdd1 --- /dev/null +++ b/pkg/logger/testinglogger/testinglogger_test.go @@ -0,0 +1,142 @@ +/* +Copyright 2019 The Kubernetes Authors. +Copyright 2020 Intel Coporation. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package testinglogger + +import ( + "bytes" + "errors" + "fmt" + "testing" +) + +func TestInfo(t *testing.T) { + tests := map[string]struct { + text string + withValues []interface{} + keysAndValues []interface{} + names []string + err error + expectedOutput string + }{ + "should log with values passed to keysAndValues": { + text: "test", + keysAndValues: []interface{}{"akey", "avalue"}, + expectedOutput: `INFO test akey="avalue" +`, + }, + "should support single name": { + names: []string{"hello"}, + text: "test", + keysAndValues: []interface{}{"akey", "avalue"}, + expectedOutput: `INFO hello: test akey="avalue" +`, + }, + "should support multiple names": { + names: []string{"hello", "world"}, + text: "test", + keysAndValues: []interface{}{"akey", "avalue"}, + expectedOutput: `INFO hello/world: test akey="avalue" +`, + }, + "should not print duplicate keys with the same value": { + text: "test", + keysAndValues: []interface{}{"akey", "avalue", "akey", "avalue"}, + expectedOutput: `INFO test akey="avalue" +`, + }, + "should only print the last duplicate key when the values are passed to Info": { + text: "test", + keysAndValues: []interface{}{"akey", "avalue", "akey", "avalue2"}, + expectedOutput: `INFO test akey="avalue2" +`, + }, + "should only print the duplicate key that is passed to Info if one was passed to the logger": { + withValues: []interface{}{"akey", "avalue"}, + text: "test", + keysAndValues: []interface{}{"akey", "avalue"}, + expectedOutput: `INFO test akey="avalue" +`, + }, + "should only print the key passed to Info when one is already set on the logger": { + withValues: []interface{}{"akey", "avalue"}, + text: "test", + keysAndValues: []interface{}{"akey", "avalue2"}, + expectedOutput: `INFO test akey="avalue2" +`, + }, + "should correctly handle odd-numbers of KVs": { + text: "test", + keysAndValues: []interface{}{"akey", "avalue", "akey2"}, + expectedOutput: `INFO test akey="avalue" akey2= +`, + }, + "should correctly html characters": { + text: "test", + keysAndValues: []interface{}{"akey", "<&>"}, + expectedOutput: `INFO test akey="<&>" +`, + }, + "should correctly handle odd-numbers of KVs in both log values and Info args": { + withValues: []interface{}{"basekey1", "basevar1", "basekey2"}, + text: "test", + keysAndValues: []interface{}{"akey", "avalue", "akey2"}, + expectedOutput: `INFO test basekey1="basevar1" basekey2= akey="avalue" akey2= +`, + }, + "should correctly print regular error types": { + text: "test", + keysAndValues: []interface{}{"err", errors.New("whoops")}, + expectedOutput: `INFO test err="whoops" +`, + }, + "should correctly print regular error types when using logr.Error": { + text: "test", + err: errors.New("whoops"), + expectedOutput: `ERROR test err="whoops" +`, + }, + } + for n, test := range tests { + t.Run(n, func(t *testing.T) { + var buffer logToBuf + klogr := New(&buffer) + for _, name := range test.names { + klogr = klogr.WithName(name) + } + klogr = klogr.WithValues(test.withValues...) + + if test.err != nil { + klogr.Error(test.err, test.text, test.keysAndValues...) + } else { + klogr.Info(test.text, test.keysAndValues...) + } + + actual := buffer.String() + if actual != test.expectedOutput { + t.Errorf("expected %q did not match actual %q", test.expectedOutput, actual) + } + }) + } +} + +type logToBuf struct { + bytes.Buffer +} + +func (l *logToBuf) Helper() { +} + +func (l *logToBuf) Log(args ...interface{}) { + for i, arg := range args { + if i > 0 { + l.Write([]byte(" ")) + } + l.Write([]byte(fmt.Sprintf("%s", arg))) + } + l.Write([]byte("\n")) +} diff --git a/pkg/pmem-csi-driver/main.go b/pkg/pmem-csi-driver/main.go index 498e3dd749..8e9296279f 100644 --- a/pkg/pmem-csi-driver/main.go +++ b/pkg/pmem-csi-driver/main.go @@ -16,6 +16,7 @@ import ( api "github.com/intel/pmem-csi/pkg/apis/pmemcsi/v1alpha1" "github.com/intel/pmem-csi/pkg/k8sutil" + "github.com/intel/pmem-csi/pkg/logger" pmemcommon "github.com/intel/pmem-csi/pkg/pmem-common" ) @@ -25,6 +26,7 @@ var ( DeviceManager: api.DeviceModeLVM, } showVersion = flag.Bool("version", false, "Show release version and exit") + logFormat = logger.NewFlag() version = "unknown" // Set version during build time ) @@ -59,6 +61,8 @@ func init() { } func Main() int { + flag.Parse() + logFormat.Apply() if *showVersion { fmt.Println(version) return 0 diff --git a/pkg/pmem-csi-driver/pmem-csi-driver_test.go b/pkg/pmem-csi-driver/pmem-csi-driver_test.go index 81e906f44f..f49b603ea7 100644 --- a/pkg/pmem-csi-driver/pmem-csi-driver_test.go +++ b/pkg/pmem-csi-driver/pmem-csi-driver_test.go @@ -15,8 +15,6 @@ import ( "os" "testing" - "k8s.io/klog/v2" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -27,10 +25,6 @@ var ( keyFile = os.ExpandEnv("${TEST_WORK}/pmem-ca/pmem-registry-key.pem") ) -func init() { - klog.InitFlags(nil) -} - func TestMetrics(t *testing.T) { cases := map[string]struct { path string diff --git a/pkg/pmem-csi-operator/controller/controller.go b/pkg/pmem-csi-operator/controller/controller.go index a72eca446c..824537f495 100644 --- a/pkg/pmem-csi-operator/controller/controller.go +++ b/pkg/pmem-csi-operator/controller/controller.go @@ -7,6 +7,8 @@ SPDX-License-Identifier: Apache-2.0 package controller import ( + "context" + "github.com/intel/pmem-csi/pkg/version" v1 "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/rest" @@ -28,12 +30,12 @@ type ControllerOptions struct { } // AddToManagerFuncs is a list of functions to add all Controllers to the Manager -var AddToManagerFuncs []func(manager.Manager, ControllerOptions) error +var AddToManagerFuncs []func(context.Context, manager.Manager, ControllerOptions) error // AddToManager adds all Controllers to the Manager -func AddToManager(m manager.Manager, opts ControllerOptions) error { +func AddToManager(ctx context.Context, m manager.Manager, opts ControllerOptions) error { for _, f := range AddToManagerFuncs { - if err := f(m, opts); err != nil { + if err := f(ctx, m, opts); err != nil { return err } } diff --git a/pkg/pmem-csi-operator/controller/deployment/controller_driver.go b/pkg/pmem-csi-operator/controller/deployment/controller_driver.go index c282f9daba..7f2874c878 100644 --- a/pkg/pmem-csi-operator/controller/deployment/controller_driver.go +++ b/pkg/pmem-csi-operator/controller/deployment/controller_driver.go @@ -14,10 +14,12 @@ import ( "io/ioutil" "os" "path" + "reflect" "runtime" api "github.com/intel/pmem-csi/pkg/apis/pmemcsi/v1beta1" grpcserver "github.com/intel/pmem-csi/pkg/grpc-server" + "github.com/intel/pmem-csi/pkg/logger" pmemtls "github.com/intel/pmem-csi/pkg/pmem-csi-operator/pmem-tls" pmemgrpc "github.com/intel/pmem-csi/pkg/pmem-grpc" "github.com/intel/pmem-csi/pkg/version" @@ -33,7 +35,6 @@ import ( apiruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/intstr" - "k8s.io/klog/v2" "k8s.io/kubectl/pkg/scheme" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -102,20 +103,25 @@ func AllObjectLists() []*unstructured.UnstructuredList { return lists } -type PmemCSIDriver struct { +// pmemCSIDeployment represents the desired state of a PMEM-CSI driver +// deployment. +type pmemCSIDeployment struct { *api.Deployment - // operators namespace used for creating sub-resources + // operator's namespace used for creating sub-resources namespace string k8sVersion version.Version } -type ObjectPatch struct { +// objectPatch combines a modified object and the patch against +// the current revision of that object that produces the modified +// object. +type objectPatch struct { obj apiruntime.Object patch client.Patch } -func NewObjectPatch(obj, copy apiruntime.Object) *ObjectPatch { - return &ObjectPatch{ +func newObjectPatch(obj, copy apiruntime.Object) *objectPatch { + return &objectPatch{ obj: obj, patch: client.MergeFrom(copy), } @@ -123,7 +129,7 @@ func NewObjectPatch(obj, copy apiruntime.Object) *ObjectPatch { // IsNew checks if the object is a new object, i.e, the it is not // yet stored with the APIServer. -func (op ObjectPatch) IsNew() bool { +func (op objectPatch) isNew() bool { if op.obj != nil { // We ignore only possible error - client.errNotObject // and treat it's as new object @@ -138,7 +144,7 @@ func (op ObjectPatch) IsNew() bool { // Diff returns the raw data representing the differences between // original object and the changed/patch object. -func (op ObjectPatch) Diff() ([]byte, error) { +func (op objectPatch) diff() ([]byte, error) { data, err := op.patch.Data(op.obj) if err != nil { return nil, err @@ -153,28 +159,29 @@ func (op ObjectPatch) Diff() ([]byte, error) { // Apply sends the changes to API Server // Creates new object if not existing, otherwise patches it with changes -func (op *ObjectPatch) Apply(c client.Client, labels map[string]string) error { +func (op *objectPatch) apply(ctx context.Context, c client.Client, labels map[string]string) error { objMeta, err := meta.Accessor(op.obj) if err != nil { return fmt.Errorf("internal error %T: %v", op.obj, err) } + l := logger.Get(ctx).WithName("objectPatch/apply") // NOTE(avalluri): Set labels just before creating/patching. // Setting them before creating the client.Patch makes // they get lost from the final diff. objMeta.SetLabels(labels) - if op.IsNew() { + if op.isNew() { // For unknown reason client.Create() clearing off the // GVK on obj, So restore it manually. gvk := op.obj.GetObjectKind().GroupVersionKind() - klog.Infof("Create: %T/%s", op.obj, objMeta.GetName()) - err := c.Create(context.TODO(), op.obj) + l.V(3).Info("create", logger.KObjWithType(objMeta)) + err := c.Create(ctx, op.obj) op.obj.GetObjectKind().SetGroupVersionKind(gvk) return err } - klog.Infof("Update: %T/%s", op.obj, objMeta.GetName()) - data, err := op.Diff() + l.V(3).Info("update", logger.KObjWithType(objMeta)) + data, err := op.diff() if err != nil { return err } @@ -185,70 +192,38 @@ func (op *ObjectPatch) Apply(c client.Client, labels map[string]string) error { return nil } - return c.Patch(context.TODO(), op.obj, op.patch) + return c.Patch(ctx, op.obj, op.patch) } // Reconcile reconciles the driver deployment. When adding new // objects, extend also currentObjects above and the RBAC rules in // deploy/kustomize/operator/operator.yaml. -func (d *PmemCSIDriver) Reconcile(r *ReconcileDeployment) error { +func (d *pmemCSIDeployment) reconcile(ctx context.Context, r *ReconcileDeployment) error { if err := d.EnsureDefaults(r.containerImage); err != nil { return err } + l := logger.Get(ctx).WithName("reconcile") - klog.Infof("Deployment: %q, state %q ", d.Name, d.Status.Phase) + l.V(3).Info("start", "deployment", d.Name, "phase", d.Status.Phase) var allObjects []apiruntime.Object redeployAll := func() error { var o apiruntime.Object var err error - s, err := d.redeploySecrets(r) + s, err := d.redeploySecrets(ctx, r) if err != nil { return err } for _, o := range s { allObjects = append(allObjects, o) } - if o, err = d.redeployProvisionerRole(r); err != nil { - return fmt.Errorf("failed to update RBAC role: %v", err) - } - allObjects = append(allObjects, o) - if o, err = d.redeployProvisionerRoleBinding(r); err != nil { - return fmt.Errorf("failed to update RBAC role bindings: %v", err) - } - allObjects = append(allObjects, o) - if o, err = d.redeployProvisionerClusterRole(r); err != nil { - return fmt.Errorf("failed to update RBAC cluster role: %v", err) - } - allObjects = append(allObjects, o) - if o, err = d.redeployProvisionerClusterRoleBinding(r); err != nil { - return fmt.Errorf("failed to update RBAC cluster role bindings: %v", err) - } - allObjects = append(allObjects, o) - if o, err = d.redeployServiceAccount(r); err != nil { - return fmt.Errorf("failed to update service account: %v", err) - } - allObjects = append(allObjects, o) - if o, err = d.redeployControllerService(r); err != nil { - return fmt.Errorf("failed to update controller service: %v", err) - } - allObjects = append(allObjects, o) - if o, err = d.redeployMetricsService(r); err != nil { - return fmt.Errorf("failed to update controller service: %v", err) - } - allObjects = append(allObjects, o) - if o, err = d.redeployCSIDriver(r); err != nil { - return fmt.Errorf("failed to update CSI driver: %v", err) - } - allObjects = append(allObjects, o) - if o, err = d.redeployControllerDriver(r); err != nil { - return fmt.Errorf("failed to update controller driver: %v", err) - } - allObjects = append(allObjects, o) - if o, err = d.redeployNodeDriver(r); err != nil { - return fmt.Errorf("failed to update node driver: %v", err) + + for name, handler := range subObjectHandlers { + if o, err = d.redeploy(ctx, r, handler); err != nil { + return fmt.Errorf("failed to update %s: %v", name, err) + } + allObjects = append(allObjects, o) } - allObjects = append(allObjects, o) return nil } @@ -259,10 +234,10 @@ func (d *PmemCSIDriver) Reconcile(r *ReconcileDeployment) error { d.SetCondition(api.DriverDeployed, corev1.ConditionTrue, "Driver deployed successfully.") - klog.Infof("Deployed '%d' objects.", len(allObjects)) + l.V(3).Info("deployed", "numObjects", len(allObjects)) // FIXME(avalluri): Limit the obsolete object deletion either only on version upgrades // or on operator restart. - if err := d.deleteObsoleteObjects(r, allObjects); err != nil { + if err := d.deleteObsoleteObjects(ctx, r, allObjects); err != nil { return fmt.Errorf("Delete obsolete objects failed with error: %v", err) } @@ -271,16 +246,17 @@ func (d *PmemCSIDriver) Reconcile(r *ReconcileDeployment) error { // getSubObject retrieves the latest revision of given object type from the API server // And checks if that object is owned by the current deployment CR -func (d *PmemCSIDriver) getSubObject(r *ReconcileDeployment, obj apiruntime.Object) error { +func (d *pmemCSIDeployment) getSubObject(ctx context.Context, r *ReconcileDeployment, obj apiruntime.Object) error { objMeta, err := meta.Accessor(obj) if err != nil { return fmt.Errorf("internal error %T: %v", obj, err) } + l := logger.Get(ctx).WithName("getSubObject") - klog.Infof("Get: %T/%s", obj, objMeta.GetName()) + l.V(3).Info("get", "object", logger.KObjWithType(objMeta)) if err := r.Get(obj); err != nil { if errors.IsNotFound(err) { - klog.Infof("Not found: %T/%s", obj, objMeta.GetName()) + l.V(3).Info("not found", logger.KObjWithType(objMeta)) return nil } return err @@ -294,14 +270,15 @@ func (d *PmemCSIDriver) getSubObject(r *ReconcileDeployment, obj apiruntime.Obje } // updateSubObject writes the object changes to the API server. -func (d *PmemCSIDriver) updateSubObject(r *ReconcileDeployment, op *ObjectPatch) error { - return op.Apply(r.client, d.Spec.Labels) +func (d *pmemCSIDeployment) updateSubObject(ctx context.Context, r *ReconcileDeployment, op *objectPatch) error { + return op.apply(ctx, r.client, d.Spec.Labels) } type redeployObject struct { - object func() apiruntime.Object - modify func(apiruntime.Object) error - postUpdate func(apiruntime.Object) error + objType reflect.Type + object func(*pmemCSIDeployment) apiruntime.Object + modify func(*pmemCSIDeployment, apiruntime.Object) error + postUpdate func(*pmemCSIDeployment, apiruntime.Object) error } // redeploy resets/patches the object returned by ro.object() @@ -309,28 +286,28 @@ type redeployObject struct { // Here are the redeploy steps: // 1. Get the object by calling ro.object() which needs redeploying. // 2. Retrieve the latest data saved at APIServer for that object. -// 3. Create an ObjectPatch for that object to record the changes from this point. +// 3. Create an objectPatch for that object to record the changes from this point. // 4. Call ro.modify() to modify the object's data. -// 5. Call ObjectPatch.Apply() to submit the chanages to the APIServer. +// 5. Call objectPatch.Apply() to submit the chanages to the APIServer. // 6. If the update in step-5 was success, then call the ro.postUpdate() callback // to run any post update steps. -func (d *PmemCSIDriver) redeploy(r *ReconcileDeployment, ro redeployObject) (apiruntime.Object, error) { - o := ro.object() +func (d *pmemCSIDeployment) redeploy(ctx context.Context, r *ReconcileDeployment, ro redeployObject) (apiruntime.Object, error) { + o := ro.object(d) if o == nil { return nil, fmt.Errorf("nil object") } - if err := d.getSubObject(r, o); err != nil { + if err := d.getSubObject(ctx, r, o); err != nil { return nil, err } - op := NewObjectPatch(o, o.DeepCopyObject()) - if err := ro.modify(o); err != nil { + op := newObjectPatch(o, o.DeepCopyObject()) + if err := ro.modify(d, o); err != nil { return nil, err } - if err := d.updateSubObject(r, op); err != nil { + if err := d.updateSubObject(ctx, r, op); err != nil { return nil, err } if ro.postUpdate != nil { - if err := ro.postUpdate(o); err != nil { + if err := ro.postUpdate(d, o); err != nil { return nil, err } } @@ -346,33 +323,33 @@ func (d *PmemCSIDriver) redeploy(r *ReconcileDeployment, ro redeployObject) (api // // We cannot use d.redeploy() as secrets needs to be provisioned if not preset. // This special case cannot be fit into generice redeploy logic. -func (d *PmemCSIDriver) redeploySecrets(r *ReconcileDeployment) ([]*corev1.Secret, error) { +func (d *pmemCSIDeployment) redeploySecrets(ctx context.Context, r *ReconcileDeployment) ([]*corev1.Secret, error) { rs := &corev1.Secret{ TypeMeta: metav1.TypeMeta{Kind: "Secret", APIVersion: "v1"}, ObjectMeta: d.getObjectMeta(d.RegistrySecretName(), false), } - if err := d.getSubObject(r, rs); err != nil { + if err := d.getSubObject(ctx, r, rs); err != nil { return nil, err } - rop := NewObjectPatch(rs, rs.DeepCopy()) + rop := newObjectPatch(rs, rs.DeepCopy()) ns := &corev1.Secret{ TypeMeta: metav1.TypeMeta{Kind: "Secret", APIVersion: "v1"}, ObjectMeta: d.getObjectMeta(d.NodeSecretName(), false), } - if err := d.getSubObject(r, ns); err != nil { + if err := d.getSubObject(ctx, r, ns); err != nil { return nil, err } - nop := NewObjectPatch(ns, ns.DeepCopy()) + nop := newObjectPatch(ns, ns.DeepCopy()) update := func() error { d.getRegistrySecrets(rs) - if err := d.updateSubObject(r, rop); err != nil { + if err := d.updateSubObject(ctx, r, rop); err != nil { return fmt.Errorf("failed to update registry secrets: %w", err) } d.getNodeSecrets(ns) - if err := d.updateSubObject(r, nop); err != nil { + if err := d.updateSubObject(ctx, r, nop); err != nil { return fmt.Errorf("failed to update node secrets: %w", err) } return nil @@ -392,9 +369,9 @@ func (d *PmemCSIDriver) redeploySecrets(r *ReconcileDeployment) ([]*corev1.Secre } d.SetCondition(api.CertsVerified, corev1.ConditionTrue, "Driver certificates validated.") updateSecrets = true - } else if rop.IsNew() || nop.IsNew() { + } else if rop.isNew() || nop.isNew() { // Provision new self-signed certificates if not already present - if err := d.provisionCertificates(); err != nil { + if err := d.provisionCertificates(ctx); err != nil { d.SetCondition(api.CertsReady, corev1.ConditionFalse, err.Error()) return nil, err } @@ -411,20 +388,20 @@ func (d *PmemCSIDriver) redeploySecrets(r *ReconcileDeployment) ([]*corev1.Secre return []*corev1.Secret{rs, ns}, nil } -// redeployNodeDriver deploys the node daemon set and records its status on to CR status. -func (d *PmemCSIDriver) redeployNodeDriver(r *ReconcileDeployment) (apiruntime.Object, error) { - return d.redeploy(r, redeployObject{ - object: func() apiruntime.Object { +var subObjectHandlers = map[string]redeployObject{ + "node driver": { + objType: reflect.TypeOf(&appsv1.DaemonSet{}), + object: func(d *pmemCSIDeployment) apiruntime.Object { return &appsv1.DaemonSet{ TypeMeta: metav1.TypeMeta{Kind: "DaemonSet", APIVersion: "apps/v1"}, ObjectMeta: d.getObjectMeta(d.NodeDriverName(), false), } }, - modify: func(o apiruntime.Object) error { + modify: func(d *pmemCSIDeployment, o apiruntime.Object) error { d.getNodeDaemonSet(o.(*appsv1.DaemonSet)) return nil }, - postUpdate: func(o apiruntime.Object) error { + postUpdate: func(d *pmemCSIDeployment, o apiruntime.Object) error { ds := o.(*appsv1.DaemonSet) // Update node driver status is status object status := "NotReady" @@ -440,23 +417,20 @@ func (d *PmemCSIDriver) redeployNodeDriver(r *ReconcileDeployment) (apiruntime.O d.SetDriverStatus(api.NodeDriver, status, reason) return nil }, - }) -} - -// redeployControllerDriver deploys the controller stateful set and records its status on to CR status. -func (d *PmemCSIDriver) redeployControllerDriver(r *ReconcileDeployment) (apiruntime.Object, error) { - return d.redeploy(r, redeployObject{ - object: func() apiruntime.Object { + }, + "controller driver": { + objType: reflect.TypeOf(&appsv1.StatefulSet{}), + object: func(d *pmemCSIDeployment) apiruntime.Object { return &appsv1.StatefulSet{ TypeMeta: metav1.TypeMeta{Kind: "StatefulSet", APIVersion: "apps/v1"}, ObjectMeta: d.getObjectMeta(d.ControllerDriverName(), false), } }, - modify: func(o apiruntime.Object) error { + modify: func(d *pmemCSIDeployment, o apiruntime.Object) error { d.getControllerStatefulSet(o.(*appsv1.StatefulSet)) return nil }, - postUpdate: func(o apiruntime.Object) error { + postUpdate: func(d *pmemCSIDeployment, o apiruntime.Object) error { ss := o.(*appsv1.StatefulSet) // Update controller status is status object status := "NotReady" @@ -473,205 +447,154 @@ func (d *PmemCSIDriver) redeployControllerDriver(r *ReconcileDeployment) (apirun d.SetDriverStatus(api.ControllerDriver, status, reason) return nil }, - }) -} - -func (d *PmemCSIDriver) redeployControllerService(r *ReconcileDeployment) (apiruntime.Object, error) { - return d.redeploy(r, redeployObject{ - object: func() apiruntime.Object { + }, + "controller service": { + objType: reflect.TypeOf(&corev1.Service{}), + object: func(d *pmemCSIDeployment) apiruntime.Object { return &corev1.Service{ TypeMeta: metav1.TypeMeta{Kind: "Service", APIVersion: "v1"}, ObjectMeta: d.getObjectMeta(d.ControllerServiceName(), false), } }, - modify: func(o apiruntime.Object) error { + modify: func(d *pmemCSIDeployment, o apiruntime.Object) error { d.getControllerService(o.(*corev1.Service)) return nil }, - }) -} - -func (d *PmemCSIDriver) redeployMetricsService(r *ReconcileDeployment) (apiruntime.Object, error) { - return d.redeploy(r, redeployObject{ - object: func() apiruntime.Object { + }, + "metrics service": { + objType: reflect.TypeOf(&corev1.Service{}), + object: func(d *pmemCSIDeployment) apiruntime.Object { return &corev1.Service{ TypeMeta: metav1.TypeMeta{Kind: "Service", APIVersion: "v1"}, ObjectMeta: d.getObjectMeta(d.MetricsServiceName(), false), } }, - modify: func(o apiruntime.Object) error { + modify: func(d *pmemCSIDeployment, o apiruntime.Object) error { d.getMetricsService(o.(*corev1.Service)) return nil }, - }) -} - -func (d *PmemCSIDriver) redeployCSIDriver(r *ReconcileDeployment) (apiruntime.Object, error) { - return d.redeploy(r, redeployObject{ - object: func() apiruntime.Object { + }, + "CSIDriver": { + objType: reflect.TypeOf(&storagev1beta1.CSIDriver{}), + object: func(d *pmemCSIDeployment) apiruntime.Object { return &storagev1beta1.CSIDriver{ TypeMeta: metav1.TypeMeta{Kind: "CSIDriver", APIVersion: "storage.k8s.io/v1beta1"}, ObjectMeta: d.getObjectMeta(d.CSIDriverName(), true), } }, - modify: func(o apiruntime.Object) error { + modify: func(d *pmemCSIDeployment, o apiruntime.Object) error { d.getCSIDriver(o.(*storagev1beta1.CSIDriver)) return nil }, - }) -} - -func (d *PmemCSIDriver) redeployProvisionerRole(r *ReconcileDeployment) (apiruntime.Object, error) { - return d.redeploy(r, redeployObject{ - object: func() apiruntime.Object { + }, + "provisioner role": { + objType: reflect.TypeOf(&rbacv1.Role{}), + object: func(d *pmemCSIDeployment) apiruntime.Object { return &rbacv1.Role{ TypeMeta: metav1.TypeMeta{Kind: "Role", APIVersion: "rbac.authorization.k8s.io/v1"}, ObjectMeta: d.getObjectMeta(d.ProvisionerRoleName(), false), } }, - modify: func(o apiruntime.Object) error { + modify: func(d *pmemCSIDeployment, o apiruntime.Object) error { d.getControllerProvisionerRole(o.(*rbacv1.Role)) return nil }, - }) -} - -func (d *PmemCSIDriver) redeployProvisionerRoleBinding(r *ReconcileDeployment) (apiruntime.Object, error) { - return d.redeploy(r, redeployObject{ - object: func() apiruntime.Object { + }, + "provisioner role binding": { + objType: reflect.TypeOf(&rbacv1.RoleBinding{}), + object: func(d *pmemCSIDeployment) apiruntime.Object { return &rbacv1.RoleBinding{ TypeMeta: metav1.TypeMeta{Kind: "RoleBinding", APIVersion: "rbac.authorization.k8s.io/v1"}, ObjectMeta: d.getObjectMeta(d.ProvisionerRoleBindingName(), false), } }, - modify: func(o apiruntime.Object) error { + modify: func(d *pmemCSIDeployment, o apiruntime.Object) error { d.getControllerProvisionerRoleBinding(o.(*rbacv1.RoleBinding)) return nil }, - }) -} - -func (d *PmemCSIDriver) redeployProvisionerClusterRole(r *ReconcileDeployment) (apiruntime.Object, error) { - return d.redeploy(r, redeployObject{ - object: func() apiruntime.Object { + }, + "provisioner cluster role": { + objType: reflect.TypeOf(&rbacv1.ClusterRole{}), + object: func(d *pmemCSIDeployment) apiruntime.Object { return &rbacv1.ClusterRole{ TypeMeta: metav1.TypeMeta{Kind: "ClusterRole", APIVersion: "rbac.authorization.k8s.io/v1"}, ObjectMeta: d.getObjectMeta(d.ProvisionerClusterRoleName(), true), } }, - modify: func(o apiruntime.Object) error { + modify: func(d *pmemCSIDeployment, o apiruntime.Object) error { d.getControllerProvisionerClusterRole(o.(*rbacv1.ClusterRole)) return nil }, - }) -} - -func (d *PmemCSIDriver) redeployProvisionerClusterRoleBinding(r *ReconcileDeployment) (apiruntime.Object, error) { - return d.redeploy(r, redeployObject{ - object: func() apiruntime.Object { + }, + "provisioner cluster role binding": { + objType: reflect.TypeOf(&rbacv1.ClusterRoleBinding{}), + object: func(d *pmemCSIDeployment) apiruntime.Object { return &rbacv1.ClusterRoleBinding{ TypeMeta: metav1.TypeMeta{Kind: "ClusterRoleBinding", APIVersion: "rbac.authorization.k8s.io/v1"}, ObjectMeta: d.getObjectMeta(d.ProvisionerClusterRoleBindingName(), true), } }, - modify: func(o apiruntime.Object) error { + modify: func(d *pmemCSIDeployment, o apiruntime.Object) error { d.getControllerProvisionerClusterRoleBinding(o.(*rbacv1.ClusterRoleBinding)) return nil }, - }) -} - -func (d *PmemCSIDriver) redeployServiceAccount(r *ReconcileDeployment) (apiruntime.Object, error) { - return d.redeploy(r, redeployObject{ - object: func() apiruntime.Object { + }, + "service account": { + objType: reflect.TypeOf(&corev1.ServiceAccount{}), + object: func(d *pmemCSIDeployment) apiruntime.Object { return &corev1.ServiceAccount{ TypeMeta: metav1.TypeMeta{Kind: "ServiceAccount", APIVersion: "v1"}, ObjectMeta: d.getObjectMeta(d.ServiceAccountName(), false), } }, - modify: func(o apiruntime.Object) error { + modify: func(d *pmemCSIDeployment, o apiruntime.Object) error { // nothing to customize for service account return nil }, - }) + }, } -// HandleEvent handles the delete/update events received on sub-objects -func (d *PmemCSIDriver) HandleEvent(meta metav1.Object, obj apiruntime.Object, r *ReconcileDeployment) error { - switch obj.(type) { - case *corev1.Secret: - klog.Infof("Redeploying driver secrets") - if _, err := d.redeploySecrets(r); err != nil { - return fmt.Errorf("failed to redeploy %q secrets: %v", meta.GetName(), err) - } - case *appsv1.DaemonSet: - klog.Infof("Redeploying node driver") - org := d.DeepCopy() - if _, err := d.redeployNodeDriver(r); err != nil { - return fmt.Errorf("failed to redeploy node driver: %v", err) +var v1SecretPtr = reflect.TypeOf(&corev1.Secret{}) + +// HandleEvent handles the delete/update events received on sub-objects. It ensures that any undesirable change +// is reverted. +func (d *pmemCSIDeployment) handleEvent(ctx context.Context, metaData metav1.Object, obj apiruntime.Object, r *ReconcileDeployment) error { + objType := reflect.TypeOf(obj) + l := logger.Get(ctx).WithName("deployment/event") + l.V(5).Info("start", "object", logger.KObjWithType(metaData), "type", objType) + + objName := metaData.GetName() + for name, handler := range subObjectHandlers { + if objType != handler.objType { + continue } - if err := r.PatchDeploymentStatus(d.Deployment, client.MergeFrom(org)); err != nil { - return fmt.Errorf("failed to update deployment CR status: %v", err) + metaObj, _ := meta.Accessor(handler.object(d)) + if objName != metaObj.GetName() { + continue } - case *appsv1.StatefulSet: - klog.Infof("Redeploying controller driver") + l.V(3).Info("redeploying", "name", name, "object", logger.KObjWithType(metaData)) org := d.DeepCopy() - if _, err := d.redeployControllerDriver(r); err != nil { - return fmt.Errorf("failed to redeploy controller driver: %v", err) + if _, err := d.redeploy(ctx, r, handler); err != nil { + return fmt.Errorf("failed to redeploy %s: %v", name, err) } - if err := r.PatchDeploymentStatus(d.Deployment, client.MergeFrom(org)); err != nil { + if err := r.patchDeploymentStatus(d.Deployment, client.MergeFrom(org)); err != nil { return fmt.Errorf("failed to update deployment CR status: %v", err) } - case *rbacv1.Role: - klog.Infof("Redeploying provisioner RBAC role: %q", meta.GetName()) - if _, err := d.redeployProvisionerRole(r); err != nil { - return fmt.Errorf("failed to redeploy %q provisioner role: %v", meta.GetName(), err) - } - case *rbacv1.ClusterRole: - klog.Infof("Redeploying provisioner cluster role: %q", meta.GetName()) - if _, err := d.redeployProvisionerClusterRole(r); err != nil { - return fmt.Errorf("failed to redeploy %q cluster role: %v", meta.GetName(), err) - } - case *rbacv1.RoleBinding: - klog.Infof("Redeploying provisioner role binding") - if _, err := d.redeployProvisionerRoleBinding(r); err != nil { - return fmt.Errorf("failed to redeploy %q role binding: %v", meta.GetName(), err) - } - case *rbacv1.ClusterRoleBinding: - klog.Infof("Redeploying provisioner cluster role binding: %q", meta.GetName()) - if _, err := d.redeployProvisionerClusterRoleBinding(r); err != nil { - return fmt.Errorf("failed to redeploy %q cluster role binding: %v", meta.GetName(), err) - } - case *corev1.ServiceAccount: - klog.Infof("Redeploying service account") - if _, err := d.redeployServiceAccount(r); err != nil { - return fmt.Errorf("failed to redeploy %q service account: %v", meta.GetName(), err) - } - case *corev1.Service: - var err error - klog.Infof("Redeploying service: %s", meta.GetName()) - if meta.GetName() == d.ControllerServiceName() { - _, err = d.redeployControllerService(r) - } else if meta.GetName() == d.MetricsServiceName() { - _, err = d.redeployMetricsService(r) - } - if err != nil { - return fmt.Errorf("failed to redeploy %q service: %v", meta.GetName(), err) - } - case *storagev1beta1.CSIDriver: - klog.Infof("Redeploying %q CSIDriver", meta.GetName()) - if _, err := d.redeployCSIDriver(r); err != nil { - return fmt.Errorf("failed to redeploy %q CSIDriver: %v", meta.GetName(), err) + } + + if objType == v1SecretPtr { + l.V(3).Info("redeploying", "name", "driver secrets", "object", logger.KObjWithType(metaData)) + if _, err := d.redeploySecrets(ctx, r); err != nil { + return fmt.Errorf("failed to redeploy %q secrets: %v", metaData.GetName(), err) } - default: - klog.Infof("Ignoring event on '%s' of type %T", meta.GetName(), obj) } return nil } -func objectIsObsolete(objList []apiruntime.Object, toFind unstructured.Unstructured) (bool, error) { - klog.V(5).Infof("Checking if %q of type %q is obsolete...", toFind.GetName(), toFind.GetObjectKind().GroupVersionKind()) +func objectIsObsolete(ctx context.Context, objList []apiruntime.Object, toFind unstructured.Unstructured) (bool, error) { + l := logger.Get(ctx) + l.V(5).Info("checking for obsolete object", "name", toFind.GetName(), "gkv", toFind.GetObjectKind().GroupVersionKind()) for i := range objList { metaObj, err := meta.Accessor(objList[i]) if err != nil { @@ -686,7 +609,7 @@ func objectIsObsolete(objList []apiruntime.Object, toFind unstructured.Unstructu return true, nil } -func (d *PmemCSIDriver) isOwnerOf(obj unstructured.Unstructured) bool { +func (d *pmemCSIDeployment) isOwnerOf(obj unstructured.Unstructured) bool { for _, owner := range obj.GetOwnerReferences() { if owner.UID == d.GetUID() { return true @@ -696,10 +619,11 @@ func (d *PmemCSIDriver) isOwnerOf(obj unstructured.Unstructured) bool { return false } -func (d *PmemCSIDriver) deleteObsoleteObjects(r *ReconcileDeployment, newObjects []apiruntime.Object) error { +func (d *pmemCSIDeployment) deleteObsoleteObjects(ctx context.Context, r *ReconcileDeployment, newObjects []apiruntime.Object) error { + l := logger.Get(ctx).WithName("deleteObsoleteObjects") for _, obj := range newObjects { metaObj, _ := meta.Accessor(obj) - klog.V(5).Infof("==>%q type %q", metaObj.GetName(), obj.GetObjectKind().GroupVersionKind()) + l.V(5).Info("new object", "name", metaObj.GetName(), "gkv", obj.GetObjectKind().GroupVersionKind()) } for _, list := range AllObjectLists() { @@ -707,8 +631,8 @@ func (d *PmemCSIDriver) deleteObsoleteObjects(r *ReconcileDeployment, newObjects Namespace: d.namespace, } - klog.V(5).Infof("Fetching '%s' list with options: %v", list.GetObjectKind(), opts.Namespace) - if err := r.client.List(context.TODO(), list, opts); err != nil { + l.V(5).Info("fetching objects", "gkv", list.GetObjectKind(), "options", opts.Namespace) + if err := r.client.List(ctx, list, opts); err != nil { return err } @@ -716,14 +640,14 @@ func (d *PmemCSIDriver) deleteObsoleteObjects(r *ReconcileDeployment, newObjects if !d.isOwnerOf(obj) { continue } - obsolete, err := objectIsObsolete(newObjects, obj) + obsolete, err := objectIsObsolete(ctx, newObjects, obj) if err != nil { return err } if !obsolete { continue } - klog.Infof("Deleting %q of type '%s' because it is an obsolete object.", obj.GetName(), obj.GetObjectKind().GroupVersionKind()) + l.V(3).Info("deleting obsolete object", "name", obj.GetName(), "gkv", obj.GetObjectKind().GroupVersionKind()) o, err := scheme.Scheme.New(obj.GetObjectKind().GroupVersionKind()) if err != nil { @@ -744,18 +668,19 @@ func (d *PmemCSIDriver) deleteObsoleteObjects(r *ReconcileDeployment, newObjects return nil } -func (d *PmemCSIDriver) getRegistrySecrets(secret *corev1.Secret) { +func (d *pmemCSIDeployment) getRegistrySecrets(secret *corev1.Secret) { d.getSecret(secret, "registry-secrets", d.Spec.CACert, d.Spec.RegistryPrivateKey, d.Spec.RegistryCert) } -func (d *PmemCSIDriver) getNodeSecrets(secret *corev1.Secret) { +func (d *pmemCSIDeployment) getNodeSecrets(secret *corev1.Secret) { d.getSecret(secret, "node-secrets", d.Spec.CACert, d.Spec.NodeControllerPrivateKey, d.Spec.NodeControllerCert) } -func (d *PmemCSIDriver) provisionCertificates() error { +func (d *pmemCSIDeployment) provisionCertificates(ctx context.Context) error { + l := logger.Get(ctx).WithName("provisionCertificates") var prKey *rsa.PrivateKey - klog.Infof("Provisioning new certificates for deployment '%s'", d.Name) + l.V(3).Info("provisioning new certificates") ca, err := pmemtls.NewCA(nil, nil) if err != nil { return fmt.Errorf("failed to initialize CA: %v", err) @@ -806,7 +731,7 @@ func (d *PmemCSIDriver) provisionCertificates() error { // a tls client connection to that sever using the provided keys and certificates. // As we use mutual-tls, testing one server is enough to make sure that the provided // certificates works -func (d *PmemCSIDriver) validateCertificates() error { +func (d *pmemCSIDeployment) validateCertificates() error { tmp, err := ioutil.TempDir("", "pmem-csi-validate-certs-*") if err != nil { return err @@ -842,7 +767,7 @@ func (d *PmemCSIDriver) validateCertificates() error { return nil } -func (d *PmemCSIDriver) getCSIDriver(csiDriver *storagev1beta1.CSIDriver) { +func (d *pmemCSIDeployment) getCSIDriver(csiDriver *storagev1beta1.CSIDriver) { attachRequired := false podInfoOnMount := true @@ -860,7 +785,7 @@ func (d *PmemCSIDriver) getCSIDriver(csiDriver *storagev1beta1.CSIDriver) { } } -func (d *PmemCSIDriver) getSecret(secret *corev1.Secret, cn string, ca, encodedKey, encodedCert []byte) { +func (d *pmemCSIDeployment) getSecret(secret *corev1.Secret, cn string, ca, encodedKey, encodedCert []byte) { secret.Type = corev1.SecretTypeTLS secret.Data = map[string][]byte{ // Same names as in the example secrets and in the v1 API. @@ -870,7 +795,7 @@ func (d *PmemCSIDriver) getSecret(secret *corev1.Secret, cn string, ca, encodedK } } -func (d *PmemCSIDriver) getService(service *corev1.Service, t corev1.ServiceType, port int32) { +func (d *pmemCSIDeployment) getService(service *corev1.Service, t corev1.ServiceType, port int32) { service.Spec.Type = t if service.Spec.Ports == nil { service.Spec.Ports = append(service.Spec.Ports, corev1.ServicePort{}) @@ -884,15 +809,15 @@ func (d *PmemCSIDriver) getService(service *corev1.Service, t corev1.ServiceType } } -func (d *PmemCSIDriver) getControllerService(service *corev1.Service) { +func (d *pmemCSIDeployment) getControllerService(service *corev1.Service) { d.getService(service, corev1.ServiceTypeClusterIP, controllerServicePort) } -func (d *PmemCSIDriver) getMetricsService(service *corev1.Service) { +func (d *pmemCSIDeployment) getMetricsService(service *corev1.Service) { d.getService(service, corev1.ServiceTypeNodePort, controllerMetricsPort) } -func (d *PmemCSIDriver) getControllerProvisionerRole(role *rbacv1.Role) { +func (d *pmemCSIDeployment) getControllerProvisionerRole(role *rbacv1.Role) { role.Rules = []rbacv1.PolicyRule{ { APIGroups: []string{""}, @@ -935,7 +860,7 @@ func (d *PmemCSIDriver) getControllerProvisionerRole(role *rbacv1.Role) { } } -func (d *PmemCSIDriver) getControllerProvisionerRoleBinding(rb *rbacv1.RoleBinding) { +func (d *pmemCSIDeployment) getControllerProvisionerRoleBinding(rb *rbacv1.RoleBinding) { rb.Subjects = []rbacv1.Subject{ { Kind: "ServiceAccount", @@ -950,7 +875,7 @@ func (d *PmemCSIDriver) getControllerProvisionerRoleBinding(rb *rbacv1.RoleBindi } } -func (d *PmemCSIDriver) getControllerProvisionerClusterRole(cr *rbacv1.ClusterRole) { +func (d *pmemCSIDeployment) getControllerProvisionerClusterRole(cr *rbacv1.ClusterRole) { cr.Rules = []rbacv1.PolicyRule{ { APIGroups: []string{""}, @@ -1011,7 +936,7 @@ func (d *PmemCSIDriver) getControllerProvisionerClusterRole(cr *rbacv1.ClusterRo } } -func (d *PmemCSIDriver) getControllerProvisionerClusterRoleBinding(crb *rbacv1.ClusterRoleBinding) { +func (d *pmemCSIDeployment) getControllerProvisionerClusterRoleBinding(crb *rbacv1.ClusterRoleBinding) { crb.Subjects = []rbacv1.Subject{ { Kind: "ServiceAccount", @@ -1026,7 +951,7 @@ func (d *PmemCSIDriver) getControllerProvisionerClusterRoleBinding(crb *rbacv1.C } } -func (d *PmemCSIDriver) getControllerStatefulSet(ss *appsv1.StatefulSet) { +func (d *pmemCSIDeployment) getControllerStatefulSet(ss *appsv1.StatefulSet) { replicas := int32(1) true := true pmemcsiUser := int64(1000) @@ -1126,7 +1051,7 @@ func (d *PmemCSIDriver) getControllerStatefulSet(ss *appsv1.StatefulSet) { } } -func (d *PmemCSIDriver) getNodeDaemonSet(ds *appsv1.DaemonSet) { +func (d *pmemCSIDeployment) getNodeDaemonSet(ds *appsv1.DaemonSet) { directoryOrCreate := corev1.HostPathDirectoryOrCreate ds.Spec = appsv1.DaemonSetSpec{ Selector: &metav1.LabelSelector{ @@ -1230,10 +1155,11 @@ func (d *PmemCSIDriver) getNodeDaemonSet(ds *appsv1.DaemonSet) { } } -func (d *PmemCSIDriver) getControllerCommand() []string { +func (d *pmemCSIDeployment) getControllerCommand() []string { return []string{ "/usr/local/bin/pmem-csi-driver", fmt.Sprintf("-v=%d", d.Spec.LogLevel), + "-logging-format=" + string(d.Spec.LogFormat), "-mode=controller", "-endpoint=unix:///csi/csi-controller.sock", fmt.Sprintf("-registryEndpoint=tcp://0.0.0.0:%d", controllerServicePort), @@ -1246,11 +1172,12 @@ func (d *PmemCSIDriver) getControllerCommand() []string { } } -func (d *PmemCSIDriver) getNodeDriverCommand() []string { +func (d *pmemCSIDeployment) getNodeDriverCommand() []string { return []string{ "/usr/local/bin/pmem-csi-driver", fmt.Sprintf("-deviceManager=%s", d.Spec.DeviceMode), fmt.Sprintf("-v=%d", d.Spec.LogLevel), + "-logging-format=" + string(d.Spec.LogFormat), "-mode=node", "-endpoint=unix:///csi/csi.sock", "-nodeid=$(KUBE_NODE_NAME)", @@ -1267,7 +1194,7 @@ func (d *PmemCSIDriver) getNodeDriverCommand() []string { } } -func (d *PmemCSIDriver) getControllerContainer() corev1.Container { +func (d *pmemCSIDeployment) getControllerContainer() corev1.Container { true := true return corev1.Container{ Name: "pmem-driver", @@ -1320,7 +1247,7 @@ func (d *PmemCSIDriver) getControllerContainer() corev1.Container { } } -func (d *PmemCSIDriver) getNodeDriverContainer() corev1.Container { +func (d *pmemCSIDeployment) getNodeDriverContainer() corev1.Container { bidirectional := corev1.MountPropagationBidirectional true := true root := int64(0) @@ -1407,7 +1334,7 @@ func (d *PmemCSIDriver) getNodeDriverContainer() corev1.Container { return c } -func (d *PmemCSIDriver) getProvisionerContainer() corev1.Container { +func (d *pmemCSIDeployment) getProvisionerContainer() corev1.Container { true := true return corev1.Container{ Name: "external-provisioner", @@ -1436,7 +1363,7 @@ func (d *PmemCSIDriver) getProvisionerContainer() corev1.Container { } } -func (d *PmemCSIDriver) getNodeRegistrarContainer() corev1.Container { +func (d *pmemCSIDeployment) getNodeRegistrarContainer() corev1.Container { true := true return corev1.Container{ Name: "driver-registrar", @@ -1470,7 +1397,7 @@ func (d *PmemCSIDriver) getNodeRegistrarContainer() corev1.Container { } } -func (d *PmemCSIDriver) getMetricsPorts(port int32) []corev1.ContainerPort { +func (d *pmemCSIDeployment) getMetricsPorts(port int32) []corev1.ContainerPort { return []corev1.ContainerPort{ { Name: "metrics", @@ -1480,7 +1407,7 @@ func (d *PmemCSIDriver) getMetricsPorts(port int32) []corev1.ContainerPort { } } -func (d *PmemCSIDriver) getObjectMeta(name string, isClusterResource bool) metav1.ObjectMeta { +func (d *pmemCSIDeployment) getObjectMeta(name string, isClusterResource bool) metav1.ObjectMeta { meta := metav1.ObjectMeta{ Name: name, OwnerReferences: []metav1.OwnerReference{ diff --git a/pkg/pmem-csi-operator/controller/deployment/deployment_controller.go b/pkg/pmem-csi-operator/controller/deployment/deployment_controller.go index d9ab070ed3..56e3f7f486 100644 --- a/pkg/pmem-csi-operator/controller/deployment/deployment_controller.go +++ b/pkg/pmem-csi-operator/controller/deployment/deployment_controller.go @@ -16,8 +16,10 @@ import ( api "github.com/intel/pmem-csi/pkg/apis/pmemcsi/v1beta1" "github.com/intel/pmem-csi/pkg/k8sutil" + "github.com/intel/pmem-csi/pkg/logger" pmemcontroller "github.com/intel/pmem-csi/pkg/pmem-csi-operator/controller" "github.com/intel/pmem-csi/pkg/version" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -26,7 +28,6 @@ import ( "k8s.io/client-go/kubernetes" v1 "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/tools/record" - "k8s.io/klog/v2" "k8s.io/kubectl/pkg/scheme" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" @@ -45,28 +46,28 @@ func init() { // Add creates a new Deployment Controller and adds it to the Manager. The Manager will set fields on the Controller // and Start it when the Manager is Started. -func Add(mgr manager.Manager, opts pmemcontroller.ControllerOptions) error { - r, err := NewReconcileDeployment(mgr.GetClient(), opts) +func Add(ctx context.Context, mgr manager.Manager, opts pmemcontroller.ControllerOptions) error { + r, err := NewReconcileDeployment(ctx, mgr.GetClient(), opts) if err != nil { return err } - return add(mgr, r.(*ReconcileDeployment)) + return add(ctx, mgr, r.(*ReconcileDeployment)) } // add adds a new Controller to mgr with r as the reconcile.Reconciler -func add(mgr manager.Manager, r *ReconcileDeployment) error { +func add(ctx context.Context, mgr manager.Manager, r *ReconcileDeployment) error { // Create a new controller c, err := controller.New("deployment-controller", mgr, controller.Options{Reconciler: r}) if err != nil { - klog.Errorf("Deployment.Add: error: %v", err) - return err + return fmt.Errorf("create controller: %v", err) } + l := logger.Get(ctx) p := predicate.Funcs{ UpdateFunc: func(e event.UpdateEvent) bool { r.reconcileMutex.Lock() defer r.reconcileMutex.Unlock() - klog.Infof("UPDATED: %T/%s, generation:%d", e.MetaOld, e.MetaOld.GetName(), e.MetaNew.GetGeneration()) + l.V(3).Info("UPDATED", "object", logger.KObjWithType(e.MetaOld), "generation", e.MetaNew.GetGeneration()) if e.MetaNew.GetDeletionTimestamp() != nil { // Deployment CR deleted, remove it's reference from cache. // Objects owned by it are automatically garbage collected. @@ -78,27 +79,27 @@ func add(mgr manager.Manager, r *ReconcileDeployment) error { return false } - op := NewObjectPatch(e.ObjectOld, e.ObjectNew) - data, err := op.Diff() + op := newObjectPatch(e.ObjectOld, e.ObjectNew) + data, err := op.diff() if err != nil { - klog.Warningf("Failed to find deployment changes: %v", err) + l.Error(err, "find deployment changes") return true } - klog.Infof("Diff: %v", string(data)) + l.V(3).Info("all changes", "diff", string(data)) // We are intersted in only spec changes, not CR status/metadata changes re := regexp.MustCompile(`{.*"spec":{(.*)}.*}`) res := re.FindSubmatch(data) if len(res) < 2 { - klog.Infof("No spec changes observed, ignoring the event") + l.V(3).Info("no spec changes observed, ignoring the event") return false } - klog.Infof("CR changes: %v", string(res[1])) + l.V(3).Info("CR changes", "diff", string(res[1])) return true }, DeleteFunc: func(e event.DeleteEvent) bool { r.reconcileMutex.Lock() defer r.reconcileMutex.Unlock() - klog.Infof("DELETED: %T/%s", e.Object, e.Meta.GetName()) + l.V(3).Info("DELETED", "object", logger.KObjWithType(e.Meta)) // Deployment CR deleted, remove it's reference from cache. // Objects owned by it are automatically garbage collected. r.deleteDeployment(e.Meta.GetName()) @@ -110,8 +111,7 @@ func add(mgr manager.Manager, r *ReconcileDeployment) error { // Watch for changes to primary resource Deployment if err := c.Watch(&source.Kind{Type: &api.Deployment{}}, &handler.EnqueueRequestForObject{}, p); err != nil { - klog.Errorf("Deployment.Add: watch error: %v", err) - return err + return fmt.Errorf("watch: %v", err) } // Predicate functions for sub-object changes @@ -122,35 +122,37 @@ func add(mgr manager.Manager, r *ReconcileDeployment) error { // One exception is: If we fail to handle here, then we pass this // event to reconcile loop, where it should recognize these requests // and just requeue. Expecting that the failure is retried. - eventFunc := func(meta metav1.Object, obj apiruntime.Object) bool { + eventFunc := func(what string, meta metav1.Object, obj apiruntime.Object) bool { + // TODO: + // - check that this output is okay + // - check why "go test" does not cover this code + l.V(3).Info(what, "object", logger.KObjWithType(meta)) // Get the owned deployment d, err := r.getDeploymentFor(meta) if err != nil { - klog.Infof("%T/%s is not owned by any deployment", obj, meta.GetName()) + l.V(3).Info("not owned by any deployment", "object", logger.KObjWithType(meta)) // The owner might have deleted already // we can safely ignore this event return false } r.reconcileMutex.Lock() defer r.reconcileMutex.Unlock() - if err := d.HandleEvent(meta, obj, r); err != nil { - klog.Warningf("Error occurred while handling the event: %v, requeuing the event", err) + if err := d.handleEvent(ctx, meta, obj, r); err != nil { + l.Error(err, "while handling the event, requeuing the event") return true } return false } sop := predicate.Funcs{ DeleteFunc: func(e event.DeleteEvent) bool { - klog.Infof("DELETED: %T/%s", e.Object, e.Meta.GetName()) - return eventFunc(e.Meta, e.Object) + return eventFunc("DELETED", e.Meta, e.Object) }, UpdateFunc: func(e event.UpdateEvent) bool { if e.MetaNew.GetDeletionTimestamp() != nil { // We can handle this in delete handler return false } - klog.Infof("UPDATED: %T/%s", e.ObjectOld, e.MetaOld.GetName()) - return eventFunc(e.MetaOld, e.ObjectOld) + return eventFunc("UPDATED", e.MetaOld, e.ObjectOld) }, CreateFunc: func(e event.CreateEvent) bool { // Do not handle sub-object create events as the object was create by us. @@ -168,8 +170,7 @@ func add(mgr manager.Manager, r *ReconcileDeployment) error { IsController: true, OwnerType: &api.Deployment{}, }, sop); err != nil { - klog.Errorf("Deployment.Add: watch error: %v", err) - return err + return fmt.Errorf("create watch: %v", err) } } @@ -184,6 +185,10 @@ type ReconcileHook *func(d *api.Deployment) // ReconcileDeployment reconciles a Deployment object type ReconcileDeployment struct { + // The context passed into NewReconcileDeployment, i.e. the same for all + // operations. + ctx context.Context + client client.Client evBroadcaster record.EventBroadcaster evRecorder record.EventRecorder @@ -203,7 +208,11 @@ type ReconcileDeployment struct { } // NewReconcileDeployment creates new deployment reconciler -func NewReconcileDeployment(client client.Client, opts pmemcontroller.ControllerOptions) (reconcile.Reconciler, error) { +func NewReconcileDeployment(ctx context.Context, client client.Client, opts pmemcontroller.ControllerOptions) (reconcile.Reconciler, error) { + // "reconcile" will be part of all future log messages. + l := logger.Get(ctx).WithName("reconcile") + ctx = logger.Set(ctx, l) + if opts.Namespace == "" { opts.Namespace = k8sutil.GetNamespace() } @@ -217,19 +226,20 @@ func NewReconcileDeployment(client client.Client, opts pmemcontroller.Controller if err != nil { return nil, fmt.Errorf("failed to get in-cluster client: %v", err) } - image, err := containerImage(cs, opts.Namespace) + image, err := containerImage(ctx, cs, opts.Namespace) if err != nil { return nil, fmt.Errorf("failed to find the operator image: %v", err) } opts.DriverImage = image } - klog.Infof("Using '%s' as default driver image.", opts.DriverImage) + l.Info("new instance", "defaultDriverImage", opts.DriverImage) evBroadcaster := record.NewBroadcaster() evBroadcaster.StartRecordingToSink(&v1.EventSinkImpl{Interface: opts.EventsClient}) evRecorder := evBroadcaster.NewRecorder(scheme.Scheme, corev1.EventSource{Component: "pmem-csi-operator"}) return &ReconcileDeployment{ + ctx: ctx, client: client, evBroadcaster: evBroadcaster, evRecorder: evRecorder, @@ -254,19 +264,21 @@ func (r *ReconcileDeployment) Reconcile(request reconcile.Request) (reconcile.Re startTime := time.Now() requeueDelayOnError := 2 * time.Minute + l := logger.Get(r.ctx).WithValues("deployment", request.NamespacedName.Name) + ctx := logger.Set(r.ctx, l) // Fetch the Deployment instance deployment := &api.Deployment{} - err = r.client.Get(context.TODO(), request.NamespacedName, deployment) + err = r.client.Get(ctx, request.NamespacedName, deployment) if err != nil { - klog.V(3).Infof("Failed to retrieve object '%s' to reconcile", request.Name) + l.Error(err, "failed to retrieve CR to reconcile", "deployment", request.Name) // One reason for this could be a failed predicate event handler of // sub-objects. So requeue the request so that the same predicate // handle could be called on that object. return reconcile.Result{Requeue: requeue, RequeueAfter: requeueDelayOnError}, err } - klog.Infof("Reconciling deployment %q", deployment.GetName()) + l.V(3).Info("reconcile starting", "deployment", deployment.GetName()) // If the deployment has already been marked for deletion, // then we don't need to do anything for it because the @@ -294,23 +306,23 @@ func (r *ReconcileDeployment) Reconcile(request reconcile.Request) (reconcile.Re // update status defer func() { - klog.Infof("Updating deployment status...") + l.V(5).Info("updating deployment status") // Some clients(fake client used in tests) do not support patching status reliably // and updates even spec changes. So, revert any spec changes(like deployment defaults) we made. // Revert back spec changes, those are not supposed to get saved on the API server. deployment.Spec.DeepCopyInto(&dep.Spec) - if err := r.PatchDeploymentStatus(dep, client.MergeFrom(deployment.DeepCopy())); err != nil { - klog.Warningf("failed to update status %q for deployment %q: %v", - dep.Status.Phase, dep.Name, err) + if err := r.patchDeploymentStatus(dep, client.MergeFrom(deployment.DeepCopy())); err != nil { + l.Error(err, "failed to update status", "phase", dep.Status.Phase, "deployment", dep.Name) + // TODO: requeue object?! } - klog.Infof("End of reconcile. Duration: %v", time.Since(startTime)) + l.V(3).Info("reconcile done", "duration", time.Since(startTime)) }() - d := &PmemCSIDriver{dep, r.namespace, r.k8sVersion} - if err := d.Reconcile(r); err != nil { - klog.Infof("Reconcile error: %v", err) + d := &pmemCSIDeployment{dep, r.namespace, r.k8sVersion} + if err := d.reconcile(ctx, r); err != nil { + l.Error(err, "reconcile failed") dep.Status.Phase = api.DeploymentPhaseFailed dep.Status.Reason = err.Error() r.evRecorder.Event(dep, corev1.EventTypeWarning, api.EventReasonFailed, err.Error()) @@ -349,7 +361,7 @@ func (r *ReconcileDeployment) Get(obj runtime.Object) error { if err != nil { return fmt.Errorf("internal error %T: %v", obj, err) } - return r.client.Get(context.TODO(), key, obj) + return r.client.Get(r.ctx, key, obj) } // Delete delete existing Kubernetes object @@ -358,16 +370,16 @@ func (r *ReconcileDeployment) Delete(obj runtime.Object) error { if err != nil { return fmt.Errorf("internal error %T: %v", obj, err) } - klog.Infof("Deleting '%s/%s' of type '%T'", metaObj.GetNamespace(), metaObj.GetName(), obj) - return r.client.Delete(context.TODO(), obj) + logger.Get(r.ctx).Info("deleting", "object", logger.KObjWithType(metaObj)) + return r.client.Delete(r.ctx, obj) } // PatchDeploymentStatus patches the give given deployment CR status -func (r *ReconcileDeployment) PatchDeploymentStatus(dep *api.Deployment, patch client.Patch) error { +func (r *ReconcileDeployment) patchDeploymentStatus(dep *api.Deployment, patch client.Patch) error { dep.Status.LastUpdated = metav1.Now() // Passing a copy of CR to patch as the fake client used in tests // will write back the changes to both status and spec. - if err := r.client.Status().Patch(context.TODO(), dep.DeepCopy(), patch); err != nil { + if err := r.client.Status().Patch(r.ctx, dep.DeepCopy(), patch); err != nil { return err } // update the status of cached deployment @@ -401,7 +413,7 @@ func (r *ReconcileDeployment) cacheDeploymentStatus(name string, status api.Depl } } -func (r *ReconcileDeployment) getDeploymentFor(obj metav1.Object) (*PmemCSIDriver, error) { +func (r *ReconcileDeployment) getDeploymentFor(obj metav1.Object) (*pmemCSIDeployment, error) { r.deploymentsMutex.Lock() defer r.deploymentsMutex.Unlock() for _, d := range r.deployments { @@ -411,7 +423,7 @@ func (r *ReconcileDeployment) getDeploymentFor(obj metav1.Object) (*PmemCSIDrive if err := deployment.EnsureDefaults(r.containerImage); err != nil { return nil, err } - return &PmemCSIDriver{deployment, r.namespace, r.k8sVersion}, nil + return &pmemCSIDeployment{deployment, r.namespace, r.k8sVersion}, nil } } @@ -419,14 +431,14 @@ func (r *ReconcileDeployment) getDeploymentFor(obj metav1.Object) (*PmemCSIDrive } // containerImage returns container image name used by operator Pod -func containerImage(cs *kubernetes.Clientset, namespace string) (string, error) { +func containerImage(ctx context.Context, cs *kubernetes.Clientset, namespace string) (string, error) { const podNameEnv = "POD_NAME" const operatorNameEnv = "OPERATOR_NAME" containerImage := "" // Operator deployment shall provide this environment if podName := os.Getenv(podNameEnv); podName != "" { - pod, err := cs.CoreV1().Pods(namespace).Get(context.TODO(), podName, metav1.GetOptions{}) + pod, err := cs.CoreV1().Pods(namespace).Get(ctx, podName, metav1.GetOptions{}) if err != nil { return "", fmt.Errorf("error getting self pod '%s/%s': %v", namespace, podName, err) } diff --git a/pkg/pmem-csi-operator/controller/deployment/deployment_controller_test.go b/pkg/pmem-csi-operator/controller/deployment/deployment_controller_test.go index 1ab4186c83..d234d29c45 100644 --- a/pkg/pmem-csi-operator/controller/deployment/deployment_controller_test.go +++ b/pkg/pmem-csi-operator/controller/deployment/deployment_controller_test.go @@ -17,6 +17,8 @@ import ( "github.com/intel/pmem-csi/deploy" "github.com/intel/pmem-csi/pkg/apis" api "github.com/intel/pmem-csi/pkg/apis/pmemcsi/v1beta1" + "github.com/intel/pmem-csi/pkg/logger" + "github.com/intel/pmem-csi/pkg/logger/testinglogger" pmemcontroller "github.com/intel/pmem-csi/pkg/pmem-csi-operator/controller" "github.com/intel/pmem-csi/pkg/pmem-csi-operator/controller/deployment" "github.com/intel/pmem-csi/pkg/pmem-csi-operator/controller/deployment/testcases" @@ -45,6 +47,7 @@ type pmemDeployment struct { name string deviceMode string logLevel uint16 + logFormat string image, pullPolicy, provisionerImage, registrarImage string controllerCPU, controllerMemory string nodeCPU, nodeMemory string @@ -73,6 +76,7 @@ func getDeployment(d *pmemDeployment) *api.Deployment { spec := &dep.Spec spec.DeviceMode = api.DeviceMode(d.deviceMode) spec.LogLevel = d.logLevel + spec.LogFormat = api.LogFormat(d.logFormat) spec.Image = d.image spec.PullPolicy = corev1.PullPolicy(d.pullPolicy) spec.ProvisionerImage = d.provisionerImage @@ -203,6 +207,8 @@ func TestDeploymentController(t *testing.T) { testIt := func(t *testing.T, testK8sVersion version.Version) { type testContext struct { + ctx context.Context + t *testing.T c client.Client cs kubernetes.Interface rc reconcile.Reconciler @@ -215,8 +221,8 @@ func TestDeploymentController(t *testing.T) { testDriverImage = "fake-driver-image" ) - newReconcileDeployment := func(c client.Client, cs kubernetes.Interface) reconcile.Reconciler { - rc, err := deployment.NewReconcileDeployment(c, pmemcontroller.ControllerOptions{ + newReconcileDeployment := func(ctx context.Context, c client.Client, cs kubernetes.Interface) reconcile.Reconciler { + rc, err := deployment.NewReconcileDeployment(ctx, c, pmemcontroller.ControllerOptions{ Namespace: testNamespace, K8sVersion: testK8sVersion, DriverImage: testDriverImage, @@ -228,12 +234,15 @@ func TestDeploymentController(t *testing.T) { } setup := func(t *testing.T) *testContext { + ctx := logger.Set(context.Background(), testinglogger.New(t)) tc := &testContext{ + ctx: ctx, + t: t, c: fake.NewFakeClient(), cs: cgfake.NewSimpleClientset(), resourceVersions: map[string]string{}, } - tc.rc = newReconcileDeployment(tc.c, tc.cs) + tc.rc = newReconcileDeployment(ctx, tc.c, tc.cs) tc.evWatcher = tc.rc.(*deployment.ReconcileDeployment).EventBroadcaster().StartEventWatcher(func(ev *corev1.Event) { // Discard consecutive duplicate events, mimicking the EventAggregator behavior if len(tc.events) != 0 { @@ -247,14 +256,14 @@ func TestDeploymentController(t *testing.T) { return tc } - teardown := func(t *testing.T, tc *testContext) { + teardown := func(tc *testContext) { if tc != nil && tc.evWatcher != nil { tc.evWatcher.Stop() } } - validateEvents := func(t *testing.T, tc *testContext, dep *api.Deployment, expectedEvents []string) { - require.Eventually(t, func() bool { + validateEvents := func(tc *testContext, dep *api.Deployment, expectedEvents []string) { + require.Eventually(tc.t, func() bool { return len(tc.events) >= len(expectedEvents) }, 30*time.Second, time.Second, "receive all expected events") events := []string{} @@ -263,25 +272,25 @@ func TestDeploymentController(t *testing.T) { events = append(events, e.Reason) } } - require.ElementsMatch(t, events, expectedEvents, "events must match") + require.ElementsMatch(tc.t, events, expectedEvents, "events must match") } - validateConditions := func(t *testing.T, tc *testContext, name string, expected map[api.DeploymentConditionType]corev1.ConditionStatus) { + validateConditions := func(tc *testContext, name string, expected map[api.DeploymentConditionType]corev1.ConditionStatus) { dep := &api.Deployment{ ObjectMeta: metav1.ObjectMeta{ Name: name, }, } - err := tc.c.Get(context.TODO(), client.ObjectKey{Name: name}, dep) - require.NoError(t, err, "get deployment: %s", name) - require.Equal(t, len(expected), len(dep.Status.Conditions), "mismatched conditions(%+v)", dep.Status.Conditions) + err := tc.c.Get(tc.ctx, client.ObjectKey{Name: name}, dep) + require.NoError(tc.t, err, "get deployment: %s", name) + require.Equal(tc.t, len(expected), len(dep.Status.Conditions), "mismatched conditions(%+v)", dep.Status.Conditions) for _, c := range dep.Status.Conditions { - require.Equal(t, expected[c.Type], c.Status, "condition status") + require.Equal(tc.t, expected[c.Type], c.Status, "condition status") } } - validateDriver := func(t *testing.T, tc *testContext, dep *api.Deployment, expectedEvents []string, wasUpdated bool) { + validateDriver := func(tc *testContext, dep *api.Deployment, expectedEvents []string, wasUpdated bool) { // We may have to fill in some defaults, so make a copy first. dep = dep.DeepCopyObject().(*api.Deployment) if dep.Spec.Image == "" { @@ -294,27 +303,27 @@ func TestDeploymentController(t *testing.T) { rv = nil } _, err := validate.DriverDeployment(tc.c, testK8sVersion, testNamespace, *dep, rv) - require.NoError(t, err, "validate deployment") - validateEvents(t, tc, dep, expectedEvents) + require.NoError(tc.t, err, "validate deployment") + validateEvents(tc, dep, expectedEvents) } t.Parallel() t.Run("deployment with defaults", func(t *testing.T) { tc := setup(t) - defer teardown(t, tc) + defer teardown(tc) d := &pmemDeployment{ name: "test-deployment", } dep := getDeployment(d) - err := tc.c.Create(context.TODO(), dep) + err := tc.c.Create(tc.ctx, dep) require.NoError(t, err, "failed to create deployment") testReconcilePhase(t, tc.rc, tc.c, d.name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) - validateConditions(t, tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ + validateDriver(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) + validateConditions(tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ api.CertsReady: corev1.ConditionTrue, api.DriverDeployed: corev1.ConditionTrue, }) @@ -322,7 +331,7 @@ func TestDeploymentController(t *testing.T) { t.Run("deployment with explicit values", func(t *testing.T) { tc := setup(t) - defer teardown(t, tc) + defer teardown(tc) d := &pmemDeployment{ name: "test-deployment", image: "test-driver:v0.0.0", @@ -330,6 +339,7 @@ func TestDeploymentController(t *testing.T) { registrarImage: "test-driver-registrar-image:v.0.0.0", pullPolicy: "Never", logLevel: 10, + logFormat: "json", controllerCPU: "1500m", controllerMemory: "300Mi", nodeCPU: "1000m", @@ -338,13 +348,13 @@ func TestDeploymentController(t *testing.T) { } dep := getDeployment(d) - err := tc.c.Create(context.TODO(), dep) + err := tc.c.Create(tc.ctx, dep) require.NoError(t, err, "failed to create deployment") // Reconcile now should change Phase to running testReconcilePhase(t, tc.rc, tc.c, d.name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) - validateConditions(t, tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ + validateDriver(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) + validateConditions(tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ api.CertsReady: corev1.ConditionTrue, api.DriverDeployed: corev1.ConditionTrue, }) @@ -352,7 +362,7 @@ func TestDeploymentController(t *testing.T) { t.Run("multiple deployments", func(t *testing.T) { tc := setup(t) - defer teardown(t, tc) + defer teardown(tc) d1 := &pmemDeployment{ name: "test-deployment1", } @@ -362,11 +372,11 @@ func TestDeploymentController(t *testing.T) { } dep1 := getDeployment(d1) - err := tc.c.Create(context.TODO(), dep1) + err := tc.c.Create(tc.ctx, dep1) require.NoError(t, err, "failed to create deployment1") dep2 := getDeployment(d2) - err = tc.c.Create(context.TODO(), dep2) + err = tc.c.Create(tc.ctx, dep2) require.NoError(t, err, "failed to create deployment2") conditions := map[api.DeploymentConditionType]corev1.ConditionStatus{ @@ -375,16 +385,16 @@ func TestDeploymentController(t *testing.T) { } testReconcilePhase(t, tc.rc, tc.c, d1.name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, dep1, []string{api.EventReasonNew, api.EventReasonRunning}, false) - validateConditions(t, tc, d1.name, conditions) + validateDriver(tc, dep1, []string{api.EventReasonNew, api.EventReasonRunning}, false) + validateConditions(tc, d1.name, conditions) testReconcilePhase(t, tc.rc, tc.c, d2.name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, dep2, []string{api.EventReasonNew, api.EventReasonRunning}, false) - validateConditions(t, tc, d2.name, conditions) + validateDriver(tc, dep2, []string{api.EventReasonNew, api.EventReasonRunning}, false) + validateConditions(tc, d2.name, conditions) }) t.Run("invalid device mode", func(t *testing.T) { tc := setup(t) - defer teardown(t, tc) + defer teardown(tc) d := &pmemDeployment{ name: "test-driver-modes", deviceMode: "foobar", @@ -392,12 +402,12 @@ func TestDeploymentController(t *testing.T) { dep := getDeployment(d) - err := tc.c.Create(context.TODO(), dep) + err := tc.c.Create(tc.ctx, dep) require.NoError(t, err, "failed to create deployment") // Deployment should failed with an error testReconcilePhase(t, tc.rc, tc.c, d.name, true, true, api.DeploymentPhaseFailed) - validateEvents(t, tc, dep, []string{api.EventReasonNew, api.EventReasonFailed}) - validateConditions(t, tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{}) + validateEvents(tc, dep, []string{api.EventReasonNew, api.EventReasonFailed}) + validateConditions(tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{}) }) t.Run("LVM mode", func(t *testing.T) { @@ -409,11 +419,11 @@ func TestDeploymentController(t *testing.T) { dep := getDeployment(d) - err := tc.c.Create(context.TODO(), dep) + err := tc.c.Create(tc.ctx, dep) require.NoError(t, err, "failed to create deployment") testReconcilePhase(t, tc.rc, tc.c, d.name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) - validateConditions(t, tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ + validateDriver(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) + validateConditions(tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ api.CertsReady: corev1.ConditionTrue, api.DriverDeployed: corev1.ConditionTrue, }) @@ -428,11 +438,11 @@ func TestDeploymentController(t *testing.T) { dep := getDeployment(d) - err := tc.c.Create(context.TODO(), dep) + err := tc.c.Create(tc.ctx, dep) require.NoError(t, err, "failed to create deployment") testReconcilePhase(t, tc.rc, tc.c, d.name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) - validateConditions(t, tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ + validateDriver(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) + validateConditions(tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ api.CertsReady: corev1.ConditionTrue, api.DriverDeployed: corev1.ConditionTrue, }) @@ -440,7 +450,7 @@ func TestDeploymentController(t *testing.T) { t.Run("provided private keys", func(t *testing.T) { tc := setup(t) - defer teardown(t, tc) + defer teardown(tc) // Generate private key regKey, err := pmemtls.NewPrivateKey() require.NoError(t, err, "Failed to generate a private key: %v", err) @@ -452,13 +462,13 @@ func TestDeploymentController(t *testing.T) { regKey: encodedKey, } dep := getDeployment(d) - err = tc.c.Create(context.TODO(), dep) + err = tc.c.Create(tc.ctx, dep) require.NoError(t, err, "failed to create deployment") // First deployment expected to be successful testReconcilePhase(t, tc.rc, tc.c, d.name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) - validateConditions(t, tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ + validateDriver(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) + validateConditions(tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ api.CertsReady: corev1.ConditionTrue, api.DriverDeployed: corev1.ConditionTrue, }) @@ -466,7 +476,7 @@ func TestDeploymentController(t *testing.T) { t.Run("provided private keys and certificates", func(t *testing.T) { tc := setup(t) - defer teardown(t, tc) + defer teardown(tc) ca, err := pmemtls.NewCA(nil, nil) require.NoError(t, err, "failed to instantiate CA") @@ -489,13 +499,13 @@ func TestDeploymentController(t *testing.T) { ncCert: pmemtls.EncodeCert(ncCert), } dep := getDeployment(d) - err = tc.c.Create(context.TODO(), dep) + err = tc.c.Create(tc.ctx, dep) require.NoError(t, err, "failed to create deployment") // First deployment expected to be successful testReconcilePhase(t, tc.rc, tc.c, d.name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) - validateConditions(t, tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ + validateDriver(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) + validateConditions(tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ api.CertsReady: corev1.ConditionTrue, api.CertsVerified: corev1.ConditionTrue, api.DriverDeployed: corev1.ConditionTrue, @@ -504,7 +514,7 @@ func TestDeploymentController(t *testing.T) { t.Run("invalid private keys and certificates", func(t *testing.T) { tc := setup(t) - defer teardown(t, tc) + defer teardown(tc) ca, err := pmemtls.NewCA(nil, nil) require.NoError(t, err, "faield to instantiate CA") @@ -527,12 +537,12 @@ func TestDeploymentController(t *testing.T) { ncCert: pmemtls.EncodeCert(ncCert), } dep := getDeployment(d) - err = tc.c.Create(context.TODO(), dep) + err = tc.c.Create(tc.ctx, dep) require.NoError(t, err, "failed to create deployment") testReconcilePhase(t, tc.rc, tc.c, d.name, true, true, api.DeploymentPhaseFailed) - validateEvents(t, tc, dep, []string{api.EventReasonNew, api.EventReasonFailed}) - validateConditions(t, tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ + validateEvents(tc, dep, []string{api.EventReasonNew, api.EventReasonFailed}) + validateConditions(tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ api.CertsVerified: corev1.ConditionFalse, api.DriverDeployed: corev1.ConditionFalse, }) @@ -540,7 +550,7 @@ func TestDeploymentController(t *testing.T) { t.Run("expired certificates", func(t *testing.T) { tc := setup(t) - defer teardown(t, tc) + defer teardown(tc) oneDayAgo := time.Now().Add(-24 * time.Hour) oneMinuteAgo := time.Now().Add(-1 * time.Minute) @@ -566,12 +576,12 @@ func TestDeploymentController(t *testing.T) { ncCert: pmemtls.EncodeCert(ncCert), } dep := getDeployment(d) - err = tc.c.Create(context.TODO(), dep) + err = tc.c.Create(tc.ctx, dep) require.NoError(t, err, "failed to create deployment") testReconcilePhase(t, tc.rc, tc.c, d.name, true, true, api.DeploymentPhaseFailed) - validateEvents(t, tc, dep, []string{api.EventReasonNew, api.EventReasonFailed}) - validateConditions(t, tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ + validateEvents(tc, dep, []string{api.EventReasonNew, api.EventReasonFailed}) + validateConditions(tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ api.CertsVerified: corev1.ConditionFalse, api.DriverDeployed: corev1.ConditionFalse, }) @@ -579,7 +589,7 @@ func TestDeploymentController(t *testing.T) { t.Run("modified deployment under reconcile", func(t *testing.T) { tc := setup(t) - defer teardown(t, tc) + defer teardown(tc) d := &pmemDeployment{ name: "modified-deployment", @@ -588,13 +598,13 @@ func TestDeploymentController(t *testing.T) { var updatedDep *api.Deployment dep := getDeployment(d) - err := tc.c.Create(context.TODO(), dep) + err := tc.c.Create(tc.ctx, dep) require.NoError(t, err, "failed to create deployment") hook := func(d *api.Deployment) { updatedDep = d.DeepCopy() updatedDep.Spec.LogLevel++ - err := tc.c.Update(context.TODO(), updatedDep) + err := tc.c.Update(tc.ctx, updatedDep) require.NoError(t, err, "failed to update deployment") } tc.rc.(*deployment.ReconcileDeployment).AddHook(&hook) @@ -605,15 +615,15 @@ func TestDeploymentController(t *testing.T) { } testReconcilePhase(t, tc.rc, tc.c, d.name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) - validateConditions(t, tc, d.name, conditions) + validateDriver(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) + validateConditions(tc, d.name, conditions) tc.rc.(*deployment.ReconcileDeployment).RemoveHook(&hook) // Next reconcile phase should catch the deployment changes testReconcilePhase(t, tc.rc, tc.c, d.name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, updatedDep, []string{api.EventReasonNew, api.EventReasonRunning}, true) - validateConditions(t, tc, d.name, conditions) + validateDriver(tc, updatedDep, []string{api.EventReasonNew, api.EventReasonRunning}, true) + validateConditions(tc, d.name, conditions) }) t.Run("updating", func(t *testing.T) { @@ -623,7 +633,7 @@ func TestDeploymentController(t *testing.T) { t.Run(testcase.Name, func(t *testing.T) { testIt := func(restart bool) { tc := setup(t) - defer teardown(t, tc) + defer teardown(tc) dep := testcase.Deployment.DeepCopyObject().(*api.Deployment) // Assumption is that all the testcases are positive cases. @@ -638,39 +648,41 @@ func TestDeploymentController(t *testing.T) { // When working with the fake client, we need to make up a UID. dep.UID = types.UID("fake-uid-" + dep.Name) - err := tc.c.Create(context.TODO(), dep) + err := tc.c.Create(tc.ctx, dep) require.NoError(t, err, "create deployment") testReconcilePhase(t, tc.rc, tc.c, dep.Name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) + validateDriver(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) // Reconcile now should keep phase as running. testReconcilePhase(t, tc.rc, tc.c, dep.Name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) - validateEvents(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}) - validateConditions(t, tc, dep.Name, conditions) + validateDriver(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) + validateEvents(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}) + validateConditions(tc, dep.Name, conditions) // Retrieve existing object before updating it. - err = tc.c.Get(context.TODO(), types.NamespacedName{Name: dep.Name}, dep) + err = tc.c.Get(tc.ctx, types.NamespacedName{Name: dep.Name}, dep) require.NoError(t, err, "retrive existing deployment object") if restart { // Simulate restarting the operator by creating a new instance. - tc.rc = newReconcileDeployment(tc.c, tc.cs) + tc.rc = newReconcileDeployment(tc.ctx, tc.c, tc.cs) } // Update. testcase.Mutate(dep) - err = tc.c.Update(context.TODO(), dep) + err = tc.c.Update(tc.ctx, dep) require.NoError(t, err, "update deployment") // Reconcile is expected to not fail. testReconcilePhase(t, tc.rc, tc.c, dep.Name, false, false, api.DeploymentPhaseRunning) // Recheck the container resources are updated - validateDriver(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, true) + validateDriver(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, true) } + t.Parallel() + t.Run("while running", func(t *testing.T) { testIt(false) }) @@ -684,23 +696,23 @@ func TestDeploymentController(t *testing.T) { t.Run("delete obsolete objects", func(t *testing.T) { tc := setup(t) - defer teardown(t, tc) + defer teardown(tc) d := &pmemDeployment{ name: "test-driver-upgrades", } dep := getDeployment(d) - err := tc.c.Create(context.TODO(), dep) + err := tc.c.Create(tc.ctx, dep) require.NoError(t, err, "failed to create deployment") testReconcilePhase(t, tc.rc, tc.c, d.name, false, false, api.DeploymentPhaseRunning) - validateDriver(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) - validateConditions(t, tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ + validateDriver(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, false) + validateConditions(tc, d.name, map[api.DeploymentConditionType]corev1.ConditionStatus{ api.CertsReady: corev1.ConditionTrue, api.DriverDeployed: corev1.ConditionTrue, }) - err = tc.c.Get(context.TODO(), client.ObjectKey{Name: d.name}, dep) + err = tc.c.Get(tc.ctx, client.ObjectKey{Name: d.name}, dep) require.NoError(t, err, "get deployment") cm1 := &corev1.ConfigMap{ @@ -717,7 +729,7 @@ func TestDeploymentController(t *testing.T) { }, Data: map[string]string{}, } - err = tc.c.Create(context.TODO(), cm1) + err = tc.c.Create(tc.ctx, cm1) require.NoError(t, err, "create configmap owned by deployment") cm2 := &corev1.ConfigMap{ @@ -731,27 +743,27 @@ func TestDeploymentController(t *testing.T) { }, Data: map[string]string{}, } - err = tc.c.Create(context.TODO(), cm2) + err = tc.c.Create(tc.ctx, cm2) require.NoError(t, err, "create configmap: %s", cm2.Name) // Use a fresh reconciler to mimic operator restart - tc.rc = newReconcileDeployment(tc.c, tc.cs) + tc.rc = newReconcileDeployment(tc.ctx, tc.c, tc.cs) // A fresh reconcile should delete the newly created above ConfigMap testReconcilePhase(t, tc.rc, tc.c, d.name, false, false, api.DeploymentPhaseRunning) - err = tc.c.Get(context.TODO(), client.ObjectKey{Name: d.name}, dep) + err = tc.c.Get(tc.ctx, client.ObjectKey{Name: d.name}, dep) require.NoError(t, err, "get deployment") // It is debatable whether the operator should update all objects after // a restart. Currently it does. - validateDriver(t, tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, true) + validateDriver(tc, dep, []string{api.EventReasonNew, api.EventReasonRunning}, true) cm := &corev1.ConfigMap{} - err = tc.c.Get(context.TODO(), client.ObjectKey{Name: cm1.Name, Namespace: testNamespace}, cm) + err = tc.c.Get(tc.ctx, client.ObjectKey{Name: cm1.Name, Namespace: testNamespace}, cm) require.Errorf(t, err, "get '%s' config map after reconcile", cm1.Name) require.True(t, errors.IsNotFound(err), "config map not found after reconcile") // operator should not delete the objects unrelated to any deployment - err = tc.c.Get(context.TODO(), client.ObjectKey{Name: cm2.Name, Namespace: testNamespace}, cm) + err = tc.c.Get(tc.ctx, client.ObjectKey{Name: cm2.Name, Namespace: testNamespace}, cm) require.NoErrorf(t, err, "get '%s' config map after reconcile", cm2.Name) }) } diff --git a/pkg/pmem-csi-operator/controller/deployment/testcases/testcases.go b/pkg/pmem-csi-operator/controller/deployment/testcases/testcases.go index 977d7b454b..47f49e7081 100644 --- a/pkg/pmem-csi-operator/controller/deployment/testcases/testcases.go +++ b/pkg/pmem-csi-operator/controller/deployment/testcases/testcases.go @@ -79,6 +79,13 @@ func UpdateTests() []UpdateTest { "logLevel": func(d *api.Deployment) { d.Spec.LogLevel++ }, + "logFormat": func(d *api.Deployment) { + if d.Spec.LogFormat == api.LogFormatText { + d.Spec.LogFormat = api.LogFormatJSON + } else { + d.Spec.LogFormat = api.LogFormatText + } + }, "nodeSelector": func(d *api.Deployment) { d.Spec.NodeSelector = map[string]string{ "still-no-such-label": "still-no-such-value", diff --git a/pkg/pmem-csi-operator/main.go b/pkg/pmem-csi-operator/main.go index 01841f0164..a559017af2 100644 --- a/pkg/pmem-csi-operator/main.go +++ b/pkg/pmem-csi-operator/main.go @@ -12,18 +12,18 @@ import ( "fmt" "runtime" - "k8s.io/client-go/kubernetes" - "k8s.io/klog/v2" - "github.com/intel/pmem-csi/pkg/apis" api "github.com/intel/pmem-csi/pkg/apis/pmemcsi/v1beta1" "github.com/intel/pmem-csi/pkg/k8sutil" + "github.com/intel/pmem-csi/pkg/logger" pmemcommon "github.com/intel/pmem-csi/pkg/pmem-common" "github.com/intel/pmem-csi/pkg/pmem-csi-operator/controller" "github.com/operator-framework/operator-lib/leader" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" apiruntime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/kubernetes" + "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client/config" "sigs.k8s.io/controller-runtime/pkg/manager" @@ -39,8 +39,11 @@ func printVersion() { klog.Info(fmt.Sprintf("Go OS/Arch: %s/%s", runtime.GOOS, runtime.GOARCH)) } -var driverImage string -var startWebhook bool +var ( + driverImage = flag.String("image", "", "docker container image used for deploying the operator.") + startWebhook = flag.Bool("webhook", false, "run conversion webhook server") + logFormat = logger.NewFlag() +) const ( // Default values used by OLM CA for webhook @@ -51,15 +54,14 @@ const ( ) func init() { - klog.InitFlags(nil) - flag.StringVar(&driverImage, "image", "", "docker container image used for deploying the operator.") - flag.BoolVar(&startWebhook, "webhook", false, "run conversion webhook server") + // klog gets initialized by k8s.io/component-base/logs. flag.Set("logtostderr", "true") } func Main() int { flag.Parse() + logFormat.Apply() printVersion() @@ -70,7 +72,7 @@ func Main() int { return 1 } - ctx := context.TODO() + ctx := context.Background() // Become the leader before proceeding err = leader.Become(ctx, "pmem-csi-operator-lock") if err != nil { @@ -111,11 +113,11 @@ func Main() int { return 1 } // Setup all Controllers - if err := controller.AddToManager(mgr, controller.ControllerOptions{ + if err := controller.AddToManager(ctx, mgr, controller.ControllerOptions{ Config: mgr.GetConfig(), Namespace: namespace, K8sVersion: *ver, - DriverImage: driverImage, + DriverImage: *driverImage, EventsClient: cs.CoreV1().Events(""), }); err != nil { pmemcommon.ExitError("Failed to add controller to manager: ", err) @@ -124,7 +126,7 @@ func Main() int { // Setup conversion webhooks - if startWebhook { + if *startWebhook { if err := setupWebhookWithManager(mgr, &api.Deployment{ ObjectMeta: metav1.ObjectMeta{Name: "pmem-csi-operator"}, }); err != nil { @@ -142,7 +144,7 @@ func Main() int { } list := &api.DeploymentList{} - if err := mgr.GetClient().List(context.TODO(), list); err != nil { + if err := mgr.GetClient().List(ctx, list); err != nil { pmemcommon.ExitError("failed to get deployment list: %v", err) return 1 } diff --git a/test/e2e/deploy/deploy.go b/test/e2e/deploy/deploy.go index af10a58ca6..d378278c20 100644 --- a/test/e2e/deploy/deploy.go +++ b/test/e2e/deploy/deploy.go @@ -811,7 +811,9 @@ func EnsureDeploymentNow(f *framework.Framework, deployment *Deployment) { } return } - framework.Logf("have %s PMEM-CSI deployment, want %s -> delete existing deployment", running.Name(), deployment.Name()) + framework.Logf("have %s PMEM-CSI deployment in namespace %s, want %s in namespace %s-> delete existing deployment", + running.Name(), running.Namespace, + deployment.Name(), deployment.Namespace) if running.HasOLM { cmd := exec.Command("test/stop-operator.sh", "-olm") diff --git a/test/e2e/operator/deployment_api.go b/test/e2e/operator/deployment_api.go index fb4df94542..af0810f126 100644 --- a/test/e2e/operator/deployment_api.go +++ b/test/e2e/operator/deployment_api.go @@ -39,6 +39,7 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/watch" "k8s.io/kubernetes/test/e2e/framework" + e2epod "k8s.io/kubernetes/test/e2e/framework/pod" e2epv "k8s.io/kubernetes/test/e2e/framework/pv" runtime "sigs.k8s.io/controller-runtime/pkg/client" @@ -294,6 +295,38 @@ var _ = deploy.DescribeForSome("API", func(d *deploy.Deployment) bool { validateDriver(deployment) }) + Context("logging format", func() { + cases := map[string]api.LogFormat{ + "default": "", + "text": api.LogFormatText, + "JSON": api.LogFormatJSON, + } + for name, format := range cases { + format := format + It(name, func() { + deployment := getDeployment("test-deployment-driver-image") + deployment.Spec.Image = "" + deployment.Spec.PMEMPercentage = 50 + deployment.Spec.LogFormat = format + + deployment = deploy.CreateDeploymentCR(f, deployment) + defer deploy.DeleteDeploymentCR(f, deployment.Name) + + validateDriver(deployment) + + output, err := e2epod.GetPodLogs(f.ClientSet, d.Namespace, deployment.Name+"-controller-0", "pmem-driver") + framework.ExpectNoError(err, "get pod logs for controller-0") + + if format == api.LogFormatJSON { + Expect(output).To(MatchRegexp(`\{"ts":\d+.\d+,"msg":"Version:`), "PMEM-CSI driver output in JSON") + } else { + Expect(output).To(MatchRegexp(`I.*main.go:.*Version: `), "PMEM-CSI driver output in glog format") + } + framework.Logf("got pod log: %s", output) + }) + } + }) + It("shall be able to edit running deployment", func() { deployment := getDeployment("test-deployment-update") @@ -908,6 +941,36 @@ var _ = deploy.DescribeForSome("API", func(d *deploy.Deployment) bool { }) } }) + + Context("LogFormat", func() { + if gvr == deploy.AlphaDeploymentResource { + // Field not part of API. + return + } + + cases := map[string]bool{ + string(api.LogFormatText): true, + string(api.LogFormatJSON): true, + "noSuchMode": false, + } + for format, valid := range cases { + format, valid := format, valid + It(format, func() { + dep := getDeployment("format") + dep.Spec.LogFormat = api.LogFormat(format) + unstructured := toUnstructured(&dep) + _, err := f.DynamicClient.Resource(gvr).Create(context.Background(), unstructured, metav1.CreateOptions{}) + if err == nil { + defer deploy.DeleteDeploymentCR(f, dep.Name) + } + if valid { + framework.ExpectNoError(err, "valid log format should work") + } else { + framework.ExpectError(err, "invalid log format should be rejected") + } + }) + } + }) }) } }) diff --git a/test/setup-ca-kubernetes.sh b/test/setup-ca-kubernetes.sh index 5951c5aeed..ae27cf9a09 100755 --- a/test/setup-ca-kubernetes.sh +++ b/test/setup-ca-kubernetes.sh @@ -10,9 +10,7 @@ # The directory containing setup-ca*.sh. : ${TEST_DIRECTORY:=$(dirname $(readlink -f $0))} - -: ${TEST_DRIVER_NAMESPACE:=pmem-csi} - +. ${TEST_CONFIG:-${TEST_DIRECTORY}/test-config.sh} tmpdir=`mktemp -d` trap 'rm -r $tmpdir' EXIT @@ -39,6 +37,8 @@ NODE_CERT=$(read_key "$tmpdir/pmem-node-controller.pem") # -keyFile (same for all nodes) NODE_KEY=$(read_key "$tmpdir/pmem-node-controller-key.pem") +kubectl get ns ${TEST_DRIVER_NAMESPACE} 2>/dev/null >/dev/null || kubectl create ns ${TEST_DRIVER_NAMESPACE} + ${KUBECTL} apply -f - </dev/null >/dev/null || ${KUBECTL} create ns ${TEST_DRIVER_NAMESPACE} + ${KUBECTL} apply -f - <