Merge pull request #48807 from jsafrane/fc-describe
Automatic merge from submit-queue (batch tested with PRs 46094, 48544, 48807, 49102, 44174)
Implement kubectl describe <fibre-channel PV>
kubectl did not show any details about Fibre Channel volumes, someone just forgot to implement it.
Tested with:
```shell
$ kubectl create -f - <<EOF
apiVersion: v1
kind: PersistentVolume
metadata:
  name: myfc
spec:
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  fc:
       targetWWNs: ['500a0982991b8dc5', '500a0982891b8dc5']
       lun: 2
       fsType: ext4
       readOnly: true
EOF
$ kubectl describe pv myfc
Name:		myfc
Labels:		<none>
Annotations:	<none>
StorageClass:	
Status:		Available
Claim:		
Reclaim Policy:	Delete
Access Modes:	RWO
Capacity:	100Gi
Message:	
Source:
    Type:	FC (a Fibre Channel disk)
    TargetWWNs:	500a0982991b8dc5, 500a0982891b8dc5
    LUN:	2
    FSType:	ext4
    ReadOnly:	true
Events:		<none>
```
```release-note
NONE
```
@kubernetes/sig-cli-pr-reviews
			
			
This commit is contained in:
		@@ -26,6 +26,7 @@ import (
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"sort"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"text/tabwriter"
 | 
			
		||||
	"time"
 | 
			
		||||
@@ -744,6 +745,8 @@ func describeVolumes(volumes []api.Volume, w PrefixWriter, space string) {
 | 
			
		||||
			printCephFSVolumeSource(volume.VolumeSource.CephFS, w)
 | 
			
		||||
		case volume.VolumeSource.StorageOS != nil:
 | 
			
		||||
			printStorageOSVolumeSource(volume.VolumeSource.StorageOS, w)
 | 
			
		||||
		case volume.VolumeSource.FC != nil:
 | 
			
		||||
			printFCVolumeSource(volume.VolumeSource.FC, w)
 | 
			
		||||
		default:
 | 
			
		||||
			w.Write(LEVEL_1, "<unknown>\n")
 | 
			
		||||
		}
 | 
			
		||||
@@ -960,6 +963,19 @@ func printStorageOSPersistentVolumeSource(storageos *api.StorageOSPersistentVolu
 | 
			
		||||
		storageos.VolumeName, storageos.VolumeNamespace, storageos.FSType, storageos.ReadOnly)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func printFCVolumeSource(fc *api.FCVolumeSource, w PrefixWriter) {
 | 
			
		||||
	lun := "<none>"
 | 
			
		||||
	if fc.Lun != nil {
 | 
			
		||||
		lun = strconv.Itoa(int(*fc.Lun))
 | 
			
		||||
	}
 | 
			
		||||
	w.Write(LEVEL_2, "Type:\tFC (a Fibre Channel disk)\n"+
 | 
			
		||||
		"    TargetWWNs:\t%v\n"+
 | 
			
		||||
		"    LUN:\t%v\n"+
 | 
			
		||||
		"    FSType:\t%v\n"+
 | 
			
		||||
		"    ReadOnly:\t%v\n",
 | 
			
		||||
		strings.Join(fc.TargetWWNs, ", "), lun, fc.FSType, fc.ReadOnly)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type PersistentVolumeDescriber struct {
 | 
			
		||||
	clientset.Interface
 | 
			
		||||
}
 | 
			
		||||
@@ -1035,6 +1051,8 @@ func describePersistentVolume(pv *api.PersistentVolume, events *api.EventList) (
 | 
			
		||||
			printCephFSVolumeSource(pv.Spec.CephFS, w)
 | 
			
		||||
		case pv.Spec.StorageOS != nil:
 | 
			
		||||
			printStorageOSPersistentVolumeSource(pv.Spec.StorageOS, w)
 | 
			
		||||
		case pv.Spec.FC != nil:
 | 
			
		||||
			printFCVolumeSource(pv.Spec.FC, w)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if events != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -700,6 +700,14 @@ func TestPersistentVolumeDescriber(t *testing.T) {
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		"fc": {
 | 
			
		||||
			ObjectMeta: metav1.ObjectMeta{Name: "bar"},
 | 
			
		||||
			Spec: api.PersistentVolumeSpec{
 | 
			
		||||
				PersistentVolumeSource: api.PersistentVolumeSource{
 | 
			
		||||
					FC: &api.FCVolumeSource{},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for name, pv := range tests {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user