mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	vendor k8s.io/utils to 8a87304934321b4b0ad72a7cb3cbc715d67d38c7
This commit is contained in:
		
							
								
								
									
										28
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										28
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							@@ -4088,21 +4088,41 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/repo-infra/kazel",
 | 
								"ImportPath": "k8s.io/repo-infra/kazel",
 | 
				
			||||||
			"Rev": "00fe14e3d1a3f9a73c4cea62d9c33b29c1e03ac4"
 | 
								"Rev": "00fe14e3d1a3f9a73c4cea62d9c33b29c1e03ac4"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/buffer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/utils/clock",
 | 
								"ImportPath": "k8s.io/utils/clock",
 | 
				
			||||||
			"Rev": "8e7ff06bf0e2d3289061230af203e430a15b6dcc"
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/utils/exec",
 | 
								"ImportPath": "k8s.io/utils/exec",
 | 
				
			||||||
			"Rev": "8e7ff06bf0e2d3289061230af203e430a15b6dcc"
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/utils/exec/testing",
 | 
								"ImportPath": "k8s.io/utils/exec/testing",
 | 
				
			||||||
			"Rev": "8e7ff06bf0e2d3289061230af203e430a15b6dcc"
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/io",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/nsenter",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/utils/pointer",
 | 
								"ImportPath": "k8s.io/utils/pointer",
 | 
				
			||||||
			"Rev": "8e7ff06bf0e2d3289061230af203e430a15b6dcc"
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/trace",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1050
									
								
								Godeps/LICENSES
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1050
									
								
								Godeps/LICENSES
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1630,10 +1630,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/apiserver/pkg/util/openapi",
 | 
								"ImportPath": "k8s.io/apiserver/pkg/util/openapi",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/apiserver/pkg/util/trace",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/apiserver/pkg/util/webhook",
 | 
								"ImportPath": "k8s.io/apiserver/pkg/util/webhook",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -2238,10 +2234,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/transport",
 | 
								"ImportPath": "k8s.io/client-go/transport",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/buffer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/cert",
 | 
								"ImportPath": "k8s.io/client-go/util/cert",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -2258,10 +2250,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/util/homedir",
 | 
								"ImportPath": "k8s.io/client-go/util/homedir",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/integer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/retry",
 | 
								"ImportPath": "k8s.io/client-go/util/retry",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -2586,6 +2574,18 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/component-base/logs",
 | 
								"ImportPath": "k8s.io/component-base/logs",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/buffer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/trace",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
			"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
								"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										22
									
								
								staging/src/k8s.io/apiserver/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										22
									
								
								staging/src/k8s.io/apiserver/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							@@ -1938,10 +1938,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/transport",
 | 
								"ImportPath": "k8s.io/client-go/transport",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/buffer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/cert",
 | 
								"ImportPath": "k8s.io/client-go/util/cert",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -1958,10 +1954,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/util/homedir",
 | 
								"ImportPath": "k8s.io/client-go/util/homedir",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/integer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/retry",
 | 
								"ImportPath": "k8s.io/client-go/util/retry",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -2078,9 +2070,21 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/component-base/logs",
 | 
								"ImportPath": "k8s.io/component-base/logs",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/buffer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/utils/pointer",
 | 
								"ImportPath": "k8s.io/utils/pointer",
 | 
				
			||||||
			"Rev": "8e7ff06bf0e2d3289061230af203e430a15b6dcc"
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/trace",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -566,10 +566,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/util/homedir",
 | 
								"ImportPath": "k8s.io/client-go/util/homedir",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/integer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/klog",
 | 
								"ImportPath": "k8s.io/klog",
 | 
				
			||||||
			"Rev": "8139d8cb77af419532b33dfa7dd09fbc5f1d344f"
 | 
								"Rev": "8139d8cb77af419532b33dfa7dd09fbc5f1d344f"
 | 
				
			||||||
@@ -618,6 +614,10 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/util/testing",
 | 
								"ImportPath": "k8s.io/client-go/util/testing",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
			"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
								"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								staging/src/k8s.io/client-go/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8
									
								
								staging/src/k8s.io/client-go/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							@@ -618,6 +618,14 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
								"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
				
			||||||
			"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
								"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/buffer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
			"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
								"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								staging/src/k8s.io/cloud-provider/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								staging/src/k8s.io/cloud-provider/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							@@ -946,10 +946,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/transport",
 | 
								"ImportPath": "k8s.io/client-go/transport",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/buffer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/cert",
 | 
								"ImportPath": "k8s.io/client-go/util/cert",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -962,10 +958,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/util/flowcontrol",
 | 
								"ImportPath": "k8s.io/client-go/util/flowcontrol",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/integer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/retry",
 | 
								"ImportPath": "k8s.io/client-go/util/retry",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -974,6 +966,14 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/klog",
 | 
								"ImportPath": "k8s.io/klog",
 | 
				
			||||||
			"Rev": "8139d8cb77af419532b33dfa7dd09fbc5f1d344f"
 | 
								"Rev": "8139d8cb77af419532b33dfa7dd09fbc5f1d344f"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/buffer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
			"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
								"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -152,7 +152,7 @@
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/utils/pointer",
 | 
								"ImportPath": "k8s.io/utils/pointer",
 | 
				
			||||||
			"Rev": "8e7ff06bf0e2d3289061230af203e430a15b6dcc"
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	]
 | 
						]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								staging/src/k8s.io/csi-api/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								staging/src/k8s.io/csi-api/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							@@ -526,10 +526,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/transport",
 | 
								"ImportPath": "k8s.io/client-go/transport",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/buffer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/cert",
 | 
								"ImportPath": "k8s.io/client-go/util/cert",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -542,10 +538,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/util/flowcontrol",
 | 
								"ImportPath": "k8s.io/client-go/util/flowcontrol",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/integer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/retry",
 | 
								"ImportPath": "k8s.io/client-go/util/retry",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -558,6 +550,14 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
								"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
				
			||||||
			"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
								"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/buffer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
			"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
								"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1222,10 +1222,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/apiserver/pkg/util/proxy",
 | 
								"ImportPath": "k8s.io/apiserver/pkg/util/proxy",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/apiserver/pkg/util/trace",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/apiserver/pkg/util/webhook",
 | 
								"ImportPath": "k8s.io/apiserver/pkg/util/webhook",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -1798,10 +1794,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/transport",
 | 
								"ImportPath": "k8s.io/client-go/transport",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/buffer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/cert",
 | 
								"ImportPath": "k8s.io/client-go/util/cert",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -1818,10 +1810,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/util/homedir",
 | 
								"ImportPath": "k8s.io/client-go/util/homedir",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/integer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/retry",
 | 
								"ImportPath": "k8s.io/client-go/util/retry",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -1862,6 +1850,18 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
								"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
				
			||||||
			"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
								"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/buffer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/trace",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
			"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
								"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -152,7 +152,7 @@
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/utils/pointer",
 | 
								"ImportPath": "k8s.io/utils/pointer",
 | 
				
			||||||
			"Rev": "8e7ff06bf0e2d3289061230af203e430a15b6dcc"
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	]
 | 
						]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								staging/src/k8s.io/kube-proxy/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								staging/src/k8s.io/kube-proxy/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							@@ -152,7 +152,7 @@
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/utils/pointer",
 | 
								"ImportPath": "k8s.io/utils/pointer",
 | 
				
			||||||
			"Rev": "8e7ff06bf0e2d3289061230af203e430a15b6dcc"
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	]
 | 
						]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -152,7 +152,7 @@
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/utils/pointer",
 | 
								"ImportPath": "k8s.io/utils/pointer",
 | 
				
			||||||
			"Rev": "8e7ff06bf0e2d3289061230af203e430a15b6dcc"
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	]
 | 
						]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								staging/src/k8s.io/metrics/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8
									
								
								staging/src/k8s.io/metrics/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							@@ -518,10 +518,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/util/flowcontrol",
 | 
								"ImportPath": "k8s.io/client-go/util/flowcontrol",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/integer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/klog",
 | 
								"ImportPath": "k8s.io/klog",
 | 
				
			||||||
			"Rev": "8139d8cb77af419532b33dfa7dd09fbc5f1d344f"
 | 
								"Rev": "8139d8cb77af419532b33dfa7dd09fbc5f1d344f"
 | 
				
			||||||
@@ -530,6 +526,10 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
								"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
				
			||||||
			"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
								"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
			"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
								"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								staging/src/k8s.io/node-api/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								staging/src/k8s.io/node-api/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							@@ -526,10 +526,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/transport",
 | 
								"ImportPath": "k8s.io/client-go/transport",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/buffer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/cert",
 | 
								"ImportPath": "k8s.io/client-go/util/cert",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -542,10 +538,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/util/flowcontrol",
 | 
								"ImportPath": "k8s.io/client-go/util/flowcontrol",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/integer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/retry",
 | 
								"ImportPath": "k8s.io/client-go/util/retry",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -558,6 +550,14 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
								"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
				
			||||||
			"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
								"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/buffer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
			"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
								"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1182,10 +1182,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/apiserver/pkg/util/openapi",
 | 
								"ImportPath": "k8s.io/apiserver/pkg/util/openapi",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/apiserver/pkg/util/trace",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/apiserver/pkg/util/webhook",
 | 
								"ImportPath": "k8s.io/apiserver/pkg/util/webhook",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -1758,10 +1754,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/transport",
 | 
								"ImportPath": "k8s.io/client-go/transport",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/buffer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/cert",
 | 
								"ImportPath": "k8s.io/client-go/util/cert",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -1778,10 +1770,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/util/homedir",
 | 
								"ImportPath": "k8s.io/client-go/util/homedir",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/integer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/retry",
 | 
								"ImportPath": "k8s.io/client-go/util/retry",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -1814,6 +1802,18 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
								"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
				
			||||||
			"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
								"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/buffer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/trace",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
			"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
								"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -570,10 +570,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/util/homedir",
 | 
								"ImportPath": "k8s.io/client-go/util/homedir",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/integer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/jsonpath",
 | 
								"ImportPath": "k8s.io/client-go/util/jsonpath",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -582,6 +578,10 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/klog",
 | 
								"ImportPath": "k8s.io/klog",
 | 
				
			||||||
			"Rev": "8139d8cb77af419532b33dfa7dd09fbc5f1d344f"
 | 
								"Rev": "8139d8cb77af419532b33dfa7dd09fbc5f1d344f"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
			"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
								"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1142,10 +1142,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/transport",
 | 
								"ImportPath": "k8s.io/client-go/transport",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/buffer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/cert",
 | 
								"ImportPath": "k8s.io/client-go/util/cert",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -1162,10 +1158,6 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/client-go/util/homedir",
 | 
								"ImportPath": "k8s.io/client-go/util/homedir",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/integer",
 | 
					 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "k8s.io/client-go/util/retry",
 | 
								"ImportPath": "k8s.io/client-go/util/retry",
 | 
				
			||||||
			"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
								"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 | 
				
			||||||
@@ -1182,6 +1174,14 @@
 | 
				
			|||||||
			"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
								"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
 | 
				
			||||||
			"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
								"Rev": "ced9eb3070a5f1c548ef46e8dfe2a97c208d9f03"
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/buffer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"ImportPath": "k8s.io/utils/integer",
 | 
				
			||||||
 | 
								"Rev": "8a87304934321b4b0ad72a7cb3cbc715d67d38c7"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"ImportPath": "sigs.k8s.io/yaml",
 | 
								"ImportPath": "sigs.k8s.io/yaml",
 | 
				
			||||||
			"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
								"Rev": "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							@@ -467,9 +467,14 @@ filegroup(
 | 
				
			|||||||
        "//vendor/k8s.io/kube-openapi/pkg/handler:all-srcs",
 | 
					        "//vendor/k8s.io/kube-openapi/pkg/handler:all-srcs",
 | 
				
			||||||
        "//vendor/k8s.io/kube-openapi/pkg/util:all-srcs",
 | 
					        "//vendor/k8s.io/kube-openapi/pkg/util:all-srcs",
 | 
				
			||||||
        "//vendor/k8s.io/repo-infra/kazel:all-srcs",
 | 
					        "//vendor/k8s.io/repo-infra/kazel:all-srcs",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/utils/buffer:all-srcs",
 | 
				
			||||||
        "//vendor/k8s.io/utils/clock:all-srcs",
 | 
					        "//vendor/k8s.io/utils/clock:all-srcs",
 | 
				
			||||||
        "//vendor/k8s.io/utils/exec:all-srcs",
 | 
					        "//vendor/k8s.io/utils/exec:all-srcs",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/utils/integer:all-srcs",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/utils/io:all-srcs",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/utils/nsenter:all-srcs",
 | 
				
			||||||
        "//vendor/k8s.io/utils/pointer:all-srcs",
 | 
					        "//vendor/k8s.io/utils/pointer:all-srcs",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/utils/trace:all-srcs",
 | 
				
			||||||
        "//vendor/sigs.k8s.io/yaml:all-srcs",
 | 
					        "//vendor/sigs.k8s.io/yaml:all-srcs",
 | 
				
			||||||
        "//vendor/vbom.ml/util/sortorder:all-srcs",
 | 
					        "//vendor/vbom.ml/util/sortorder:all-srcs",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										23
									
								
								vendor/k8s.io/utils/buffer/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/k8s.io/utils/buffer/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = ["ring_growing.go"],
 | 
				
			||||||
 | 
					    importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/buffer",
 | 
				
			||||||
 | 
					    importpath = "k8s.io/utils/buffer",
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "package-srcs",
 | 
				
			||||||
 | 
					    srcs = glob(["**"]),
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:private"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "all-srcs",
 | 
				
			||||||
 | 
					    srcs = [":package-srcs"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										72
									
								
								vendor/k8s.io/utils/buffer/ring_growing.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								vendor/k8s.io/utils/buffer/ring_growing.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package buffer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RingGrowing is a growing ring buffer.
 | 
				
			||||||
 | 
					// Not thread safe.
 | 
				
			||||||
 | 
					type RingGrowing struct {
 | 
				
			||||||
 | 
						data     []interface{}
 | 
				
			||||||
 | 
						n        int // Size of Data
 | 
				
			||||||
 | 
						beg      int // First available element
 | 
				
			||||||
 | 
						readable int // Number of data items available
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewRingGrowing constructs a new RingGrowing instance with provided parameters.
 | 
				
			||||||
 | 
					func NewRingGrowing(initialSize int) *RingGrowing {
 | 
				
			||||||
 | 
						return &RingGrowing{
 | 
				
			||||||
 | 
							data: make([]interface{}, initialSize),
 | 
				
			||||||
 | 
							n:    initialSize,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ReadOne reads (consumes) first item from the buffer if it is available, otherwise returns false.
 | 
				
			||||||
 | 
					func (r *RingGrowing) ReadOne() (data interface{}, ok bool) {
 | 
				
			||||||
 | 
						if r.readable == 0 {
 | 
				
			||||||
 | 
							return nil, false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						r.readable--
 | 
				
			||||||
 | 
						element := r.data[r.beg]
 | 
				
			||||||
 | 
						r.data[r.beg] = nil // Remove reference to the object to help GC
 | 
				
			||||||
 | 
						if r.beg == r.n-1 {
 | 
				
			||||||
 | 
							// Was the last element
 | 
				
			||||||
 | 
							r.beg = 0
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							r.beg++
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return element, true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// WriteOne adds an item to the end of the buffer, growing it if it is full.
 | 
				
			||||||
 | 
					func (r *RingGrowing) WriteOne(data interface{}) {
 | 
				
			||||||
 | 
						if r.readable == r.n {
 | 
				
			||||||
 | 
							// Time to grow
 | 
				
			||||||
 | 
							newN := r.n * 2
 | 
				
			||||||
 | 
							newData := make([]interface{}, newN)
 | 
				
			||||||
 | 
							to := r.beg + r.readable
 | 
				
			||||||
 | 
							if to <= r.n {
 | 
				
			||||||
 | 
								copy(newData, r.data[r.beg:to])
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								copied := copy(newData, r.data[r.beg:])
 | 
				
			||||||
 | 
								copy(newData[copied:], r.data[:(to%r.n)])
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							r.beg = 0
 | 
				
			||||||
 | 
							r.data = newData
 | 
				
			||||||
 | 
							r.n = newN
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						r.data[(r.readable+r.beg)%r.n] = data
 | 
				
			||||||
 | 
						r.readable++
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										23
									
								
								vendor/k8s.io/utils/integer/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/k8s.io/utils/integer/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = ["integer.go"],
 | 
				
			||||||
 | 
					    importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/integer",
 | 
				
			||||||
 | 
					    importpath = "k8s.io/utils/integer",
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "package-srcs",
 | 
				
			||||||
 | 
					    srcs = glob(["**"]),
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:private"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "all-srcs",
 | 
				
			||||||
 | 
					    srcs = [":package-srcs"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										73
									
								
								vendor/k8s.io/utils/integer/integer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								vendor/k8s.io/utils/integer/integer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2016 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package integer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IntMax returns the maximum of the params
 | 
				
			||||||
 | 
					func IntMax(a, b int) int {
 | 
				
			||||||
 | 
						if b > a {
 | 
				
			||||||
 | 
							return b
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return a
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IntMin returns the minimum of the params
 | 
				
			||||||
 | 
					func IntMin(a, b int) int {
 | 
				
			||||||
 | 
						if b < a {
 | 
				
			||||||
 | 
							return b
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return a
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Int32Max returns the maximum of the params
 | 
				
			||||||
 | 
					func Int32Max(a, b int32) int32 {
 | 
				
			||||||
 | 
						if b > a {
 | 
				
			||||||
 | 
							return b
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return a
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Int32Min returns the minimum of the params
 | 
				
			||||||
 | 
					func Int32Min(a, b int32) int32 {
 | 
				
			||||||
 | 
						if b < a {
 | 
				
			||||||
 | 
							return b
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return a
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Int64Max returns the maximum of the params
 | 
				
			||||||
 | 
					func Int64Max(a, b int64) int64 {
 | 
				
			||||||
 | 
						if b > a {
 | 
				
			||||||
 | 
							return b
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return a
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Int64Min returns the minimum of the params
 | 
				
			||||||
 | 
					func Int64Min(a, b int64) int64 {
 | 
				
			||||||
 | 
						if b < a {
 | 
				
			||||||
 | 
							return b
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return a
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RoundToInt32 rounds floats into integer numbers.
 | 
				
			||||||
 | 
					func RoundToInt32(a float64) int32 {
 | 
				
			||||||
 | 
						if a < 0 {
 | 
				
			||||||
 | 
							return int32(a - 0.5)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return int32(a + 0.5)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										23
									
								
								vendor/k8s.io/utils/io/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/k8s.io/utils/io/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = ["consistentread.go"],
 | 
				
			||||||
 | 
					    importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/io",
 | 
				
			||||||
 | 
					    importpath = "k8s.io/utils/io",
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "package-srcs",
 | 
				
			||||||
 | 
					    srcs = glob(["**"]),
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:private"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "all-srcs",
 | 
				
			||||||
 | 
					    srcs = [":package-srcs"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										55
									
								
								vendor/k8s.io/utils/io/consistentread.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								vendor/k8s.io/utils/io/consistentread.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package io
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"io/ioutil"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ConsistentRead repeatedly reads a file until it gets the same content twice.
 | 
				
			||||||
 | 
					// This is useful when reading files in /proc that are larger than page size
 | 
				
			||||||
 | 
					// and kernel may modify them between individual read() syscalls.
 | 
				
			||||||
 | 
					func ConsistentRead(filename string, attempts int) ([]byte, error) {
 | 
				
			||||||
 | 
						return consistentReadSync(filename, attempts, nil)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// consistentReadSync is the main functionality of ConsistentRead but
 | 
				
			||||||
 | 
					// introduces a sync callback that can be used by the tests to mutate the file
 | 
				
			||||||
 | 
					// from which the test data is being read
 | 
				
			||||||
 | 
					func consistentReadSync(filename string, attempts int, sync func(int)) ([]byte, error) {
 | 
				
			||||||
 | 
						oldContent, err := ioutil.ReadFile(filename)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for i := 0; i < attempts; i++ {
 | 
				
			||||||
 | 
							if sync != nil {
 | 
				
			||||||
 | 
								sync(i)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							newContent, err := ioutil.ReadFile(filename)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if bytes.Compare(oldContent, newContent) == 0 {
 | 
				
			||||||
 | 
								return newContent, nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// Files are different, continue reading
 | 
				
			||||||
 | 
							oldContent = newContent
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil, fmt.Errorf("could not get consistent content of %s after %d attempts", filename, attempts)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										65
									
								
								vendor/k8s.io/utils/nsenter/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								vendor/k8s.io/utils/nsenter/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
				
			|||||||
 | 
					load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "exec.go",
 | 
				
			||||||
 | 
					        "exec_unsupported.go",
 | 
				
			||||||
 | 
					        "nsenter.go",
 | 
				
			||||||
 | 
					        "nsenter_unsupported.go",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/nsenter",
 | 
				
			||||||
 | 
					    importpath = "k8s.io/utils/nsenter",
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					    deps = select({
 | 
				
			||||||
 | 
					        "@io_bazel_rules_go//go/platform:android": [
 | 
				
			||||||
 | 
					            "//vendor/k8s.io/utils/exec:go_default_library",
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "@io_bazel_rules_go//go/platform:darwin": [
 | 
				
			||||||
 | 
					            "//vendor/k8s.io/utils/exec:go_default_library",
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "@io_bazel_rules_go//go/platform:dragonfly": [
 | 
				
			||||||
 | 
					            "//vendor/k8s.io/utils/exec:go_default_library",
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "@io_bazel_rules_go//go/platform:freebsd": [
 | 
				
			||||||
 | 
					            "//vendor/k8s.io/utils/exec:go_default_library",
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "@io_bazel_rules_go//go/platform:linux": [
 | 
				
			||||||
 | 
					            "//vendor/k8s.io/klog:go_default_library",
 | 
				
			||||||
 | 
					            "//vendor/k8s.io/utils/exec:go_default_library",
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "@io_bazel_rules_go//go/platform:nacl": [
 | 
				
			||||||
 | 
					            "//vendor/k8s.io/utils/exec:go_default_library",
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "@io_bazel_rules_go//go/platform:netbsd": [
 | 
				
			||||||
 | 
					            "//vendor/k8s.io/utils/exec:go_default_library",
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "@io_bazel_rules_go//go/platform:openbsd": [
 | 
				
			||||||
 | 
					            "//vendor/k8s.io/utils/exec:go_default_library",
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "@io_bazel_rules_go//go/platform:plan9": [
 | 
				
			||||||
 | 
					            "//vendor/k8s.io/utils/exec:go_default_library",
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "@io_bazel_rules_go//go/platform:solaris": [
 | 
				
			||||||
 | 
					            "//vendor/k8s.io/utils/exec:go_default_library",
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "@io_bazel_rules_go//go/platform:windows": [
 | 
				
			||||||
 | 
					            "//vendor/k8s.io/utils/exec:go_default_library",
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        "//conditions:default": [],
 | 
				
			||||||
 | 
					    }),
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "package-srcs",
 | 
				
			||||||
 | 
					    srcs = glob(["**"]),
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:private"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "all-srcs",
 | 
				
			||||||
 | 
					    srcs = [":package-srcs"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										8
									
								
								vendor/k8s.io/utils/nsenter/OWNERS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								vendor/k8s.io/utils/nsenter/OWNERS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					reviewers:
 | 
				
			||||||
 | 
					  - jsafrane
 | 
				
			||||||
 | 
					  - msau42
 | 
				
			||||||
 | 
					  - cofyc
 | 
				
			||||||
 | 
					approvers:
 | 
				
			||||||
 | 
					  - jsafrane
 | 
				
			||||||
 | 
					  - msau42
 | 
				
			||||||
 | 
					  - cofyc
 | 
				
			||||||
							
								
								
									
										67
									
								
								vendor/k8s.io/utils/nsenter/exec.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								vendor/k8s.io/utils/nsenter/exec.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					// +build linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2018 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package nsenter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"path/filepath"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/klog"
 | 
				
			||||||
 | 
						"k8s.io/utils/exec"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Executor wraps executor interface to be executed via nsenter
 | 
				
			||||||
 | 
					type Executor struct {
 | 
				
			||||||
 | 
						// Exec implementation
 | 
				
			||||||
 | 
						executor exec.Interface
 | 
				
			||||||
 | 
						// Path to the host's root proc path
 | 
				
			||||||
 | 
						hostProcMountNsPath string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewNsenterExecutor returns new nsenter based executor
 | 
				
			||||||
 | 
					func NewNsenterExecutor(hostRootFsPath string, executor exec.Interface) *Executor {
 | 
				
			||||||
 | 
						hostProcMountNsPath := filepath.Join(hostRootFsPath, mountNsPath)
 | 
				
			||||||
 | 
						nsExecutor := &Executor{
 | 
				
			||||||
 | 
							hostProcMountNsPath: hostProcMountNsPath,
 | 
				
			||||||
 | 
							executor:            executor,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nsExecutor
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Command returns a command wrapped with nenter
 | 
				
			||||||
 | 
					func (nsExecutor *Executor) Command(cmd string, args ...string) exec.Cmd {
 | 
				
			||||||
 | 
						fullArgs := append([]string{fmt.Sprintf("--mount=%s", nsExecutor.hostProcMountNsPath), "--"},
 | 
				
			||||||
 | 
							append([]string{cmd}, args...)...)
 | 
				
			||||||
 | 
						klog.V(5).Infof("Running nsenter command: %v %v", nsenterPath, fullArgs)
 | 
				
			||||||
 | 
						return nsExecutor.executor.Command(nsenterPath, fullArgs...)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// CommandContext returns a CommandContext wrapped with nsenter
 | 
				
			||||||
 | 
					func (nsExecutor *Executor) CommandContext(ctx context.Context, cmd string, args ...string) exec.Cmd {
 | 
				
			||||||
 | 
						fullArgs := append([]string{fmt.Sprintf("--mount=%s", nsExecutor.hostProcMountNsPath), "--"},
 | 
				
			||||||
 | 
							append([]string{cmd}, args...)...)
 | 
				
			||||||
 | 
						klog.V(5).Infof("Running nsenter command: %v %v", nsenterPath, fullArgs)
 | 
				
			||||||
 | 
						return nsExecutor.executor.CommandContext(ctx, nsenterPath, fullArgs...)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// LookPath returns a LookPath wrapped with nsenter
 | 
				
			||||||
 | 
					func (nsExecutor *Executor) LookPath(file string) (string, error) {
 | 
				
			||||||
 | 
						return "", fmt.Errorf("not implemented, error looking up : %s", file)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										58
									
								
								vendor/k8s.io/utils/nsenter/exec_unsupported.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								vendor/k8s.io/utils/nsenter/exec_unsupported.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					// +build !linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package nsenter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/utils/exec"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Executor wraps executor interface to be executed via nsenter
 | 
				
			||||||
 | 
					type Executor struct {
 | 
				
			||||||
 | 
						// Exec implementation
 | 
				
			||||||
 | 
						executor exec.Interface
 | 
				
			||||||
 | 
						// Path to the host's root proc path
 | 
				
			||||||
 | 
						hostProcMountNsPath string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewNsenterExecutor returns new nsenter based executor
 | 
				
			||||||
 | 
					func NewNsenterExecutor(hostRootFsPath string, executor exec.Interface) *Executor {
 | 
				
			||||||
 | 
						nsExecutor := &Executor{
 | 
				
			||||||
 | 
							hostProcMountNsPath: hostRootFsPath,
 | 
				
			||||||
 | 
							executor:            executor,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nsExecutor
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Command returns a command wrapped with nenter
 | 
				
			||||||
 | 
					func (nsExecutor *Executor) Command(cmd string, args ...string) exec.Cmd {
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// CommandContext returns a CommandContext wrapped with nsenter
 | 
				
			||||||
 | 
					func (nsExecutor *Executor) CommandContext(ctx context.Context, cmd string, args ...string) exec.Cmd {
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// LookPath returns a LookPath wrapped with nsenter
 | 
				
			||||||
 | 
					func (nsExecutor *Executor) LookPath(file string) (string, error) {
 | 
				
			||||||
 | 
						return "", fmt.Errorf("not implemented, error looking up : %s", file)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										235
									
								
								vendor/k8s.io/utils/nsenter/nsenter.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										235
									
								
								vendor/k8s.io/utils/nsenter/nsenter.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,235 @@
 | 
				
			|||||||
 | 
					// +build linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package nsenter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
						"path/filepath"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/klog"
 | 
				
			||||||
 | 
						"k8s.io/utils/exec"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						// DefaultHostRootFsPath is path to host's filesystem mounted into container
 | 
				
			||||||
 | 
						// with kubelet.
 | 
				
			||||||
 | 
						DefaultHostRootFsPath = "/rootfs"
 | 
				
			||||||
 | 
						// mountNsPath is the default mount namespace of the host
 | 
				
			||||||
 | 
						mountNsPath = "/proc/1/ns/mnt"
 | 
				
			||||||
 | 
						// nsenterPath is the default nsenter command
 | 
				
			||||||
 | 
						nsenterPath = "nsenter"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Nsenter is part of experimental support for running the kubelet
 | 
				
			||||||
 | 
					// in a container.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Nsenter requires:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 1.  Docker >= 1.6 due to the dependency on the slave propagation mode
 | 
				
			||||||
 | 
					//     of the bind-mount of the kubelet root directory in the container.
 | 
				
			||||||
 | 
					//     Docker 1.5 used a private propagation mode for bind-mounts, so mounts
 | 
				
			||||||
 | 
					//     performed in the host's mount namespace do not propagate out to the
 | 
				
			||||||
 | 
					//     bind-mount in this docker version.
 | 
				
			||||||
 | 
					// 2.  The host's root filesystem must be available at /rootfs
 | 
				
			||||||
 | 
					// 3.  The nsenter binary must be on the Kubelet process' PATH in the container's
 | 
				
			||||||
 | 
					//     filesystem.
 | 
				
			||||||
 | 
					// 4.  The Kubelet process must have CAP_SYS_ADMIN (required by nsenter); at
 | 
				
			||||||
 | 
					//     the present, this effectively means that the kubelet is running in a
 | 
				
			||||||
 | 
					//     privileged container.
 | 
				
			||||||
 | 
					// 5.  The volume path used by the Kubelet must be the same inside and outside
 | 
				
			||||||
 | 
					//     the container and be writable by the container (to initialize volume)
 | 
				
			||||||
 | 
					//     contents. TODO: remove this requirement.
 | 
				
			||||||
 | 
					// 6.  The host image must have "mount", "findmnt", "umount", "stat", "touch",
 | 
				
			||||||
 | 
					//     "mkdir", "ls", "sh" and "chmod" binaries in /bin, /usr/sbin, or /usr/bin
 | 
				
			||||||
 | 
					// 7.  The host image should have systemd-run in /bin, /usr/sbin, or /usr/bin if
 | 
				
			||||||
 | 
					//     systemd is installed/enabled in the operating system.
 | 
				
			||||||
 | 
					// For more information about mount propagation modes, see:
 | 
				
			||||||
 | 
					//   https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt
 | 
				
			||||||
 | 
					type Nsenter struct {
 | 
				
			||||||
 | 
						// a map of commands to their paths on the host filesystem
 | 
				
			||||||
 | 
						paths map[string]string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Path to the host filesystem, typically "/rootfs". Used only for testing.
 | 
				
			||||||
 | 
						hostRootFsPath string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Exec implementation, used only for testing
 | 
				
			||||||
 | 
						executor exec.Interface
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewNsenter constructs a new instance of Nsenter
 | 
				
			||||||
 | 
					func NewNsenter(hostRootFsPath string, executor exec.Interface) (*Nsenter, error) {
 | 
				
			||||||
 | 
						ne := &Nsenter{
 | 
				
			||||||
 | 
							hostRootFsPath: hostRootFsPath,
 | 
				
			||||||
 | 
							executor:       executor,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := ne.initPaths(); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return ne, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ne *Nsenter) initPaths() error {
 | 
				
			||||||
 | 
						ne.paths = map[string]string{}
 | 
				
			||||||
 | 
						binaries := []string{
 | 
				
			||||||
 | 
							"mount",
 | 
				
			||||||
 | 
							"findmnt",
 | 
				
			||||||
 | 
							"umount",
 | 
				
			||||||
 | 
							"systemd-run",
 | 
				
			||||||
 | 
							"stat",
 | 
				
			||||||
 | 
							"touch",
 | 
				
			||||||
 | 
							"mkdir",
 | 
				
			||||||
 | 
							"sh",
 | 
				
			||||||
 | 
							"chmod",
 | 
				
			||||||
 | 
							"realpath",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// search for the required commands in other locations besides /usr/bin
 | 
				
			||||||
 | 
						for _, binary := range binaries {
 | 
				
			||||||
 | 
							// check for binary under the following directories
 | 
				
			||||||
 | 
							for _, path := range []string{"/", "/bin", "/usr/sbin", "/usr/bin"} {
 | 
				
			||||||
 | 
								binPath := filepath.Join(path, binary)
 | 
				
			||||||
 | 
								if _, err := os.Stat(filepath.Join(ne.hostRootFsPath, binPath)); err != nil {
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								ne.paths[binary] = binPath
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// systemd-run is optional, bailout if we don't find any of the other binaries
 | 
				
			||||||
 | 
							if ne.paths[binary] == "" && binary != "systemd-run" {
 | 
				
			||||||
 | 
								return fmt.Errorf("unable to find %v", binary)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Exec executes nsenter commands in hostProcMountNsPath mount namespace
 | 
				
			||||||
 | 
					func (ne *Nsenter) Exec(cmd string, args []string) exec.Cmd {
 | 
				
			||||||
 | 
						hostProcMountNsPath := filepath.Join(ne.hostRootFsPath, mountNsPath)
 | 
				
			||||||
 | 
						fullArgs := append([]string{fmt.Sprintf("--mount=%s", hostProcMountNsPath), "--"},
 | 
				
			||||||
 | 
							append([]string{ne.AbsHostPath(cmd)}, args...)...)
 | 
				
			||||||
 | 
						klog.V(5).Infof("Running nsenter command: %v %v", nsenterPath, fullArgs)
 | 
				
			||||||
 | 
						return ne.executor.Command(nsenterPath, fullArgs...)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// AbsHostPath returns the absolute runnable path for a specified command
 | 
				
			||||||
 | 
					func (ne *Nsenter) AbsHostPath(command string) string {
 | 
				
			||||||
 | 
						path, ok := ne.paths[command]
 | 
				
			||||||
 | 
						if !ok {
 | 
				
			||||||
 | 
							return command
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return path
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SupportsSystemd checks whether command systemd-run exists
 | 
				
			||||||
 | 
					func (ne *Nsenter) SupportsSystemd() (string, bool) {
 | 
				
			||||||
 | 
						systemdRunPath, ok := ne.paths["systemd-run"]
 | 
				
			||||||
 | 
						return systemdRunPath, ok && systemdRunPath != ""
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// EvalSymlinks returns the path name on the host after evaluating symlinks on the
 | 
				
			||||||
 | 
					// host.
 | 
				
			||||||
 | 
					// mustExist makes EvalSymlinks to return error when the path does not
 | 
				
			||||||
 | 
					// exist. When it's false, it evaluates symlinks of the existing part and
 | 
				
			||||||
 | 
					// blindly adds the non-existing part:
 | 
				
			||||||
 | 
					// pathname: /mnt/volume/non/existing/directory
 | 
				
			||||||
 | 
					//     /mnt/volume exists
 | 
				
			||||||
 | 
					//                non/existing/directory does not exist
 | 
				
			||||||
 | 
					// -> It resolves symlinks in /mnt/volume to say /mnt/foo and returns
 | 
				
			||||||
 | 
					//    /mnt/foo/non/existing/directory.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// BEWARE! EvalSymlinks is not able to detect symlink looks with mustExist=false!
 | 
				
			||||||
 | 
					// If /tmp/link is symlink to /tmp/link, EvalSymlinks(/tmp/link/foo) returns /tmp/link/foo.
 | 
				
			||||||
 | 
					func (ne *Nsenter) EvalSymlinks(pathname string, mustExist bool) (string, error) {
 | 
				
			||||||
 | 
						var args []string
 | 
				
			||||||
 | 
						if mustExist {
 | 
				
			||||||
 | 
							// "realpath -e: all components of the path must exist"
 | 
				
			||||||
 | 
							args = []string{"-e", pathname}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							// "realpath -m: no path components need exist or be a directory"
 | 
				
			||||||
 | 
							args = []string{"-m", pathname}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						outBytes, err := ne.Exec("realpath", args).CombinedOutput()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							klog.Infof("failed to resolve symbolic links on %s: %v", pathname, err)
 | 
				
			||||||
 | 
							return "", err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return strings.TrimSpace(string(outBytes)), nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// KubeletPath returns the path name that can be accessed by containerized
 | 
				
			||||||
 | 
					// kubelet. It is recommended to resolve symlinks on the host by EvalSymlinks
 | 
				
			||||||
 | 
					// before calling this function
 | 
				
			||||||
 | 
					func (ne *Nsenter) KubeletPath(pathname string) string {
 | 
				
			||||||
 | 
						return filepath.Join(ne.hostRootFsPath, pathname)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewFakeNsenter returns a Nsenter that does not run "nsenter --mount=... --",
 | 
				
			||||||
 | 
					// but runs everything in the same mount namespace as the unit test binary.
 | 
				
			||||||
 | 
					// rootfsPath is supposed to be a symlink, e.g. /tmp/xyz/rootfs -> /.
 | 
				
			||||||
 | 
					// This fake Nsenter is enough for most operations, e.g. to resolve symlinks,
 | 
				
			||||||
 | 
					// but it's not enough to call /bin/mount - unit tests don't run as root.
 | 
				
			||||||
 | 
					func NewFakeNsenter(rootfsPath string) (*Nsenter, error) {
 | 
				
			||||||
 | 
						executor := &fakeExec{
 | 
				
			||||||
 | 
							rootfsPath: rootfsPath,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// prepare /rootfs/bin, usr/bin and usr/sbin
 | 
				
			||||||
 | 
						bin := filepath.Join(rootfsPath, "bin")
 | 
				
			||||||
 | 
						if err := os.Symlink("/bin", bin); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						usr := filepath.Join(rootfsPath, "usr")
 | 
				
			||||||
 | 
						if err := os.Mkdir(usr, 0755); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						usrbin := filepath.Join(usr, "bin")
 | 
				
			||||||
 | 
						if err := os.Symlink("/usr/bin", usrbin); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						usrsbin := filepath.Join(usr, "sbin")
 | 
				
			||||||
 | 
						if err := os.Symlink("/usr/sbin", usrsbin); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return NewNsenter(rootfsPath, executor)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type fakeExec struct {
 | 
				
			||||||
 | 
						rootfsPath string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (f fakeExec) Command(cmd string, args ...string) exec.Cmd {
 | 
				
			||||||
 | 
						// This will intentionaly panic if Nsenter does not provide enough arguments.
 | 
				
			||||||
 | 
						realCmd := args[2]
 | 
				
			||||||
 | 
						realArgs := args[3:]
 | 
				
			||||||
 | 
						return exec.New().Command(realCmd, realArgs...)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (fakeExec) LookPath(file string) (string, error) {
 | 
				
			||||||
 | 
						return "", errors.New("not implemented")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (fakeExec) CommandContext(ctx context.Context, cmd string, args ...string) exec.Cmd {
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var _ exec.Interface = fakeExec{}
 | 
				
			||||||
							
								
								
									
										56
									
								
								vendor/k8s.io/utils/nsenter/nsenter_unsupported.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								vendor/k8s.io/utils/nsenter/nsenter_unsupported.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					// +build !linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package nsenter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"k8s.io/utils/exec"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						// DefaultHostRootFsPath is path to host's filesystem mounted into container
 | 
				
			||||||
 | 
						// with kubelet.
 | 
				
			||||||
 | 
						DefaultHostRootFsPath = "/rootfs"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Nsenter is part of experimental support for running the kubelet
 | 
				
			||||||
 | 
					// in a container.
 | 
				
			||||||
 | 
					type Nsenter struct {
 | 
				
			||||||
 | 
						// a map of commands to their paths on the host filesystem
 | 
				
			||||||
 | 
						Paths map[string]string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewNsenter constructs a new instance of Nsenter
 | 
				
			||||||
 | 
					func NewNsenter(hostRootFsPath string, executor exec.Interface) (*Nsenter, error) {
 | 
				
			||||||
 | 
						return &Nsenter{}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Exec executes nsenter commands in hostProcMountNsPath mount namespace
 | 
				
			||||||
 | 
					func (ne *Nsenter) Exec(cmd string, args []string) exec.Cmd {
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// AbsHostPath returns the absolute runnable path for a specified command
 | 
				
			||||||
 | 
					func (ne *Nsenter) AbsHostPath(command string) string {
 | 
				
			||||||
 | 
						return ""
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SupportsSystemd checks whether command systemd-run exists
 | 
				
			||||||
 | 
					func (ne *Nsenter) SupportsSystemd() (string, bool) {
 | 
				
			||||||
 | 
						return "", false
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										24
									
								
								vendor/k8s.io/utils/trace/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								vendor/k8s.io/utils/trace/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = ["trace.go"],
 | 
				
			||||||
 | 
					    importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/trace",
 | 
				
			||||||
 | 
					    importpath = "k8s.io/utils/trace",
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					    deps = ["//vendor/k8s.io/klog:go_default_library"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "package-srcs",
 | 
				
			||||||
 | 
					    srcs = glob(["**"]),
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:private"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "all-srcs",
 | 
				
			||||||
 | 
					    srcs = [":package-srcs"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:public"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										96
									
								
								vendor/k8s.io/utils/trace/trace.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								vendor/k8s.io/utils/trace/trace.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2015 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package trace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"math/rand"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/klog"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type traceStep struct {
 | 
				
			||||||
 | 
						stepTime time.Time
 | 
				
			||||||
 | 
						msg      string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Trace keeps track of a set of "steps" and allows us to log a specific
 | 
				
			||||||
 | 
					// step if it took longer than its share of the total allowed time
 | 
				
			||||||
 | 
					type Trace struct {
 | 
				
			||||||
 | 
						name      string
 | 
				
			||||||
 | 
						startTime time.Time
 | 
				
			||||||
 | 
						steps     []traceStep
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// New creates a Trace with the specified name
 | 
				
			||||||
 | 
					func New(name string) *Trace {
 | 
				
			||||||
 | 
						return &Trace{name, time.Now(), nil}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Step adds a new step with a specific message
 | 
				
			||||||
 | 
					func (t *Trace) Step(msg string) {
 | 
				
			||||||
 | 
						if t.steps == nil {
 | 
				
			||||||
 | 
							// traces almost always have less than 6 steps, do this to avoid more than a single allocation
 | 
				
			||||||
 | 
							t.steps = make([]traceStep, 0, 6)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						t.steps = append(t.steps, traceStep{time.Now(), msg})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Log is used to dump all the steps in the Trace
 | 
				
			||||||
 | 
					func (t *Trace) Log() {
 | 
				
			||||||
 | 
						// an explicit logging request should dump all the steps out at the higher level
 | 
				
			||||||
 | 
						t.logWithStepThreshold(0)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (t *Trace) logWithStepThreshold(stepThreshold time.Duration) {
 | 
				
			||||||
 | 
						var buffer bytes.Buffer
 | 
				
			||||||
 | 
						tracenum := rand.Int31()
 | 
				
			||||||
 | 
						endTime := time.Now()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						totalTime := endTime.Sub(t.startTime)
 | 
				
			||||||
 | 
						buffer.WriteString(fmt.Sprintf("Trace[%d]: %q (started: %v) (total time: %v):\n", tracenum, t.name, t.startTime, totalTime))
 | 
				
			||||||
 | 
						lastStepTime := t.startTime
 | 
				
			||||||
 | 
						for _, step := range t.steps {
 | 
				
			||||||
 | 
							stepDuration := step.stepTime.Sub(lastStepTime)
 | 
				
			||||||
 | 
							if stepThreshold == 0 || stepDuration > stepThreshold || klog.V(4) {
 | 
				
			||||||
 | 
								buffer.WriteString(fmt.Sprintf("Trace[%d]: [%v] [%v] %v\n", tracenum, step.stepTime.Sub(t.startTime), stepDuration, step.msg))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							lastStepTime = step.stepTime
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						stepDuration := endTime.Sub(lastStepTime)
 | 
				
			||||||
 | 
						if stepThreshold == 0 || stepDuration > stepThreshold || klog.V(4) {
 | 
				
			||||||
 | 
							buffer.WriteString(fmt.Sprintf("Trace[%d]: [%v] [%v] END\n", tracenum, endTime.Sub(t.startTime), stepDuration))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						klog.Info(buffer.String())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// LogIfLong is used to dump steps that took longer than its share
 | 
				
			||||||
 | 
					func (t *Trace) LogIfLong(threshold time.Duration) {
 | 
				
			||||||
 | 
						if time.Since(t.startTime) >= threshold {
 | 
				
			||||||
 | 
							// if any step took more than it's share of the total allowed time, it deserves a higher log level
 | 
				
			||||||
 | 
							stepThreshold := threshold / time.Duration(len(t.steps)+1)
 | 
				
			||||||
 | 
							t.logWithStepThreshold(stepThreshold)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TotalTime can be used to figure out how long it took since the Trace was created
 | 
				
			||||||
 | 
					func (t *Trace) TotalTime() time.Duration {
 | 
				
			||||||
 | 
						return time.Since(t.startTime)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user