diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES
index 2b94cd18392..3b2c20fc289 100644
--- a/OWNERS_ALIASES
+++ b/OWNERS_ALIASES
@@ -88,18 +88,6 @@ aliases:
- Gal-Zaidman
- eslutsky
- janosdebugs
- kubevirt-approvers:
- - nirarg
- - bardielle
- - ravidbro
- - rgolangh
- - chenyosef
- kubevirt-reviewers:
- - nirarg
- - bardielle
- - ravidbro
- - rgolangh
- - chenyosef
ibmcloud-approvers:
- bobbyradford
- hasueki
diff --git a/cmd/openshift-install/destroy.go b/cmd/openshift-install/destroy.go
index 568a4b7c507..aa6978e4dea 100644
--- a/cmd/openshift-install/destroy.go
+++ b/cmd/openshift-install/destroy.go
@@ -16,7 +16,6 @@ import (
"github.com/openshift/installer/pkg/destroy/bootstrap"
_ "github.com/openshift/installer/pkg/destroy/gcp"
_ "github.com/openshift/installer/pkg/destroy/ibmcloud"
- _ "github.com/openshift/installer/pkg/destroy/kubevirt"
_ "github.com/openshift/installer/pkg/destroy/libvirt"
_ "github.com/openshift/installer/pkg/destroy/openstack"
_ "github.com/openshift/installer/pkg/destroy/ovirt"
diff --git a/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template b/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template
index 349b60a2d8b..b0b85af1d72 100755
--- a/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template
+++ b/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template
@@ -337,7 +337,6 @@ then
copy_static_resources_for openstack
copy_static_resources_for ovirt
copy_static_resources_for vsphere
- copy_static_resources_for kubevirt
cp mco-bootstrap/manifests/* manifests/
diff --git a/data/data/bootstrap/kubevirt/OWNERS b/data/data/bootstrap/kubevirt/OWNERS
deleted file mode 100644
index c81b62d00a3..00000000000
--- a/data/data/bootstrap/kubevirt/OWNERS
+++ /dev/null
@@ -1,7 +0,0 @@
-# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
-# This file just uses aliases defined in OWNERS_ALIASES.
-
-approvers:
- - kubevirt-approvers
-reviewers:
- - kubevirt-reviewers
diff --git a/data/data/bootstrap/kubevirt/README.md b/data/data/bootstrap/kubevirt/README.md
deleted file mode 100644
index 72c8786a6a1..00000000000
--- a/data/data/bootstrap/kubevirt/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-KubeVirt needs the same assets during setup except for ironic.
-Please refer to https://github.com/openshift/installer/tree/master/data/data/bootstrap/baremetal
diff --git a/data/data/bootstrap/kubevirt/files/etc/NetworkManager/dispatcher.d/30-local-dns-prepender b/data/data/bootstrap/kubevirt/files/etc/NetworkManager/dispatcher.d/30-local-dns-prepender
deleted file mode 100755
index 5ec300f6bf3..00000000000
--- a/data/data/bootstrap/kubevirt/files/etc/NetworkManager/dispatcher.d/30-local-dns-prepender
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-IFACE=$1
-STATUS=$2
-case "$STATUS" in
- up|dhcp4-change|dhcp6-change)
- logger -s "NM local-dns-prepender triggered by ${1} ${2}."
- DNS_IP="127.0.0.1"
- set +e
- logger -s "NM local-dns-prepender: Checking if local DNS IP is the first entry in resolv.conf"
- if grep nameserver /etc/resolv.conf | head -n 1 | grep -q "$DNS_IP" ; then
- logger -s "NM local-dns-prepender: local DNS IP already is the first entry in resolv.conf"
- exit 0
- else
- logger -s "NM local-dns-prepender: Looking for '# Generated by NetworkManager' in /etc/resolv.conf to place 'nameserver $DNS_IP'"
- sed -i "/^# Generated by.*$/a nameserver $DNS_IP" /etc/resolv.conf
- fi
- ;;
- *)
- ;;
-esac
diff --git a/data/data/install.openshift.io_installconfigs.yaml b/data/data/install.openshift.io_installconfigs.yaml
index 6d58be6dba1..91a45536654 100644
--- a/data/data/install.openshift.io_installconfigs.yaml
+++ b/data/data/install.openshift.io_installconfigs.yaml
@@ -269,23 +269,6 @@ spec:
type: string
type: array
type: object
- kubevirt:
- description: Kubevirt is the configuration used when installing
- on Kubevirt.
- properties:
- cpu:
- description: CPU is the amount of CPUs used.
- format: int32
- type: integer
- memory:
- description: 'Memory is the size of a VM''s memory. Format:
- https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go'
- type: string
- storageSize:
- description: 'StorageSize is the size of VM''s boot volume.
- Format: https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go'
- type: string
- type: object
libvirt:
description: Libvirt is the configuration used when installing
on libvirt.
@@ -694,23 +677,6 @@ spec:
type: string
type: array
type: object
- kubevirt:
- description: Kubevirt is the configuration used when installing
- on Kubevirt.
- properties:
- cpu:
- description: CPU is the amount of CPUs used.
- format: int32
- type: integer
- memory:
- description: 'Memory is the size of a VM''s memory. Format:
- https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go'
- type: string
- storageSize:
- description: 'StorageSize is the size of VM''s boot volume.
- Format: https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go'
- type: string
- type: object
libvirt:
description: Libvirt is the configuration used when installing
on libvirt.
@@ -1654,65 +1620,6 @@ spec:
required:
- region
type: object
- kubevirt:
- description: Kubevirt is the configuration used when installing on
- kubevirt.
- properties:
- apiVIP:
- description: APIVIP is the virtual IP address for the api endpoint.
- format: ip
- type: string
- defaultMachinePlatform:
- description: DefaultMachinePlatform is the default configuration
- used when installing on Kubevirt for machine pools which do
- not define their own platform configuration.
- properties:
- cpu:
- description: CPU is the amount of CPUs used.
- format: int32
- type: integer
- memory:
- description: 'Memory is the size of a VM''s memory. Format:
- https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go'
- type: string
- storageSize:
- description: 'StorageSize is the size of VM''s boot volume.
- Format: https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go'
- type: string
- type: object
- ingressVIP:
- description: IngressIP is an external IP which routes to the default
- ingress controller.
- format: ip
- type: string
- interfaceBindingMethod:
- description: InterfaceBindingMethod is the the interface binding
- method of the nodes of the tenantcluster (Bridge | SRIOV).
- type: string
- namespace:
- description: Namespace is the namespace in the infra cluster,
- which the control plane (master vms) and the compute (worker
- vms) are installed in.
- type: string
- networkName:
- description: NetworkName is the target network of all the network
- interfaces of the nodes.
- type: string
- persistentVolumeAccessMode:
- default: ReadWriteMany
- description: PersistentVolumeAccessMode is the access mode should
- be use with the persistent volumes.
- type: string
- storageClass:
- description: StorageClass is the Storage Class used in the infra
- cluster.
- type: string
- required:
- - apiVIP
- - ingressVIP
- - namespace
- - networkName
- type: object
libvirt:
description: Libvirt is the configuration used when installing on
libvirt.
diff --git a/data/data/kubevirt/OWNERS b/data/data/kubevirt/OWNERS
deleted file mode 100644
index c81b62d00a3..00000000000
--- a/data/data/kubevirt/OWNERS
+++ /dev/null
@@ -1,7 +0,0 @@
-# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
-# This file just uses aliases defined in OWNERS_ALIASES.
-
-approvers:
- - kubevirt-approvers
-reviewers:
- - kubevirt-reviewers
diff --git a/data/data/kubevirt/bootstrap/main.tf b/data/data/kubevirt/bootstrap/main.tf
deleted file mode 100644
index d55f9061476..00000000000
--- a/data/data/kubevirt/bootstrap/main.tf
+++ /dev/null
@@ -1,135 +0,0 @@
-data "ignition_file" "hostname" {
- mode = "420"
- path = "/etc/hostname"
-
- content {
- content = <
- Prerequisite for Kubernetes:
- - [KubeVirt](https://kubevirt.io/) installed in the cluster
- - [Multus-cni](https://01.org/kubernetes/building-blocks/multus-cni) plugin installed in the cluster
-
- prerequisite for OpenShift:
- - [OpenShift Virtualization](https://www.openshift.com/learn/topics/virtualization/)
-
-2. Create a Namespace/Project, where the tenant cluster resources will be created in
- Make sure that the following instructions are fulfilled:
- - Enable support for KubeMacPool feature for the namespace (virtual machine NICs in that namespace are allocated MAC addresses from a MAC address pool. This ensures that virtual machine instances created from that virtual machine retain the assigned MAC address across reboots).
- In order to do that, add the KubeMacPool label to the namespace:
- `oc label namespace mutatevirtualmachines.kubemacpool.io=allocate`
- For more information, refer to [OpenShift docs](https://docs.openshift.com/container-platform/4.6/virt/virtual_machines/vm_networking/virt-using-mac-address-pool-for-vms.html)
- - Make sure that the user running the installer has the [minimum rules](./role.yaml) inside the namespace
-
-3. Create the network that would be used by the tenant cluster:
- - Create a bridge on the infra cluster nodes
- - Create multus network (Network Attachment Definition) on the bridge
-
-4. Allocate 2 IPs within the cluster network:
- - IP for the internal kubernetes api, that all components will interact with
- - IP for the Ingress, the load balancer in front of the cluster apps
-
- To work with this provider, one must provide 2 IPs that are not reserved to any MAC address in the environment, where the cluster will run. These 2 IPs will be used and monitored by keepalived, initially on the bootstrap machine, and then on the masters (after a fail-over, when the bootstrap is killed).
-
-5. Name resolution of `api_vip` from your installation machine
-The installer must resolve the `api_vip` during the installation, to follow the cluster installation progress.
-
-
-## Minimal resources
-
-The default master/worker:
-- 4 CPUs
-- 16 RAM
-- 120 GB disk
-
-For 3 masters/3 workers, the target Cluster **must have at least**:
-- 96RAM
-- 24vCPUs
-- 720GiB storage
-
-> Worker count can be reduced to 2 in `install-config.yaml` in case needed.
-
-The installer will create by default 1 bootstrap, 3 masters, and 3 workers machines.
-By the time the first worker is up the bootstrap VM should be destroyed, and this is included in the minimum resources calculation.
-
-
-## Install
-
-### Minimum permission for installation
-
-In order to be able to complete full installation process, the user running the installer must have minimum permission.
-Please refer the the [Role yaml](./role.yml) to view the list of the required permissions.
-This role can be added to the cluster, and then binded to the user which running the installer, it can be done using the following ways:
-- Create RoleBinding which bind the role to the user in the specific namespace
-- If using Openshift as InfraCluster, run:
-`oc adm policy add-role-to-user -n `
-
-
-### kubevirt-credentials
-
-Before you start the tenant cluster installation, make sure to login to the infra cluster.
-For configuration, kubectl looks for a file named config in the $HOME/.kube directory. You can specify other kubeconfig files by setting the KUBECONFIG environment variable or by setting the --kubeconfig flag.
-Make sure to use kubeconfig credentials without expiration date, as those credentials are going to be used by the
-tenantcluster for the infrastructure management.
-
-
-### Install using the wizard
-
-At this stage, as the Kubevirt provider defined a dev preview, the installer can't be started using the wizard, please refer to [Install using Install Config yaml](#instal-using-install-config-yaml)
-
-
-### Install using Install Config yaml
-
-- Copy the example [install-config.yaml](./install-config.yaml) file to `install_dir`
-- Change the following values
->- [baseDomain](./install-config.yaml#L2) - Enter the base domain that would be used for this cluster
->- Update the machines resources (cpu, memory and storage size), in case you want to override the defaults (optional fields)
->>> Should be following to this structure (remove `{}`):
->>> ```console
->>> kubevirt:
->>> cpu: 4
->>> memory: 16G
->>> storageSize: 120Gi
->>> ```
->>> Set different values for compute machines (workers) and for control plan machines (masters):
->>>- [workers](./install-config.yaml#L7)
->>>- [masters](./install-config.yaml#L13)
->- Change the [workerReplicas](./install-config.yaml#L8) - to customize the number of workers
->- Change the [masterReplicas](./install-config.yaml#L14) - to customize the number of masters
->- Change the [Machine Network CIDR](./install-config.yaml#L23) to the network range defined in the Network Attachment Definition
->- Set the [Platform](./install-config.yaml#L27) values, according to the values in the Infra cluster
->>> Should be following to this structure:
->>> ```console
->>> kubevirt:
->>> apiVIP: x.x.x.y
->>> ingressVIP: x.x.x.z
->>> namespace: tenantcluster namespace
->>> ```
->>> |Value name |Value type |Required|Description |
->>> |--- |--- |--- |---|
->>> |namespace |string |Yes |The namespace in the infra cluster, where the control plane (master vms) and the compute (worker vms) will be created in |
->>> |storageClass |string |No |The Storage Class used in the infra cluster |
->>> |networkName |string |Yes |The target network of all the network interfaces of the nodes |
->>> |networkType |string |No |The type of the network interfaces of the nodes of the tenantcluster ("Bridge" or "SRIOV"). Default: "Bridge".
->>> |apiVIP |IPV4 |Yes |The virtual IP address for the api endpoint |
->>> |ingressVIP |IPV4 |Yes |An external IP which routes to the default ingress controller |
->>> |persistentVolumeAccessMode |[ReadWriteMany,ReadWriteOnce] |No |The access mode should be use with the persistent volumes |
->- Set the [pullSecret](./install-config.yaml#L35), You can get this secret from https://cloud.redhat.com/openshift/install/pull-secret
->- Set the [sshKey](./install-config.yaml#L36) (content of ~/.ssh/id_rsa.pub)
-
-### Run the installer
-
-Start the installation using the install-config created in the folder `install_dir`
-
-```console
-$ openshift-install create cluster --dir=install_dir
-```
-### After installation is done
-
-After the installation is done, to access the cluster as the system:admin user:
-
-```console
-$ export KUBECONFIG=$PWD/install_dir/auth/kubeconfig
-$ oc get nodes
-```
diff --git a/docs/user/kubevirt/role.yaml b/docs/user/kubevirt/role.yaml
deleted file mode 100644
index f60a596da08..00000000000
--- a/docs/user/kubevirt/role.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-# Roles required for installation and also for applications running in the tenant cluster
-# Changes here MUST be synched with pkg/asset/installconfig/kubevirt/validation.go
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: tenantcluster-installer
- namespace:
-rules:
-- apiGroups: [""]
- resources: ["secrets"]
- verbs: ["get", "list", "create", "delete"]
-- apiGroups: [""]
- resources: ["namespaces"]
- verbs: ["get"]
-- apiGroups: ["kubevirt.io"]
- resources: ["virtualmachines"]
- verbs: ["get", "list", "create", "delete", "update"]
-- apiGroups: ["kubevirt.io"]
- resources: ["virtualmachineinstances"]
- verbs: ["get", "list"]
-- apiGroups: ["cdi.kubevirt.io"]
- resources: ["datavolumes"]
- verbs: ["get", "list", "create", "delete"]
-- apiGroups: ["k8s.cni.cncf.io"]
- resources: ["network-attachment-definitions"]
- verbs: ["get"]
-- apiGroups: ["subresources.kubevirt.io"]
- resources: ["virtualmachineinstances/addvolume", "virtualmachineinstances/removevolume"]
- verbs: ["update"]
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: tenantcluster-installer
- namespace: openshift-cnv
-rules:
-- apiGroups: ["hco.kubevirt.io"]
- resources: ["hyperconvergeds"]
- verbs: ["get"]
diff --git a/go.mod b/go.mod
index b1603189d13..12bda64bbb3 100644
--- a/go.mod
+++ b/go.mod
@@ -51,8 +51,6 @@ require (
github.com/hashicorp/terraform-provider-vsphere v1.24.3
github.com/hashicorp/vault v1.3.0 // indirect
github.com/hinshun/vt10x v0.0.0-20180809195222-d55458df857c // indirect
- github.com/k8snetworkplumbingwg/network-attachment-definition-client v0.0.0-20191119172530-79f836b90111
- github.com/kubevirt/terraform-provider-kubevirt v0.0.0-00010101000000-000000000000
github.com/libvirt/libvirt-go v5.10.0+incompatible
github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786 // indirect
github.com/masterzen/winrm v0.0.0-20190308153735-1d17eaf15943 // indirect
@@ -66,7 +64,6 @@ require (
github.com/openshift/cloud-credential-operator v0.0.0-20200316201045-d10080b52c9e
github.com/openshift/cluster-api-provider-gcp v0.0.1-0.20201203141909-4dc702fd57a5
github.com/openshift/cluster-api-provider-ibmcloud v0.0.0-20210702173623-676faba9895d
- github.com/openshift/cluster-api-provider-kubevirt v0.0.0-20210719100556-9b8bc3666720
github.com/openshift/cluster-api-provider-libvirt v0.2.1-0.20191219173431-2336783d4603
github.com/openshift/cluster-api-provider-ovirt v0.1.1-0.20210817084941-2262c7c6cece
github.com/openshift/library-go v0.0.0-20210408164723-7a65fdb398e2
@@ -114,8 +111,6 @@ require (
k8s.io/klog v1.0.0
k8s.io/klog/v2 v2.9.0
k8s.io/utils v0.0.0-20210707171843-4b05e18ac7d9
- kubevirt.io/client-go v0.29.0
- kubevirt.io/containerized-data-importer v1.10.9
sigs.k8s.io/cluster-api-provider-aws v0.0.0
sigs.k8s.io/cluster-api-provider-azure v0.0.0
sigs.k8s.io/cluster-api-provider-openstack v0.0.0
@@ -129,7 +124,6 @@ replace (
github.com/hashicorp/terraform => github.com/openshift/terraform v0.12.20-openshift-4 // Pin to fork with deduplicated rpc types v0.12.20-openshift-4
github.com/hashicorp/terraform-plugin-sdk => github.com/openshift/hashicorp-terraform-plugin-sdk v1.14.0-openshift // Pin to fork with public rpc types
github.com/hashicorp/terraform-provider-vsphere => github.com/openshift/terraform-provider-vsphere v1.24.3-openshift
- github.com/kubevirt/terraform-provider-kubevirt => github.com/nirarg/terraform-provider-kubevirt v0.0.0-20201222125919-101cee051ed3
github.com/metal3-io/baremetal-operator => github.com/openshift/baremetal-operator v0.0.0-20210706141527-5240e42f012a // Use OpenShift fork
github.com/metal3-io/baremetal-operator/apis => github.com/openshift/baremetal-operator/apis v0.0.0-20210706141527-5240e42f012a // Use OpenShift fork
github.com/metal3-io/cluster-api-provider-baremetal => github.com/openshift/cluster-api-provider-baremetal v0.0.0-20190821174549-a2a477909c1d // Pin OpenShift fork
@@ -142,7 +136,6 @@ replace (
k8s.io/client-go => k8s.io/client-go v0.22.0
k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 // Pinned due to kubevirt.io downstream dependencies
k8s.io/kubectl => k8s.io/kubectl v0.21.0-rc.0
- kubevirt.io/client-go => kubevirt.io/client-go v0.29.0
sigs.k8s.io/cluster-api-provider-aws => github.com/openshift/cluster-api-provider-aws v0.2.1-0.20210121023454-5ffc5f422a80
sigs.k8s.io/cluster-api-provider-azure => github.com/openshift/cluster-api-provider-azure v0.1.0-alpha.3.0.20210626224711-5d94c794092f
sigs.k8s.io/cluster-api-provider-openstack => github.com/openshift/cluster-api-provider-openstack v0.0.0-20210302164104-8498241fa4bd
diff --git a/go.sum b/go.sum
index fc73c3d2614..34a6ea4296e 100644
--- a/go.sum
+++ b/go.sum
@@ -306,7 +306,6 @@ github.com/bombsimon/wsl/v3 v3.0.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2
github.com/bombsimon/wsl/v3 v3.1.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc=
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI=
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
-github.com/brancz/gojsontoyaml v0.0.0-20190425155809-e8bd32d46b3d/go.mod h1:IyUJYN1gvWjtLF5ZuygmxbnsAyP3aJS6cHzIuZY50B0=
github.com/briankassouf/jose v0.9.2-0.20180619214549-d2569464773f/go.mod h1:HQhVmdUf7dBNwIIdBTivnCDxcf6IZY3/zrb+uKSJz6Y=
github.com/btubbs/datetime v0.1.0/go.mod h1:n2BZ/2ltnRzNiz27aE3wUb2onNttQdC+WFxAoks5jJM=
github.com/btubbs/datetime v0.1.1 h1:KuV+F9tyq/hEnezmKZNGk8dzqMVsId6EpFVrQCfA3To=
@@ -314,7 +313,6 @@ github.com/btubbs/datetime v0.1.1/go.mod h1:n2BZ/2ltnRzNiz27aE3wUb2onNttQdC+WFxA
github.com/c4milo/gotoolkit v0.0.0-20170704181456-e37eeabad07e/go.mod h1:txokOny9wavBtq2PWuHmj1P+eFwpCsj+gQeNNANChfU=
github.com/c4milo/gotoolkit v0.0.0-20190525173301-67483a18c17a h1:+uvtaGSLJh0YpLLHCQ9F+UVGy4UOS542hsjj8wBjvH0=
github.com/c4milo/gotoolkit v0.0.0-20190525173301-67483a18c17a/go.mod h1:txokOny9wavBtq2PWuHmj1P+eFwpCsj+gQeNNANChfU=
-github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8=
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -361,7 +359,6 @@ github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
-github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
github.com/containers/image v3.0.2+incompatible h1:B1lqAE8MUPCrsBLE86J0gnXleeRq8zJnQryhiiGQNyE=
github.com/containers/image v3.0.2+incompatible/go.mod h1:8Vtij257IWSanUQKe1tAeNOm2sRVkSqQTVQ1IlwI3+M=
github.com/containers/image/v5 v5.5.1/go.mod h1:4PyNYR0nwlGq/ybVJD9hWlhmIsNra4Q8uOQX2s6E2uM=
@@ -371,12 +368,10 @@ github.com/containers/storage v1.20.2/go.mod h1:oOB9Ie8OVPojvoaKWEGSEtHbXUAs+tSy
github.com/coreos/bbolt v1.3.0/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
-github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/container-linux-config-transpiler v0.9.0/go.mod h1:SlcxXZQ2c42knj8pezMiQsM1f+ADxFMjGetuMKR/YSQ=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/etcd v3.3.15+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
-github.com/coreos/etcd v3.3.17+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/fcct v0.5.0/go.mod h1:cbE+j77YSQwFB2fozWVB3qsI2Pi3YiVEbDz/b6Yywdo=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-json v0.0.0-20170920214419-6a2fe990e083/go.mod h1:FmxyHfvrCFfCsXRylD4QQRlQmvzl+DG6iTHyEEykPfU=
@@ -408,7 +403,6 @@ github.com/coreos/ignition/v2 v2.9.0/go.mod h1:A5lFFzA2/zvZQPVEvI1lR5WPLWRb7KZ7Q
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/coreos/prometheus-operator v0.35.0/go.mod h1:XHYZUStZWcwd1yk/1DjZv/fywqKIyAJ6pSwvIr+v9BQ=
github.com/coreos/stream-metadata-go v0.0.0-20210225230131-70edb9eb47b3 h1:0JspqV66RwYqYfvi8lCUoL5zUZMh9uN4hx/J5+NRXIE=
github.com/coreos/stream-metadata-go v0.0.0-20210225230131-70edb9eb47b3/go.mod h1:RTjQyHgO/G37oJ3qnqYK6Z4TPZ5EsaabOtfMjVXmgko=
github.com/coreos/vcontext v0.0.0-20190529201340-22b159166068/go.mod h1:E+6hug9bFSe0KZ2ZAzr8M9F5JlArJjv5D1JS7KSkPKE=
@@ -497,12 +491,10 @@ github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb
github.com/emicklei/go-restful v2.9.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/emicklei/go-restful v2.10.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emicklei/go-restful v2.14.2+incompatible h1:uyx8VgUCryEkh7qbr8rEtrA0rGDEJ73F5lOJdB5m3V8=
github.com/emicklei/go-restful v2.14.2+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/evanphx/json-patch v4.1.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
@@ -561,7 +553,6 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo=
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc=
github.com/go-ldap/ldap/v3 v3.1.3/go.mod h1:3rbOH3jRS2u6jg2rJnKAMLE/xQyCKIveG2Sa/Cohzb8=
@@ -569,7 +560,6 @@ github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTD
github.com/go-log/log v0.1.1-0.20181211034820-a514cf01a3eb/go.mod h1:4mBwpdRMFLiuXZDCwU2lKQFsoSCo72j3HqBK9d81N2M=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
@@ -624,7 +614,6 @@ github.com/go-openapi/strfmt v0.20.1/go.mod h1:43urheQI9dNtE5lTZQfuFJvjYJKPrxicA
github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.19.4/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
@@ -710,13 +699,10 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/gogo/protobuf v1.2.2-0.20190730201129-28a6bbf47e48/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -879,14 +865,11 @@ github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnq
github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado=
github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
-github.com/gregjones/httpcache v0.0.0-20181110185634-c63ab54fda8f/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
-github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
-github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
github.com/grpc-ecosystem/grpc-gateway v1.4.1/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
@@ -1070,13 +1053,11 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO
github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4=
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
-github.com/imdario/mergo v0.0.0-20171009183408-7fe0c75c13ab/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA=
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
-github.com/improbable-eng/thanos v0.3.2/go.mod h1:GZewVGILKuJVPNRn7L4Zw+7X96qzFOwj63b22xYGXBE=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/influxdata/influxdb v0.0.0-20190411212539-d24b7ba8c4c4/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY=
@@ -1115,7 +1096,6 @@ github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFF
github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA=
github.com/joyent/triton-go v0.0.0-20190112182421-51ffac552869/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
-github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -1125,7 +1105,6 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/jsonnet-bundler/jsonnet-bundler v0.1.0/go.mod h1:YKsSFc9VFhhLITkJS3X2PrRqWG9u2Jq99udTdDjQLfM=
github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
@@ -1133,8 +1112,6 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/k8snetworkplumbingwg/network-attachment-definition-client v0.0.0-20191119172530-79f836b90111 h1:Lq6HJa0JqSg5ko/mkizFWlpIrY7845g9Dzz9qeD5aXI=
-github.com/k8snetworkplumbingwg/network-attachment-definition-client v0.0.0-20191119172530-79f836b90111/go.mod h1:MP2HbArq3QT+oVp8pmtHNZnSnkhdkHtDnc7h6nJXmBU=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
@@ -1240,7 +1217,6 @@ github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-isatty v0.0.6/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
@@ -1295,7 +1271,6 @@ github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZX
github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4=
github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
-github.com/mitchellh/hashstructure v0.0.0-20170609045927-2bca23e0e452/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ=
github.com/mitchellh/hashstructure v1.0.0 h1:ZkRJX1CyOoTkar7p/mLS5TZU4nJ1Rn/F8u9dGS02Q3Y=
github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ=
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
@@ -1358,8 +1333,6 @@ github.com/nicksnyder/go-i18n v1.10.0 h1:5AzlPKvXBH4qBzmZ09Ua9Gipyruv6uApMcrNZdo
github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
-github.com/nirarg/terraform-provider-kubevirt v0.0.0-20201222125919-101cee051ed3 h1:X+6Iial/2VHkDJvtdJiSdJq/RnTDlvdX7WscLXS+z0U=
-github.com/nirarg/terraform-provider-kubevirt v0.0.0-20201222125919-101cee051ed3/go.mod h1:FMugN9a6XOJm9mLFEV/+F4IJzdZmpLn/OaNRa8S/Ens=
github.com/nishanths/exhaustive v0.0.0-20200811152831-6cf413ae40e0/go.mod h1:wBEpHwM2OdmeNpdCvRPUlkEbBuaFmcK4Wv8Q7FuGW3c=
github.com/nishanths/exhaustive v0.1.0/go.mod h1:S1j9110vxV1ECdCudXRkeMnFQ/DQk9ajLT0Uf2MYZQQ=
github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d h1:VhgPp6v9qf9Agr/56bj7Y/xa04UccTW04VP0Qed4vnQ=
@@ -1421,7 +1394,6 @@ github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.m
github.com/opencontainers/selinux v1.5.2/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g=
github.com/openshift-metal3/terraform-provider-ironic v0.2.6 h1:R48DOxq2z6NpFkRs/OHzbkWA8aLZMIXljMK2aq1VvbM=
github.com/openshift-metal3/terraform-provider-ironic v0.2.6/go.mod h1:ux2W6gsCIYsY/fX5N0V0ZgwFEBNN7P8g6RlH6ACi97k=
-github.com/openshift/api v0.0.0-20191219222812-2987a591a72c/go.mod h1:dh9o4Fs58gpFXGSYfnVxGR9PnV53I8TW84pQaJDdGiY=
github.com/openshift/api v0.0.0-20200326160804-ecb9283fe820/go.mod h1:RKMJ5CBnljLfnej+BJ/xnOWc3kZDvJUaIAEq2oKSPtE=
github.com/openshift/api v0.0.0-20200424083944-0422dc17083e/go.mod h1:VnbEzX8SAaRj7Yfl836NykdQIlbEjfL6/CD+AaJQg5Q=
github.com/openshift/api v0.0.0-20200827090112-c05698d102cf/go.mod h1:M3xexPhgM8DISzzRpuFUy+jfPjQPIcs9yqEYj17mXV8=
@@ -1468,8 +1440,6 @@ github.com/openshift/cluster-api-provider-gcp v0.0.1-0.20201203141909-4dc702fd57
github.com/openshift/cluster-api-provider-gcp v0.0.1-0.20201203141909-4dc702fd57a5/go.mod h1:/XjFaKnqBc8K/jcRXHO7tau39CmzNinqmpxYaQGRvnE=
github.com/openshift/cluster-api-provider-ibmcloud v0.0.0-20210702173623-676faba9895d h1:FD/0xn/h8Do//QkPGhsf1pgXkH8nUkfIUmQ16bRU6TQ=
github.com/openshift/cluster-api-provider-ibmcloud v0.0.0-20210702173623-676faba9895d/go.mod h1:hIEdP3ZudO/l2J8+gm8IFW0KMHn0YURvMSTZy9luK7w=
-github.com/openshift/cluster-api-provider-kubevirt v0.0.0-20210719100556-9b8bc3666720 h1:+7K3weJLiXzIlUfdKbJ34QaAROrQMxXuEMi0ozmMyZY=
-github.com/openshift/cluster-api-provider-kubevirt v0.0.0-20210719100556-9b8bc3666720/go.mod h1:jiZXnZ50S7oYVnLIKp9K2RExM2zTtPpoCVSGtsmotqc=
github.com/openshift/cluster-api-provider-libvirt v0.2.1-0.20191219173431-2336783d4603 h1:MC6BSZYxFPoqqKj9PdlGjHGVKcMsvn6Kv1NiVzQErZ8=
github.com/openshift/cluster-api-provider-libvirt v0.2.1-0.20191219173431-2336783d4603/go.mod h1:7pQ9Bzha+ug/5zd+0ufbDEcnn2OnNlPwRwYrzhXk4NM=
github.com/openshift/cluster-api-provider-openstack v0.0.0-20210302164104-8498241fa4bd h1:5mq9/JftiO9u/RknQ5iR9Nkd09R1XFfUPS1nO11Wth0=
@@ -1477,8 +1447,6 @@ github.com/openshift/cluster-api-provider-openstack v0.0.0-20210302164104-849824
github.com/openshift/cluster-api-provider-ovirt v0.1.1-0.20210817084941-2262c7c6cece h1:w32C7hy52lkIpDvJqz/tRyYCIZmhE/8bSIVt+L0c9Mg=
github.com/openshift/cluster-api-provider-ovirt v0.1.1-0.20210817084941-2262c7c6cece/go.mod h1:lrKTKMpd3OERMlQgVJi6VKcE57EvtUORGSFIoE7BEAs=
github.com/openshift/cluster-autoscaler-operator v0.0.0-20190521201101-62768a6ba480/go.mod h1:/XmV44Fh28Vo3Ye93qFrxAbcFJ/Uy+7LPD+jGjmfJYc=
-github.com/openshift/custom-resource-status v0.0.0-20190822192428-e62f2f3b79f3 h1:XuAys09+XqT5/FjdR23G/UtbBLII89dFe9XIi73EKIQ=
-github.com/openshift/custom-resource-status v0.0.0-20190822192428-e62f2f3b79f3/go.mod h1:GDjWl0tX6FNIj82vIxeudWeSx2Ff6nDZ8uJn0ohUFvo=
github.com/openshift/hashicorp-terraform-plugin-sdk v1.14.0-openshift h1:CuH9qNELLH3y0QoSaLchdG+7We75AO4kNBy6P3+oLug=
github.com/openshift/hashicorp-terraform-plugin-sdk v1.14.0-openshift/go.mod h1:t62Xy+m7Zjq5tA2vrs8Wuo/TQ0sc9Mx9MjXL3+7MHBQ=
github.com/openshift/library-go v0.0.0-20191003152030-97c62d8a2901/go.mod h1:NBttNjZpWwup/nthuLbPAPSYC8Qyo+BBK5bCtFoyYjo=
@@ -1502,7 +1470,6 @@ github.com/openshift/machine-api-operator v0.2.1-0.20210505133115-b7ef098180db h
github.com/openshift/machine-api-operator v0.2.1-0.20210505133115-b7ef098180db/go.mod h1:DFZBMPtC2TYZH5NE9+2JQIpbZAnruqc9F26QmbOm9pw=
github.com/openshift/machine-config-operator v0.0.1-0.20201009041932-4fe8559913b8 h1:C4gCipkWTDp0B9jb0wZdLgB+HWC7EzVVwQOeNaKnTRA=
github.com/openshift/machine-config-operator v0.0.1-0.20201009041932-4fe8559913b8/go.mod h1:fjKreLaKEeUKsyIkT4wlzIQwUVJ2ZKDUh3CI73ckYIY=
-github.com/openshift/prom-label-proxy v0.1.1-0.20191016113035-b8153a7f39f1/go.mod h1:p5MuxzsYP1JPsNGwtjtcgRHHlGziCJJfztff91nNixw=
github.com/openshift/runtime-utils v0.0.0-20200415173359-c45d4ff3f912/go.mod h1:0OXNy7VoqFexkxKqyQbHJLPwn1MFp1/CxRJAgKHM+/o=
github.com/openshift/terraform v0.12.20-openshift-4 h1:1v7cIei84p26eqbD4LiTZOH0ecXbL7Qss0sy4BFeWhY=
github.com/openshift/terraform v0.12.20-openshift-4/go.mod h1:R/dUWEZVB5itR8fNzx3g8QZMIwwWuI8rcwF8SbL1sq4=
@@ -1630,9 +1597,7 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4=
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/prometheus v2.3.2+incompatible/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
-github.com/prometheus/tsdb v0.8.0/go.mod h1:fSI0j+IUQrDd7+ZtR9WKIGtoYAYAJUKcKhYLG25tN4g=
github.com/qri-io/starlib v0.4.2-0.20200213133954-ff2e8cd5ef8d/go.mod h1:7DPO4domFU579Ga6E61sB9VFNaniPVwJP5C4bBCu3wA=
github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI=
github.com/quasilyte/go-ruleguard v0.2.0/go.mod h1:2RT/tf0Ce0UDj5y243iWKosQogJd8+1G3Rs2fxmlYnw=
@@ -1714,7 +1679,6 @@ github.com/softlayer/softlayer-go v1.0.3 h1:9FONm5xzQ9belQtbdryR6gBg4EF6hX6lrjNK
github.com/softlayer/softlayer-go v1.0.3/go.mod h1:6HepcfAXROz0Rf63krk5hPZyHT6qyx2MNvYyHof7ik4=
github.com/softlayer/xmlrpc v0.0.0-20200409220501-5f089df7cb7e h1:3OgWYFw7jxCZPcvAg+4R8A50GZ+CCkARF10lxu2qDsQ=
github.com/softlayer/xmlrpc v0.0.0-20200409220501-5f089df7cb7e/go.mod h1:fKZCUVdirrxrBpwd9wb+lSoVixvpwAu8eHzbQB2tums=
-github.com/soheilhy/cmux v0.1.3/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI=
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
@@ -1893,7 +1857,6 @@ github.com/zclconf/go-cty v1.1.1/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLE
github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8=
github.com/zclconf/go-cty v1.2.1/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8=
github.com/zclconf/go-cty v1.4.0/go.mod h1:nHzOclRkoj++EU9ZjSrZvRG0BXIWt8c7loYc0qXAFGQ=
-github.com/zclconf/go-cty v1.5.1/go.mod h1:nHzOclRkoj++EU9ZjSrZvRG0BXIWt8c7loYc0qXAFGQ=
github.com/zclconf/go-cty v1.6.1 h1:wHtZ+LSSQVwUSb+XIJ5E9hgAQxyWATZsAWT+ESJ9dQ0=
github.com/zclconf/go-cty v1.6.1/go.mod h1:VDR4+I79ubFBGm1uJac1226K5yANQFHeauxPBoP54+o=
github.com/zclconf/go-cty-yaml v1.0.1/go.mod h1:IP3Ylp0wQpYm50IHK8OZWKMu6sPJIUgKa8XhiVHura0=
@@ -1924,7 +1887,6 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.starlark.net v0.0.0-20190528202925-30ae18b8564f/go.mod h1:c1/X6cHgvdXj6pUlmWKMkuqRnW4K8x2vwt6JAaaircg=
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc=
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o=
-go.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
@@ -1932,13 +1894,11 @@ go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
-go.uber.org/multierr v0.0.0-20180122172545-ddea229ff1df/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
-go.uber.org/zap v0.0.0-20180814183419-67bc79d13d15/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
@@ -1971,7 +1931,6 @@ golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
-golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -2049,7 +2008,6 @@ golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190930134127-c5a3c61f89f3/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191009170851-d66e71096ffb/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -2082,7 +2040,6 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
golang.org/x/net v0.0.0-20210520170846-37e1c6afe023 h1:ADo5wSpq2gqaCGQWzk7S5vd//0iyyLeAratkEoG5dLE=
golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190130055435-99b60b757ec1/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190319182350-c85d3e98c914/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -2119,7 +2076,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -2142,7 +2098,6 @@ golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190927073244-c990c680b611/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -2211,7 +2166,6 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -2339,7 +2293,6 @@ google.golang.org/api v0.25.0 h1:LodzhlzZEUfhXzNUMIfVlf9Gr6Ua5MMtoFWh7+f47qA=
google.golang.org/api v0.25.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
@@ -2415,10 +2368,8 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkep
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
-gopkg.in/yaml.v2 v2.1.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -2446,12 +2397,8 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9
honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.6 h1:W18jzjh8mfPez+AwGLxmOImucz/IFjpNlrKVnaj2YVc=
honnef.co/go/tools v0.0.1-2020.1.6/go.mod h1:pyyisuGw24ruLjrr1ddx39WE0y9OooInRzEYLhQB2YY=
-k8s.io/api v0.0.0-20181115043458-b799cb063522/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA=
k8s.io/api v0.0.0-20190409021203-6e4e0e4f393b/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA=
k8s.io/api v0.0.0-20190409092523-d687e77c8ae9/go.mod h1:FQEUn50aaytlU65qqBn/w+5ugllHwrBzKm7DzbnXdzE=
-k8s.io/api v0.0.0-20190725062911-6607c48751ae/go.mod h1:1O0xzX/RAtnm7l+5VEUxZ1ysO2ghatfq/OZED4zM9kA=
-k8s.io/api v0.0.0-20190918155943-95b840bb6a1f/go.mod h1:uWuOHnjmNrtQomJrvEBg0c0HRNyQ+8KTEERVsK0PW48=
-k8s.io/api v0.16.4/go.mod h1:AtzMnsR45tccQss5q8RnF+W8L81DH6XwXwo/joEx9u0=
k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI=
k8s.io/api v0.18.0-beta.2/go.mod h1:2oeNnWEqcSmaM/ibSh3t7xcIqbkGXhzZdn4ezV9T4m0=
k8s.io/api v0.18.0/go.mod h1:q2HRQkfDzHMBZL9l/y9rH63PkQl4vae0xRT+8prbrK8=
@@ -2467,8 +2414,6 @@ k8s.io/api v0.21.0/go.mod h1:+YbrhBBGgsxbF6o6Kj4KJPJnBmAKuXDeS3E18bgHNVU=
k8s.io/api v0.22.0/go.mod h1:0AoXXqst47OI/L0oGKq9DG61dvGRPXs7X4/B7KyjBCU=
k8s.io/api v0.22.1 h1:ISu3tD/jRhYfSW8jI/Q1e+lRxkR7w9UwQEZ7FgslrwY=
k8s.io/api v0.22.1/go.mod h1:bh13rkTp3F1XEaLGykbyRD2QaTTzPm0e/BMd8ptFONY=
-k8s.io/apiextensions-apiserver v0.0.0-20190918161926-8f644eb6e783/go.mod h1:xvae1SZB3E17UpV59AWc271W/Ph25N+bjPyR63X6tPY=
-k8s.io/apiextensions-apiserver v0.16.4/go.mod h1:HYQwjujEkXmQNhap2C9YDdIVOSskGZ3et0Mvjcyjbto=
k8s.io/apiextensions-apiserver v0.18.0-beta.2/go.mod h1:Hnrg5jx8/PbxRbUoqDGxtQkULjwx8FDW4WYJaKNK+fk=
k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY=
k8s.io/apiextensions-apiserver v0.19.0/go.mod h1:znfQxNpjqz/ZehvbfMg5N6fvBJW5Lqu5HVLTJQdP4Fs=
@@ -2477,12 +2422,8 @@ k8s.io/apiextensions-apiserver v0.20.0/go.mod h1:ZH+C33L2Bh1LY1+HphoRmN1IQVLTShV
k8s.io/apiextensions-apiserver v0.21.0-beta.1/go.mod h1:vluMqsJ5+hPgM9UtBhkFSGrfD86KUac9yeKVqpGBZz0=
k8s.io/apiextensions-apiserver v0.21.0-rc.0 h1:gxeak4PvTBhuiZagZRFv9WyNnAdG39/VCmI9XTwVCRk=
k8s.io/apiextensions-apiserver v0.21.0-rc.0/go.mod h1:ItIoMBJU1gy93Qwr/B2699r4b0VmZqAOU+15BvozxMY=
-k8s.io/apimachinery v0.0.0-20181110190943-2a7c93004028/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0=
k8s.io/apimachinery v0.0.0-20190404173353-6a84e37a896d/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0=
k8s.io/apimachinery v0.0.0-20190409092423-760d1845f48b/go.mod h1:FW86P8YXVLsbuplGMZeb20J3jYHscrDqw4jELaFJvRU=
-k8s.io/apimachinery v0.0.0-20190719140911-bfcf53abc9f8/go.mod h1:sBJWIJZfxLhp7mRsRyuAE/NfKTr3kXGR1iaqg8O0gJo=
-k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655/go.mod h1:nL6pwRT8NgfF8TT68DBI8uEePRt89cSvoXUVqbkWHq4=
-k8s.io/apimachinery v0.16.4/go.mod h1:llRdnznGEAqC3DcNm6yEj472xaFVfLM7hnYofMb12tQ=
k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg=
k8s.io/apimachinery v0.17.3/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g=
k8s.io/apimachinery v0.18.0-beta.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA=
@@ -2500,8 +2441,6 @@ k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswP
k8s.io/apimachinery v0.22.0/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0=
k8s.io/apimachinery v0.22.1 h1:DTARnyzmdHMz7bFWFDDm22AM4pLWTQECMpRTFu2d2OM=
k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0=
-k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad/go.mod h1:XPCXEwhjaFN29a8NldXA901ElnKeKLrLtREO9ZhFyhg=
-k8s.io/apiserver v0.16.4/go.mod h1:kbLJOak655g6W7C+muqu1F76u9wnEycfKMqbVaXIdAc=
k8s.io/apiserver v0.18.0-beta.2/go.mod h1:bnblMkMoCFnIfVnVftd0SXJPzyvrk3RtaqSbblphF/A=
k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw=
k8s.io/apiserver v0.19.0/go.mod h1:XvzqavYj73931x7FLtyagh8WibHpePJ1QwWrSJs2CLk=
@@ -2516,11 +2455,7 @@ k8s.io/cli-runtime v0.21.0-rc.0/go.mod h1:Gp9Njd5Z9IayPHKL8AKVVMrdzHrMHN+WnGMHYC
k8s.io/client-go v0.22.0 h1:sD6o9O6tCwUKCENw8v+HFsuAbq2jCu8cWC61/ydwA50=
k8s.io/client-go v0.22.0/go.mod h1:GUjIuXR5PiEv/RVK5OODUsm6eZk7wtSWZSaSJbpFdGg=
k8s.io/cluster-bootstrap v0.0.0-20190202014938-c9acc0c1bea2/go.mod h1:iBSm2nwo3OaiuW8VDvc3ySDXK5SKfUrxwPvBloKG7zg=
-k8s.io/code-generator v0.0.0-20181114232248-ae218e241252/go.mod h1:IPqxl/YHk05nodzupwjke6ctMjyNRdV2zZ5/j3/F204=
-k8s.io/code-generator v0.0.0-20190717022600-77f3a1fe56bb/go.mod h1:cDx5jQmWH25Ff74daM7NVYty9JWw9dvIS9zT9eIubCY=
-k8s.io/code-generator v0.0.0-20190912054826-cd179ad6a269/go.mod h1:V5BD6M4CyaN5m+VthcclXWsVcT1Hu+glwa1bi3MIsyE=
k8s.io/code-generator v0.0.0-20191003035328-700b1226c0bd/go.mod h1:HC9p4y3SBN+txSs8x57qmNPXFZ/CxdCHiDTNnocCSEw=
-k8s.io/code-generator v0.16.4/go.mod h1:mJUgkl06XV4kstAnLHAIzJPVCOzVR+ZcfPIv4fUsFCY=
k8s.io/code-generator v0.18.0-beta.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc=
k8s.io/code-generator v0.18.0/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc=
k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc=
@@ -2532,8 +2467,6 @@ k8s.io/code-generator v0.21.0-beta.1/go.mod h1:IpCUojpiKp25KNB3/UbEeElznqpQUMvhA
k8s.io/code-generator v0.21.0-rc.0/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q=
k8s.io/code-generator v0.21.0/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q=
k8s.io/code-generator v0.22.1/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o=
-k8s.io/component-base v0.0.0-20190918160511-547f6c5d7090/go.mod h1:933PBGtQFJky3TEwYx4aEPZ4IxqhWh3R6DCmzqIn1hA=
-k8s.io/component-base v0.16.4/go.mod h1:GYQ+4hlkEwdlpAp59Ztc4gYuFhdoZqiAJD1unYDJ3FM=
k8s.io/component-base v0.18.0-beta.2/go.mod h1:HVk5FpRnyzQ/MjBr9//e/yEBjTVa2qjGXCTuUzcD7ks=
k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM=
k8s.io/component-base v0.19.0/go.mod h1:dKsY8BxkA+9dZIAh2aWJLL/UdASFDNtGYTCItL4LM7Y=
@@ -2545,8 +2478,6 @@ k8s.io/component-base v0.21.0-rc.0/go.mod h1:XlP0bM7QJFWRGZYPc5NmphkvsYQ+o7804HW
k8s.io/component-base v0.21.0 h1:tLLGp4BBjQaCpS/KiuWh7m2xqvAdsxLm4ATxHSe5Zpg=
k8s.io/component-base v0.21.0/go.mod h1:qvtjz6X0USWXbgmbfXR+Agik4RZ3jv2Bgr5QnZzdPYw=
k8s.io/component-helpers v0.21.0-rc.0/go.mod h1:A8RfzdPEZoysfI5C0RExdjy7Zy/RZET3tcUmt7BMWdc=
-k8s.io/gengo v0.0.0-20181106084056-51747d6e00da/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/gengo v0.0.0-20190907103519-ebc107f98eab/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
@@ -2556,8 +2487,6 @@ k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAE
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
k8s.io/klog v0.0.0-20190306015804-8e90cee79f82/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
@@ -2583,7 +2512,6 @@ k8s.io/kubectl v0.21.0-rc.0/go.mod h1:eOKzb5p2/9pNzt2TQpVSzfB/41W6ZMm0JbJEIvyH08
k8s.io/kubelet v0.19.0/go.mod h1:cGds22piF/LnFzfAaIT+efvOYBHVYdunqka6NVuNw9g=
k8s.io/metrics v0.21.0-rc.0/go.mod h1:iCF67TNbrhChr/eb99uHt0H1hE7Rd1EC2Ic/yknzIE4=
k8s.io/utils v0.0.0-20190529001817-6999998975a7/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
-k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
k8s.io/utils v0.0.0-20200229041039-0a110f9eb7ab/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
k8s.io/utils v0.0.0-20200327001022-6496210b90e8/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
@@ -2593,11 +2521,6 @@ k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/
k8s.io/utils v0.0.0-20210111153108-fddb29f9d009/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20210707171843-4b05e18ac7d9 h1:imL9YgXQ9p7xmPzHFm/vVd/cF78jad+n4wK1ABwYtMM=
k8s.io/utils v0.0.0-20210707171843-4b05e18ac7d9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-kubevirt.io/client-go v0.29.0 h1:s8TwjVgELtg5fJ18ipFmwuR17G4p8fOb+u0EJvjj5zk=
-kubevirt.io/client-go v0.29.0/go.mod h1:JY7hQq+SUT0aLvleXrW/+28fDfZ6BPe4E6f8FyC8jkY=
-kubevirt.io/containerized-data-importer v1.10.6/go.mod h1:qF594BtRRkruyrqLwt3zbLCWdPIQNs1qWh4LR1cOzy0=
-kubevirt.io/containerized-data-importer v1.10.9 h1:wYCPyMbCLdn5tlZWW/lPYTMPtIOSfdXDevyWw9rxl2s=
-kubevirt.io/containerized-data-importer v1.10.9/go.mod h1:qF594BtRRkruyrqLwt3zbLCWdPIQNs1qWh4LR1cOzy0=
layeh.com/radius v0.0.0-20190322222518-890bc1058917/go.mod h1:fywZKyu//X7iRzaxLgPWsvc0L26IUpVvE/aeIL2JtIQ=
modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk=
@@ -2634,9 +2557,6 @@ sigs.k8s.io/kustomize/kustomize/v4 v4.0.5/go.mod h1:C7rYla7sI8EnxHE/xEhRBSHMNfcL
sigs.k8s.io/kustomize/kyaml v0.9.1/go.mod h1:UTm64bSWVdBUA8EQoYCxVOaBQxUdIOr5LKWxA4GNbkw=
sigs.k8s.io/kustomize/kyaml v0.10.15 h1:dSLgG78KyaxN4HylPXdK+7zB3k7sW6q3IcCmcfKA+aI=
sigs.k8s.io/kustomize/kyaml v0.10.15/go.mod h1:mlQFagmkm1P+W4lZJbJ/yaxMd8PqMRSC4cPcfUVt5Hg=
-sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA=
-sigs.k8s.io/structured-merge-diff v1.0.1 h1:LOs1LZWMsz1xs77Phr/pkB4LFaavH7IVq/3+WTN9XTA=
-sigs.k8s.io/structured-merge-diff v1.0.1/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA=
sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
diff --git a/pkg/asset/cluster/kubevirt/OWNERS b/pkg/asset/cluster/kubevirt/OWNERS
deleted file mode 100644
index c81b62d00a3..00000000000
--- a/pkg/asset/cluster/kubevirt/OWNERS
+++ /dev/null
@@ -1,7 +0,0 @@
-# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
-# This file just uses aliases defined in OWNERS_ALIASES.
-
-approvers:
- - kubevirt-approvers
-reviewers:
- - kubevirt-reviewers
diff --git a/pkg/asset/cluster/kubevirt/kubevirt.go b/pkg/asset/cluster/kubevirt/kubevirt.go
deleted file mode 100644
index 98071a4196e..00000000000
--- a/pkg/asset/cluster/kubevirt/kubevirt.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Package kubevirt extracts Kubevirt metadata from install configurations.
-package kubevirt
-
-import (
- kubevirtutils "github.com/openshift/cluster-api-provider-kubevirt/pkg/utils"
- "github.com/openshift/installer/pkg/types"
- "github.com/openshift/installer/pkg/types/kubevirt"
-)
-
-// Metadata converts an install configuration to kubevirt metadata.
-func Metadata(infraID string, config *types.InstallConfig) *kubevirt.Metadata {
- labels := kubevirtutils.BuildLabels(infraID)
- return &kubevirt.Metadata{
- Namespace: config.Kubevirt.Namespace,
- Labels: labels,
- }
-}
diff --git a/pkg/asset/cluster/metadata.go b/pkg/asset/cluster/metadata.go
index 06c1ee9682f..1d27379af58 100644
--- a/pkg/asset/cluster/metadata.go
+++ b/pkg/asset/cluster/metadata.go
@@ -13,7 +13,6 @@ import (
"github.com/openshift/installer/pkg/asset/cluster/baremetal"
"github.com/openshift/installer/pkg/asset/cluster/gcp"
"github.com/openshift/installer/pkg/asset/cluster/ibmcloud"
- "github.com/openshift/installer/pkg/asset/cluster/kubevirt"
"github.com/openshift/installer/pkg/asset/cluster/libvirt"
"github.com/openshift/installer/pkg/asset/cluster/openstack"
"github.com/openshift/installer/pkg/asset/cluster/ovirt"
@@ -26,7 +25,6 @@ import (
baremetaltypes "github.com/openshift/installer/pkg/types/baremetal"
gcptypes "github.com/openshift/installer/pkg/types/gcp"
ibmcloudtypes "github.com/openshift/installer/pkg/types/ibmcloud"
- kubevirttypes "github.com/openshift/installer/pkg/types/kubevirt"
libvirttypes "github.com/openshift/installer/pkg/types/libvirt"
nonetypes "github.com/openshift/installer/pkg/types/none"
openstacktypes "github.com/openshift/installer/pkg/types/openstack"
@@ -91,8 +89,6 @@ func (m *Metadata) Generate(parents asset.Parents) (err error) {
metadata.ClusterPlatformMetadata.Ovirt = ovirt.Metadata(installConfig.Config)
case vspheretypes.Name:
metadata.ClusterPlatformMetadata.VSphere = vsphere.Metadata(installConfig.Config)
- case kubevirttypes.Name:
- metadata.ClusterPlatformMetadata.Kubevirt = kubevirt.Metadata(clusterID.InfraID, installConfig.Config)
case nonetypes.Name:
default:
return errors.Errorf("no known platform")
diff --git a/pkg/asset/cluster/tfvars.go b/pkg/asset/cluster/tfvars.go
index ad9835d8473..6bc5f7edc62 100644
--- a/pkg/asset/cluster/tfvars.go
+++ b/pkg/asset/cluster/tfvars.go
@@ -12,8 +12,6 @@ import (
"github.com/ghodss/yaml"
gcpprovider "github.com/openshift/cluster-api-provider-gcp/pkg/apis/gcpprovider/v1beta1"
ibmcloudprovider "github.com/openshift/cluster-api-provider-ibmcloud/pkg/apis/ibmcloudprovider/v1beta1"
- kubevirtprovider "github.com/openshift/cluster-api-provider-kubevirt/pkg/apis/kubevirtprovider/v1alpha1"
- kubevirtutils "github.com/openshift/cluster-api-provider-kubevirt/pkg/utils"
libvirtprovider "github.com/openshift/cluster-api-provider-libvirt/pkg/apis/libvirtproviderconfig/v1beta1"
ovirtprovider "github.com/openshift/cluster-api-provider-ovirt/pkg/apis/ovirtprovider/v1beta1"
vsphereprovider "github.com/openshift/machine-api-operator/pkg/apis/vsphereprovider/v1beta1"
@@ -43,7 +41,6 @@ import (
baremetaltfvars "github.com/openshift/installer/pkg/tfvars/baremetal"
gcptfvars "github.com/openshift/installer/pkg/tfvars/gcp"
ibmcloudtfvars "github.com/openshift/installer/pkg/tfvars/ibmcloud"
- kubevirttfvars "github.com/openshift/installer/pkg/tfvars/kubevirt"
libvirttfvars "github.com/openshift/installer/pkg/tfvars/libvirt"
openstacktfvars "github.com/openshift/installer/pkg/tfvars/openstack"
ovirttfvars "github.com/openshift/installer/pkg/tfvars/ovirt"
@@ -54,7 +51,6 @@ import (
"github.com/openshift/installer/pkg/types/baremetal"
"github.com/openshift/installer/pkg/types/gcp"
"github.com/openshift/installer/pkg/types/ibmcloud"
- "github.com/openshift/installer/pkg/types/kubevirt"
"github.com/openshift/installer/pkg/types/libvirt"
"github.com/openshift/installer/pkg/types/none"
"github.com/openshift/installer/pkg/types/openstack"
@@ -637,32 +633,6 @@ func (t *TerraformVariables) Generate(parents asset.Parents) error {
Filename: fmt.Sprintf(TfPlatformVarsFileName, platform),
Data: data,
})
- case kubevirt.Name:
- masters, err := mastersAsset.Machines()
- if err != nil {
- return err
- }
- masterSpecs := make([]*kubevirtprovider.KubevirtMachineProviderSpec, len(masters))
- for i, m := range masters {
- masterSpecs[i] = m.Spec.ProviderSpec.Value.Object.(*kubevirtprovider.KubevirtMachineProviderSpec)
- }
-
- labels := kubevirtutils.BuildLabels(clusterID.InfraID)
- data, err := kubevirttfvars.TFVars(
- kubevirttfvars.TFVarsSources{
- MasterSpecs: masterSpecs,
- ImageURL: string(*rhcosImage),
- Namespace: installConfig.Config.Kubevirt.Namespace,
- ResourcesLabels: labels,
- },
- )
- if err != nil {
- return errors.Wrapf(err, "failed to get %s Terraform variables", platform)
- }
- t.FileList = append(t.FileList, &asset.File{
- Filename: fmt.Sprintf(TfPlatformVarsFileName, platform),
- Data: data,
- })
default:
logrus.Warnf("unrecognized platform %s", platform)
diff --git a/pkg/asset/ignition/bootstrap/common.go b/pkg/asset/ignition/bootstrap/common.go
index f9ee0a26a5d..ad26e4388ef 100644
--- a/pkg/asset/ignition/bootstrap/common.go
+++ b/pkg/asset/ignition/bootstrap/common.go
@@ -641,8 +641,6 @@ func apiVIP(p *types.Platform) string {
return p.VSphere.APIVIP
case p.Ovirt != nil:
return p.Ovirt.APIVIP
- case p.Kubevirt != nil:
- return p.Kubevirt.APIVIP
default:
return ""
}
diff --git a/pkg/asset/ignition/machine/node.go b/pkg/asset/ignition/machine/node.go
index 2bdadd5cabd..0fc05c1d8e7 100644
--- a/pkg/asset/ignition/machine/node.go
+++ b/pkg/asset/ignition/machine/node.go
@@ -13,7 +13,6 @@ import (
"github.com/openshift/installer/pkg/asset/ignition"
"github.com/openshift/installer/pkg/types"
baremetaltypes "github.com/openshift/installer/pkg/types/baremetal"
- kubevirttypes "github.com/openshift/installer/pkg/types/kubevirt"
openstacktypes "github.com/openshift/installer/pkg/types/openstack"
ovirttypes "github.com/openshift/installer/pkg/types/ovirt"
vspheretypes "github.com/openshift/installer/pkg/types/vsphere"
@@ -42,8 +41,6 @@ func pointerIgnitionConfig(installConfig *types.InstallConfig, rootCA []byte, ro
if installConfig.VSphere.APIVIP != "" {
ignitionHost = net.JoinHostPort(installConfig.VSphere.APIVIP, "22623")
}
- case kubevirttypes.Name:
- ignitionHost = net.JoinHostPort(installConfig.Kubevirt.APIVIP, "22623")
}
return &igntypes.Config{
Ignition: igntypes.Ignition{
diff --git a/pkg/asset/installconfig/installconfig.go b/pkg/asset/installconfig/installconfig.go
index 100862595cc..10257264a45 100644
--- a/pkg/asset/installconfig/installconfig.go
+++ b/pkg/asset/installconfig/installconfig.go
@@ -14,7 +14,6 @@ import (
icazure "github.com/openshift/installer/pkg/asset/installconfig/azure"
icgcp "github.com/openshift/installer/pkg/asset/installconfig/gcp"
icibmcloud "github.com/openshift/installer/pkg/asset/installconfig/ibmcloud"
- ickubevirt "github.com/openshift/installer/pkg/asset/installconfig/kubevirt"
icopenstack "github.com/openshift/installer/pkg/asset/installconfig/openstack"
icovirt "github.com/openshift/installer/pkg/asset/installconfig/ovirt"
icvsphere "github.com/openshift/installer/pkg/asset/installconfig/vsphere"
@@ -94,7 +93,6 @@ func (a *InstallConfig) Generate(parents asset.Parents) error {
a.Config.IBMCloud = platform.IBMCloud
a.Config.BareMetal = platform.BareMetal
a.Config.Ovirt = platform.Ovirt
- a.Config.Kubevirt = platform.Kubevirt
return a.finish("")
}
@@ -208,12 +206,5 @@ func (a *InstallConfig) platformValidation() error {
if a.Config.Platform.OpenStack != nil {
return icopenstack.Validate(a.Config)
}
- if a.Config.Platform.Kubevirt != nil {
- client, err := ickubevirt.NewClient()
- if err != nil {
- return err
- }
- return ickubevirt.Validate(a.Config, client)
- }
return field.ErrorList{}.ToAggregate()
}
diff --git a/pkg/asset/installconfig/kubevirt/OWNERS b/pkg/asset/installconfig/kubevirt/OWNERS
deleted file mode 100644
index c81b62d00a3..00000000000
--- a/pkg/asset/installconfig/kubevirt/OWNERS
+++ /dev/null
@@ -1,7 +0,0 @@
-# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
-# This file just uses aliases defined in OWNERS_ALIASES.
-
-approvers:
- - kubevirt-approvers
-reviewers:
- - kubevirt-reviewers
diff --git a/pkg/asset/installconfig/kubevirt/client.go b/pkg/asset/installconfig/kubevirt/client.go
deleted file mode 100644
index 9e72b06d45f..00000000000
--- a/pkg/asset/installconfig/kubevirt/client.go
+++ /dev/null
@@ -1,262 +0,0 @@
-package kubevirt
-
-import (
- "context"
- "fmt"
-
- nadv1 "github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1"
- "github.com/pkg/errors"
- authv1 "k8s.io/api/authorization/v1"
- corev1 "k8s.io/api/core/v1"
- storagev1 "k8s.io/api/storage/v1"
- apierrors "k8s.io/apimachinery/pkg/api/errors"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- unstructured "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
- "k8s.io/apimachinery/pkg/runtime"
- "k8s.io/apimachinery/pkg/runtime/schema"
- "k8s.io/client-go/dynamic"
- "k8s.io/client-go/kubernetes"
- "k8s.io/client-go/tools/clientcmd"
- clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
- kubevirtapiv1 "kubevirt.io/client-go/api/v1"
- cdiv1 "kubevirt.io/containerized-data-importer/pkg/apis/core/v1alpha1"
-)
-
-//go:generate mockgen -source=./client.go -destination=./mock/client_generated.go -package=mock
-
-// Client is a wrapper object for actual infra-cluster clients: kubernetes and the kubevirt
-type Client interface {
- GetVirtualMachine(ctx context.Context, namespace string, name string) (*kubevirtapiv1.VirtualMachine, error)
- ListVirtualMachine(ctx context.Context, namespace string, opts metav1.ListOptions) (*kubevirtapiv1.VirtualMachineList, error)
- DeleteVirtualMachine(ctx context.Context, namespace string, name string) error
- GetDataVolume(ctx context.Context, namespace string, name string) (*cdiv1.DataVolume, error)
- ListDataVolume(ctx context.Context, namespace string, opts metav1.ListOptions) (*cdiv1.DataVolumeList, error)
- DeleteDataVolume(ctx context.Context, namespace string, name string) error
- GetSecret(ctx context.Context, namespace string, name string) (*corev1.Secret, error)
- ListSecret(ctx context.Context, namespace string, opts metav1.ListOptions) (*corev1.SecretList, error)
- DeleteSecret(ctx context.Context, namespace string, name string) error
- GetNamespace(ctx context.Context, name string) (*corev1.Namespace, error)
- GetStorageClass(ctx context.Context, name string) (*storagev1.StorageClass, error)
- GetNetworkAttachmentDefinition(ctx context.Context, name string, namespace string) (*unstructured.Unstructured, error)
- CreateSelfSubjectAccessReview(ctx context.Context, reviewObj *authv1.SelfSubjectAccessReview) (*authv1.SelfSubjectAccessReview, error)
- GetKubeVirt(ctx context.Context, name string, namespace string) (*unstructured.Unstructured, error)
-}
-
-type client struct {
- kubernetesClient *kubernetes.Clientset
- dynamicClient dynamic.Interface
-}
-
-var (
- vmRes = schema.GroupVersionResource{
- Group: kubevirtapiv1.GroupVersion.Group,
- Version: kubevirtapiv1.GroupVersion.Version,
- Resource: "virtualmachines",
- }
-
- dvRes = schema.GroupVersionResource{
- Group: cdiv1.SchemeGroupVersion.Group,
- Version: cdiv1.SchemeGroupVersion.Version,
- Resource: "datavolumes",
- }
-)
-
-// LoadKubeConfigContent returns the kubeconfig file content
-func LoadKubeConfigContent() ([]byte, error) {
- loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
- configOverrides := &clientcmd.ConfigOverrides{}
- clientConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides)
- rawConfig, err := clientConfig.RawConfig()
- if err != nil {
- return nil, err
- }
-
- // Remove anything that is not related to the current context from the result rawConfig
- currentContextValue := rawConfig.Contexts[rawConfig.CurrentContext]
- if currentContextValue == nil {
- return nil, fmt.Errorf("currentContext is not included in rawConfig.Contexts")
- }
-
- rawConfig.Contexts = map[string]*clientcmdapi.Context{
- rawConfig.CurrentContext: currentContextValue,
- }
-
- if v, ok := rawConfig.Clusters[currentContextValue.Cluster]; ok {
- rawConfig.Clusters = map[string]*clientcmdapi.Cluster{
- currentContextValue.Cluster: v,
- }
- }
-
- if v, ok := rawConfig.AuthInfos[currentContextValue.AuthInfo]; ok {
- rawConfig.AuthInfos = map[string]*clientcmdapi.AuthInfo{
- currentContextValue.AuthInfo: v,
- }
- }
-
- return clientcmd.Write(rawConfig)
-}
-
-// NewClient creates our client wrapper object for the actual kubeVirt and kubernetes clients we use.
-func NewClient() (Client, error) {
- loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
- configOverrides := &clientcmd.ConfigOverrides{}
-
- kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides)
- restClientConfig, err := kubeConfig.ClientConfig()
- if err != nil {
- return nil, err
- }
-
- kubernetesClient, err := kubernetes.NewForConfig(restClientConfig)
- if err != nil {
- return nil, err
- }
- dynamicClient, err := dynamic.NewForConfig(restClientConfig)
- if err != nil {
- return nil, err
- }
-
- return &client{
- kubernetesClient: kubernetesClient,
- dynamicClient: dynamicClient,
- }, nil
-}
-
-func (c *client) GetVirtualMachine(ctx context.Context, namespace string, name string) (*kubevirtapiv1.VirtualMachine, error) {
- resp, err := c.getResource(ctx, namespace, name, vmRes)
- if err != nil {
- if apierrors.IsNotFound(err) {
- return nil, err
- }
- return nil, errors.Wrap(err, "failed to get VirtualMachine")
- }
- var vm kubevirtapiv1.VirtualMachine
- err = c.fromUnstructedToInterface(*resp, &vm, "VirtualMachine")
- return &vm, err
-}
-
-func (c *client) ListVirtualMachine(ctx context.Context, namespace string, opts metav1.ListOptions) (*kubevirtapiv1.VirtualMachineList, error) {
- resp, err := c.listResource(ctx, namespace, vmRes, opts)
- if err != nil {
- return nil, errors.Wrap(err, "failed to list VirtualMachine")
- }
- var vmList kubevirtapiv1.VirtualMachineList
- err = c.fromUnstructedListToInterface(*resp, &vmList, "VirtualMachineList")
- return &vmList, err
-}
-
-func (c *client) DeleteVirtualMachine(ctx context.Context, namespace string, name string) error {
- return c.deleteResource(ctx, namespace, name, vmRes)
-}
-
-func (c *client) GetDataVolume(ctx context.Context, namespace string, name string) (*cdiv1.DataVolume, error) {
- resp, err := c.getResource(ctx, namespace, name, dvRes)
- if err != nil {
- if apierrors.IsNotFound(err) {
- return nil, err
- }
- return nil, errors.Wrap(err, "failed to get DataVolume")
- }
- var dv cdiv1.DataVolume
- err = c.fromUnstructedToInterface(*resp, &dv, "DataVolume")
- return &dv, err
-}
-
-func (c *client) ListDataVolume(ctx context.Context, namespace string, opts metav1.ListOptions) (*cdiv1.DataVolumeList, error) {
- resp, err := c.listResource(ctx, namespace, dvRes, opts)
- if err != nil {
- return nil, errors.Wrap(err, "failed to list DataVolume")
- }
- var dvList cdiv1.DataVolumeList
- err = c.fromUnstructedListToInterface(*resp, &dvList, "DataVolumeList")
- return &dvList, err
-}
-
-func (c *client) DeleteDataVolume(ctx context.Context, namespace string, name string) error {
- return c.deleteResource(ctx, namespace, name, dvRes)
-}
-
-func (c *client) GetSecret(ctx context.Context, namespace string, name string) (*corev1.Secret, error) {
- return c.kubernetesClient.CoreV1().Secrets(namespace).Get(ctx, name, metav1.GetOptions{})
-}
-
-func (c *client) ListSecret(ctx context.Context, namespace string, opts metav1.ListOptions) (*corev1.SecretList, error) {
- return c.kubernetesClient.CoreV1().Secrets(namespace).List(ctx, opts)
-}
-
-func (c *client) DeleteSecret(ctx context.Context, namespace string, name string) error {
- return c.kubernetesClient.CoreV1().Secrets(namespace).Delete(ctx, name, metav1.DeleteOptions{})
-}
-
-func (c *client) GetNamespace(ctx context.Context, name string) (*corev1.Namespace, error) {
- return c.kubernetesClient.CoreV1().Namespaces().Get(ctx, name, metav1.GetOptions{})
-}
-
-func (c *client) GetStorageClass(ctx context.Context, name string) (*storagev1.StorageClass, error) {
- return c.kubernetesClient.StorageV1().StorageClasses().Get(ctx, name, metav1.GetOptions{})
-}
-
-func (c *client) GetNetworkAttachmentDefinition(ctx context.Context, name string, namespace string) (*unstructured.Unstructured, error) {
- nadRes := schema.GroupVersionResource{
- Group: nadv1.SchemeGroupVersion.Group,
- Version: nadv1.SchemeGroupVersion.Version,
- Resource: "network-attachment-definitions",
- }
- return c.getResource(ctx, namespace, name, nadRes)
-}
-
-func (c *client) CreateSelfSubjectAccessReview(ctx context.Context, reviewObj *authv1.SelfSubjectAccessReview) (*authv1.SelfSubjectAccessReview, error) {
- return c.kubernetesClient.AuthorizationV1().SelfSubjectAccessReviews().Create(ctx, reviewObj, metav1.CreateOptions{})
-}
-
-func (c *client) GetKubeVirt(ctx context.Context, name string, namespace string) (*unstructured.Unstructured, error) {
- resource := schema.GroupVersionResource{
- Group: "kubevirt.io",
- Version: "v1alpha3",
- Resource: "kubevirts",
- }
- return c.getResource(ctx, namespace, name, resource)
-}
-
-func (c *client) createResource(ctx context.Context, obj interface{}, namespace string, resource schema.GroupVersionResource) error {
- resultMap, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
- if err != nil {
- return errors.Wrapf(err, "failed to translate %s to Unstructed (for create operation)", resource.Resource)
- }
- input := unstructured.Unstructured{}
- input.SetUnstructuredContent(resultMap)
- resp, err := c.dynamicClient.Resource(resource).Namespace(namespace).Create(ctx, &input, metav1.CreateOptions{})
- if err != nil {
- return errors.Wrapf(err, "failed to create %s", resource.Resource)
- }
- unstructured := resp.UnstructuredContent()
- return runtime.DefaultUnstructuredConverter.FromUnstructured(unstructured, obj)
-}
-
-func (c *client) getResource(ctx context.Context, namespace string, name string, resource schema.GroupVersionResource) (*unstructured.Unstructured, error) {
- return c.dynamicClient.Resource(resource).Namespace(namespace).Get(ctx, name, metav1.GetOptions{})
-}
-
-func (c *client) deleteResource(ctx context.Context, namespace string, name string, resource schema.GroupVersionResource) error {
- return c.dynamicClient.Resource(resource).Namespace(namespace).Delete(ctx, name, metav1.DeleteOptions{})
-}
-
-func (c *client) listResource(ctx context.Context, namespace string, resource schema.GroupVersionResource, opts metav1.ListOptions) (*unstructured.UnstructuredList, error) {
- return c.dynamicClient.Resource(resource).Namespace(namespace).List(ctx, opts)
-}
-
-func (c *client) fromUnstructedToInterface(src unstructured.Unstructured, dst interface{}, interfaceType string) error {
- unstructured := src.UnstructuredContent()
- if err := runtime.DefaultUnstructuredConverter.FromUnstructured(unstructured, dst); err != nil {
- return errors.Wrapf(err, "failed to translate unstructed to %s", interfaceType)
- }
- return nil
-}
-
-func (c *client) fromUnstructedListToInterface(src unstructured.UnstructuredList, dst interface{}, interfaceType string) error {
- unstructured := src.UnstructuredContent()
- if err := runtime.DefaultUnstructuredConverter.FromUnstructured(unstructured, dst); err != nil {
- return errors.Wrapf(err, "failed to translate unstructed to %s", interfaceType)
- }
- return nil
-}
diff --git a/pkg/asset/installconfig/kubevirt/kubevirt.go b/pkg/asset/installconfig/kubevirt/kubevirt.go
deleted file mode 100644
index 64586c1d402..00000000000
--- a/pkg/asset/installconfig/kubevirt/kubevirt.go
+++ /dev/null
@@ -1,98 +0,0 @@
-package kubevirt
-
-import (
- "github.com/AlecAivazis/survey/v2"
-
- "github.com/openshift/installer/pkg/types/kubevirt"
-)
-
-// Platform collects kubevirt-specific configuration.
-func Platform() (*kubevirt.Platform, error) {
- var (
- namespace, apiVIP, ingressVIP, networkName string
- err error
- )
-
- if namespace, err = selectNamespace(); err != nil {
- return nil, err
- }
-
- if apiVIP, err = selectAPIVIP(); err != nil {
- return nil, err
- }
-
- if ingressVIP, err = selectIngressVIP(); err != nil {
- return nil, err
- }
-
- if networkName, err = selectNetworkName(); err != nil {
- return nil, err
- }
-
- return &kubevirt.Platform{
- Namespace: namespace,
- APIVIP: apiVIP,
- IngressVIP: ingressVIP,
- NetworkName: networkName,
- }, nil
-}
-
-func selectNamespace() (string, error) {
- var selectedNamespace string
-
- err := survey.Ask([]*survey.Question{
- {
- Prompt: &survey.Input{
- Message: "Namespace",
- Help: "The namespace, in the infracluster, where all the resources of the tenantcluster would be created.",
- },
- },
- }, &selectedNamespace)
-
- return selectedNamespace, err
-}
-
-func selectAPIVIP() (string, error) {
- var selectedAPIVIP string
-
- err := survey.Ask([]*survey.Question{
- {
- Prompt: &survey.Input{
- Message: "API VIP",
- Help: "The Virtual IP address used for external access to the OpenShift API.",
- },
- },
- }, &selectedAPIVIP)
-
- return selectedAPIVIP, err
-}
-
-func selectIngressVIP() (string, error) {
- var selectedIngressVIP string
-
- err := survey.Ask([]*survey.Question{
- {
- Prompt: &survey.Input{
- Message: "Ingress VIP",
- Help: "An external IP which routes to the default ingress controller.",
- },
- },
- }, &selectedIngressVIP)
-
- return selectedIngressVIP, err
-}
-
-func selectNetworkName() (string, error) {
- var selectedNetworkName string
-
- err := survey.Ask([]*survey.Question{
- {
- Prompt: &survey.Input{
- Message: "Network Name",
- Help: "The target network of all the network interfaces of the nodes.",
- },
- },
- }, &selectedNetworkName)
-
- return selectedNetworkName, err
-}
diff --git a/pkg/asset/installconfig/kubevirt/mock/client_generated.go b/pkg/asset/installconfig/kubevirt/mock/client_generated.go
deleted file mode 100644
index 3dbd01b9f51..00000000000
--- a/pkg/asset/installconfig/kubevirt/mock/client_generated.go
+++ /dev/null
@@ -1,248 +0,0 @@
-// Code generated by MockGen. DO NOT EDIT.
-// Source: ./client.go
-
-// Package mock is a generated GoMock package.
-package mock
-
-import (
- context "context"
- gomock "github.com/golang/mock/gomock"
- v1 "k8s.io/api/authorization/v1"
- v10 "k8s.io/api/core/v1"
- v11 "k8s.io/api/storage/v1"
- v12 "k8s.io/apimachinery/pkg/apis/meta/v1"
- unstructured "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
- v13 "kubevirt.io/client-go/api/v1"
- v1alpha1 "kubevirt.io/containerized-data-importer/pkg/apis/core/v1alpha1"
- reflect "reflect"
-)
-
-// MockClient is a mock of Client interface
-type MockClient struct {
- ctrl *gomock.Controller
- recorder *MockClientMockRecorder
-}
-
-// MockClientMockRecorder is the mock recorder for MockClient
-type MockClientMockRecorder struct {
- mock *MockClient
-}
-
-// NewMockClient creates a new mock instance
-func NewMockClient(ctrl *gomock.Controller) *MockClient {
- mock := &MockClient{ctrl: ctrl}
- mock.recorder = &MockClientMockRecorder{mock}
- return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use
-func (m *MockClient) EXPECT() *MockClientMockRecorder {
- return m.recorder
-}
-
-// GetVirtualMachine mocks base method
-func (m *MockClient) GetVirtualMachine(ctx context.Context, namespace, name string) (*v13.VirtualMachine, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "GetVirtualMachine", ctx, namespace, name)
- ret0, _ := ret[0].(*v13.VirtualMachine)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// GetVirtualMachine indicates an expected call of GetVirtualMachine
-func (mr *MockClientMockRecorder) GetVirtualMachine(ctx, namespace, name interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetVirtualMachine", reflect.TypeOf((*MockClient)(nil).GetVirtualMachine), ctx, namespace, name)
-}
-
-// ListVirtualMachine mocks base method
-func (m *MockClient) ListVirtualMachine(ctx context.Context, namespace string, opts v12.ListOptions) (*v13.VirtualMachineList, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "ListVirtualMachine", ctx, namespace, opts)
- ret0, _ := ret[0].(*v13.VirtualMachineList)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// ListVirtualMachine indicates an expected call of ListVirtualMachine
-func (mr *MockClientMockRecorder) ListVirtualMachine(ctx, namespace, opts interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListVirtualMachine", reflect.TypeOf((*MockClient)(nil).ListVirtualMachine), ctx, namespace, opts)
-}
-
-// DeleteVirtualMachine mocks base method
-func (m *MockClient) DeleteVirtualMachine(ctx context.Context, namespace, name string) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "DeleteVirtualMachine", ctx, namespace, name)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// DeleteVirtualMachine indicates an expected call of DeleteVirtualMachine
-func (mr *MockClientMockRecorder) DeleteVirtualMachine(ctx, namespace, name interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteVirtualMachine", reflect.TypeOf((*MockClient)(nil).DeleteVirtualMachine), ctx, namespace, name)
-}
-
-// GetDataVolume mocks base method
-func (m *MockClient) GetDataVolume(ctx context.Context, namespace, name string) (*v1alpha1.DataVolume, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "GetDataVolume", ctx, namespace, name)
- ret0, _ := ret[0].(*v1alpha1.DataVolume)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// GetDataVolume indicates an expected call of GetDataVolume
-func (mr *MockClientMockRecorder) GetDataVolume(ctx, namespace, name interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDataVolume", reflect.TypeOf((*MockClient)(nil).GetDataVolume), ctx, namespace, name)
-}
-
-// ListDataVolume mocks base method
-func (m *MockClient) ListDataVolume(ctx context.Context, namespace string, opts v12.ListOptions) (*v1alpha1.DataVolumeList, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "ListDataVolume", ctx, namespace, opts)
- ret0, _ := ret[0].(*v1alpha1.DataVolumeList)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// ListDataVolume indicates an expected call of ListDataVolume
-func (mr *MockClientMockRecorder) ListDataVolume(ctx, namespace, opts interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListDataVolume", reflect.TypeOf((*MockClient)(nil).ListDataVolume), ctx, namespace, opts)
-}
-
-// DeleteDataVolume mocks base method
-func (m *MockClient) DeleteDataVolume(ctx context.Context, namespace, name string) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "DeleteDataVolume", ctx, namespace, name)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// DeleteDataVolume indicates an expected call of DeleteDataVolume
-func (mr *MockClientMockRecorder) DeleteDataVolume(ctx, namespace, name interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteDataVolume", reflect.TypeOf((*MockClient)(nil).DeleteDataVolume), ctx, namespace, name)
-}
-
-// GetSecret mocks base method
-func (m *MockClient) GetSecret(ctx context.Context, namespace, name string) (*v10.Secret, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "GetSecret", ctx, namespace, name)
- ret0, _ := ret[0].(*v10.Secret)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// GetSecret indicates an expected call of GetSecret
-func (mr *MockClientMockRecorder) GetSecret(ctx, namespace, name interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSecret", reflect.TypeOf((*MockClient)(nil).GetSecret), ctx, namespace, name)
-}
-
-// ListSecret mocks base method
-func (m *MockClient) ListSecret(ctx context.Context, namespace string, opts v12.ListOptions) (*v10.SecretList, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "ListSecret", ctx, namespace, opts)
- ret0, _ := ret[0].(*v10.SecretList)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// ListSecret indicates an expected call of ListSecret
-func (mr *MockClientMockRecorder) ListSecret(ctx, namespace, opts interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSecret", reflect.TypeOf((*MockClient)(nil).ListSecret), ctx, namespace, opts)
-}
-
-// DeleteSecret mocks base method
-func (m *MockClient) DeleteSecret(ctx context.Context, namespace, name string) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "DeleteSecret", ctx, namespace, name)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// DeleteSecret indicates an expected call of DeleteSecret
-func (mr *MockClientMockRecorder) DeleteSecret(ctx, namespace, name interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteSecret", reflect.TypeOf((*MockClient)(nil).DeleteSecret), ctx, namespace, name)
-}
-
-// GetNamespace mocks base method
-func (m *MockClient) GetNamespace(ctx context.Context, name string) (*v10.Namespace, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "GetNamespace", ctx, name)
- ret0, _ := ret[0].(*v10.Namespace)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// GetNamespace indicates an expected call of GetNamespace
-func (mr *MockClientMockRecorder) GetNamespace(ctx, name interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNamespace", reflect.TypeOf((*MockClient)(nil).GetNamespace), ctx, name)
-}
-
-// GetStorageClass mocks base method
-func (m *MockClient) GetStorageClass(ctx context.Context, name string) (*v11.StorageClass, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "GetStorageClass", ctx, name)
- ret0, _ := ret[0].(*v11.StorageClass)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// GetStorageClass indicates an expected call of GetStorageClass
-func (mr *MockClientMockRecorder) GetStorageClass(ctx, name interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetStorageClass", reflect.TypeOf((*MockClient)(nil).GetStorageClass), ctx, name)
-}
-
-// GetNetworkAttachmentDefinition mocks base method
-func (m *MockClient) GetNetworkAttachmentDefinition(ctx context.Context, name, namespace string) (*unstructured.Unstructured, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "GetNetworkAttachmentDefinition", ctx, name, namespace)
- ret0, _ := ret[0].(*unstructured.Unstructured)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// GetNetworkAttachmentDefinition indicates an expected call of GetNetworkAttachmentDefinition
-func (mr *MockClientMockRecorder) GetNetworkAttachmentDefinition(ctx, name, namespace interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNetworkAttachmentDefinition", reflect.TypeOf((*MockClient)(nil).GetNetworkAttachmentDefinition), ctx, name, namespace)
-}
-
-// CreateSelfSubjectAccessReview mocks base method
-func (m *MockClient) CreateSelfSubjectAccessReview(ctx context.Context, reviewObj *v1.SelfSubjectAccessReview) (*v1.SelfSubjectAccessReview, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "CreateSelfSubjectAccessReview", ctx, reviewObj)
- ret0, _ := ret[0].(*v1.SelfSubjectAccessReview)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// CreateSelfSubjectAccessReview indicates an expected call of CreateSelfSubjectAccessReview
-func (mr *MockClientMockRecorder) CreateSelfSubjectAccessReview(ctx, reviewObj interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateSelfSubjectAccessReview", reflect.TypeOf((*MockClient)(nil).CreateSelfSubjectAccessReview), ctx, reviewObj)
-}
-
-// GetKubeVirt mocks base method
-func (m *MockClient) GetKubeVirt(ctx context.Context, name, namespace string) (*unstructured.Unstructured, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "GetKubeVirt", ctx, name, namespace)
- ret0, _ := ret[0].(*unstructured.Unstructured)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// GetKubeVirt indicates an expected call of GetKubeVirt
-func (mr *MockClientMockRecorder) GetKubeVirt(ctx, name, namespace interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetKubeVirt", reflect.TypeOf((*MockClient)(nil).GetKubeVirt), ctx, name, namespace)
-}
diff --git a/pkg/asset/installconfig/kubevirt/validation.go b/pkg/asset/installconfig/kubevirt/validation.go
deleted file mode 100644
index ef98db931e6..00000000000
--- a/pkg/asset/installconfig/kubevirt/validation.go
+++ /dev/null
@@ -1,368 +0,0 @@
-package kubevirt
-
-import (
- "context"
- "fmt"
- "strings"
-
- "github.com/openshift/installer/pkg/types"
- authv1 "k8s.io/api/authorization/v1"
- unstructured "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
- "k8s.io/apimachinery/pkg/util/validation/field"
-)
-
-// Validate executes kubevirt specific validation
-func Validate(ic *types.InstallConfig, client Client) error {
- allErrs := field.ErrorList{}
- fldPath := field.NewPath("platform", "kubevirt")
- kubevirtPlatform := ic.Platform.Kubevirt
-
- allErrs = append(allErrs, validateNamespace(kubevirtPlatform.Namespace, client, fldPath.Child("namespace"))...)
- allErrs = append(allErrs, validateStorageClassExistsInInfraCluster(kubevirtPlatform.StorageClass, client, fldPath.Child("storageClass"))...)
- allErrs = append(allErrs, validateNetworkAttachmentDefinitionExistsInNamespace(kubevirtPlatform.NetworkName, kubevirtPlatform.Namespace, client, fldPath.Child("networkName"))...)
-
- return allErrs.ToAggregate()
-}
-
-// ValidatePermissions tests that the current user has the required permissions
-// Some permissions are required for the installation
-// In addition, the current user is used for accessing the kubevirt/platfrom cluster from tenant cluster. E.g. list VMIs
-func ValidatePermissions(client Client, ic *types.InstallConfig) error {
- // Prepare requests for permissions check
- reviewObjs := createReviewObjs(ic.Platform.Kubevirt.Namespace)
-
- // Collection of missing permissions
- var notAllowedObjs []*authv1.SelfSubjectAccessReview
-
- // Test each permission
- for _, reviewObj := range reviewObjs {
- reviewObjPointer, err := client.CreateSelfSubjectAccessReview(context.Background(), &reviewObj)
- if err != nil {
- return err
- }
-
- if !reviewObjPointer.Status.Allowed {
- notAllowedObjs = append(notAllowedObjs, reviewObjPointer)
- }
- }
-
- // Put all missing permissions in one error message
- if len(notAllowedObjs) > 0 {
- var notAllowed []string
- for _, obj := range notAllowedObjs {
- notAllowed = append(notAllowed, fmt.Sprintf("%+v", *obj.Spec.ResourceAttributes))
- }
-
- return fmt.Errorf("the user is missing the following permissions: %s", strings.Join(notAllowed, ", "))
- }
-
- return nil
-}
-
-// ValidateForProvisioning is called by PlatformProvisionCheck
-func ValidateForProvisioning(client Client) error {
- kvUnstructured, err := client.GetKubeVirt(context.Background(), "kubevirt-kubevirt-hyperconverged", "openshift-cnv")
- if err != nil {
- return fmt.Errorf("failed to get resource openshift-cnv/kubevirt-kubevirt-hyperconverged, with error: %v", err)
- }
-
- fgSlice, found, err := unstructured.NestedStringSlice(kvUnstructured.Object, "spec", "configuration", "developerConfiguration", "featureGates")
- if err != nil {
- return fmt.Errorf("failed to read list of enabled feature gates 'spec.configuration.developerConfiguration.featureGates' from KubeVirt resource openshift-cnv/kubevirt-kubevirt-hyperconverged, with error: %v", err)
- }
-
- if !found || !contains(fgSlice, "HotplugVolumes") {
- return fmt.Errorf("feature gate hotplugVolumes is either missing or not set to true. Review resource openshift-cnv/kubevirt-hyperconverged. Follow Kubevirt CSI driver documentation for setting the feature gate (https://github.com/openshift/kubevirt-csi-driver)")
- }
-
- return nil
-}
-
-func validateStorageClassExistsInInfraCluster(name string, client Client, fieldPath *field.Path) field.ErrorList {
- allErrs := field.ErrorList{}
-
- // StorageClass can be empty string, in this case will use default Storage Class
- // Therefore, make the call to the cluster only if its not empty string
- if name == "" {
- return allErrs
- }
- if _, err := client.GetStorageClass(context.Background(), name); err != nil {
- allErrs = append(
- allErrs,
- field.Invalid(
- fieldPath,
- name,
- fmt.Sprintf("failed to get StorageClass from InfraCluster, with error: %v", err),
- ),
- )
- }
-
- return allErrs
-}
-
-// validateNetworkAttachmentDefinitionExistsInNamespace validate the following:
-// 1. The namespace exists
-// 2. The network-attachment-definition exists
-func validateNetworkAttachmentDefinitionExistsInNamespace(name string, namespace string, client Client, fieldPath *field.Path) field.ErrorList {
- allErrs := field.ErrorList{}
-
- if _, err := client.GetNetworkAttachmentDefinition(context.Background(), name, namespace); err != nil {
- allErrs = append(
- allErrs,
- field.Invalid(
- fieldPath,
- name,
- fmt.Sprintf("failed to get network-attachment-definition from InfraCluster, with error: %v", err),
- ),
- )
- }
-
- return allErrs
-}
-
-func validateNamespace(namespace string, client Client, fieldPath *field.Path) field.ErrorList {
- allErrs := field.ErrorList{}
-
- ns, err := client.GetNamespace(context.Background(), namespace)
- if err != nil {
- allErrs = append(
- allErrs,
- field.Invalid(
- fieldPath,
- namespace,
- fmt.Sprintf("failed to get namepsace, with error: %v", err),
- ),
- )
- return allErrs
- }
- labelRequiredKey := "mutatevirtualmachines.kubemacpool.io"
- labelRequiredVal := "allocate"
- labelVal, ok := ns.Labels[labelRequiredKey]
- if !ok || labelVal != labelRequiredVal {
- allErrs = append(
- allErrs,
- field.Invalid(
- fieldPath,
- namespace,
- fmt.Sprintf("KubeMacPool component is not enabled for the namespace, the namespace must have label \"%s: %s\"", labelRequiredKey, labelRequiredVal),
- ),
- )
- }
-
- return allErrs
-}
-
-// createReviewObjs creates requests for testing user permissions
-func createReviewObjs(namespace string) []authv1.SelfSubjectAccessReview {
- return []authv1.SelfSubjectAccessReview{
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: "openshift-cnv",
- Group: "hco.kubevirt.io",
- Resource: "hyperconvergeds",
- Verb: "get",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "",
- Resource: "secrets",
- Verb: "get",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "",
- Resource: "secrets",
- Verb: "list",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "",
- Resource: "secrets",
- Verb: "create",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "",
- Resource: "secrets",
- Verb: "delete",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "",
- Resource: "namespaces",
- Verb: "get",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "kubevirt.io",
- Resource: "virtualmachines",
- Verb: "get",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "kubevirt.io",
- Resource: "virtualmachines",
- Verb: "list",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "kubevirt.io",
- Resource: "virtualmachines",
- Verb: "create",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "kubevirt.io",
- Resource: "virtualmachines",
- Verb: "delete",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "kubevirt.io",
- Resource: "virtualmachines",
- Verb: "update",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "kubevirt.io",
- Resource: "virtualmachineinstances",
- Verb: "get",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "kubevirt.io",
- Resource: "virtualmachineinstances",
- Verb: "list",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "cdi.kubevirt.io",
- Resource: "datavolumes",
- Verb: "get",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "cdi.kubevirt.io",
- Resource: "datavolumes",
- Verb: "list",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "cdi.kubevirt.io",
- Resource: "datavolumes",
- Verb: "create",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "cdi.kubevirt.io",
- Resource: "datavolumes",
- Verb: "delete",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "k8s.cni.cncf.io",
- Resource: "network-attachment-definitions",
- Verb: "get",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "subresources.kubevirt.io",
- Resource: "virtualmachineinstances/addvolume",
- Verb: "update",
- },
- },
- },
- {
- Spec: authv1.SelfSubjectAccessReviewSpec{
- ResourceAttributes: &authv1.ResourceAttributes{
- Namespace: namespace,
- Group: "subresources.kubevirt.io",
- Resource: "virtualmachineinstances/removevolume",
- Verb: "update",
- },
- },
- },
- }
-}
-
-func contains(slice []string, target string) bool {
- for _, item := range slice {
- if item == target {
- return true
- }
- }
- return false
-}
diff --git a/pkg/asset/installconfig/kubevirt/validation_test.go b/pkg/asset/installconfig/kubevirt/validation_test.go
deleted file mode 100644
index 0867d004eb3..00000000000
--- a/pkg/asset/installconfig/kubevirt/validation_test.go
+++ /dev/null
@@ -1,338 +0,0 @@
-package kubevirt
-
-import (
- "context"
- "fmt"
- "testing"
-
- "github.com/golang/mock/gomock"
- "github.com/stretchr/testify/assert"
-
- "github.com/openshift/installer/pkg/asset/installconfig/kubevirt/mock"
- "github.com/openshift/installer/pkg/ipnet"
- "github.com/openshift/installer/pkg/types"
- "github.com/openshift/installer/pkg/types/kubevirt"
- authv1 "k8s.io/api/authorization/v1"
- corev1 "k8s.io/api/core/v1"
- "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
-)
-
-var (
- validNamespace = "valid-namespace"
- validStorageClass = "valid-storage-class"
- validNetworkName = "valid-network-name"
- validAPIVIP = "192.168.123.15"
- validIngressVIP = "192.168.123.20"
- validAccessMode = "valid-access-mode"
- validMachineCIDR = "192.168.123.0/24"
- invalidKubeconfigPath = "invalid-kubeconfig-path"
- invalidNamespace = "invalid-namespace"
- invalidStorageClass = "invalid-storage-class"
- invalidNetworkName = "invalid-network-name"
- invalidAPIVIP = "invalid-api-vip"
- invalidIngressVIP = "invalid-ingress-vip"
- invalidAccessMode = "invalid-access-mode"
- invalidMachineCIDR = "10.0.0.0/16"
- namespaceStruct = &corev1.Namespace{}
- kubeMacPoolLabels = map[string]string{"mutatevirtualmachines.kubemacpool.io": "allocate"}
- kvNamespace = "openshift-cnv"
- kvCrName = "kubevirt-kubevirt-hyperconverged"
- kvValidCr = unstructured.Unstructured{}
- kvInvalidCr = unstructured.Unstructured{}
-)
-
-func validInstallConfig() *types.InstallConfig {
- return &types.InstallConfig{
- Networking: &types.Networking{
- MachineNetwork: []types.MachineNetworkEntry{
- {CIDR: *ipnet.MustParseCIDR(invalidMachineCIDR)},
- {CIDR: *ipnet.MustParseCIDR(validMachineCIDR)},
- {CIDR: *ipnet.MustParseCIDR(invalidMachineCIDR)},
- },
- },
- Platform: types.Platform{
- Kubevirt: &kubevirt.Platform{
- Namespace: validNamespace,
- StorageClass: validStorageClass,
- NetworkName: validNetworkName,
- APIVIP: validAPIVIP,
- IngressVIP: validIngressVIP,
- PersistentVolumeAccessMode: validAccessMode,
- },
- },
- }
-}
-
-func TestKubevirtInstallConfigValidation(t *testing.T) {
- cases := []struct {
- name string
- edit func(ic *types.InstallConfig)
- expectedError bool
- expectedErrMsg string
- expectClient func(kubevirtClient *mock.MockClient)
- }{
- {
- name: "valid",
- edit: nil,
- expectedError: false,
- expectedErrMsg: "",
- expectClient: func(kubevirtClient *mock.MockClient) {
- kubevirtClient.EXPECT().GetNetworkAttachmentDefinition(gomock.Any(), validNetworkName, validNamespace).Return(nil, nil).AnyTimes()
- kubevirtClient.EXPECT().GetStorageClass(gomock.Any(), validStorageClass).Return(nil, nil).AnyTimes()
- namespaceStruct.Labels = kubeMacPoolLabels
- kubevirtClient.EXPECT().GetNamespace(gomock.Any(), validNamespace).Return(namespaceStruct, nil).AnyTimes()
- },
- },
- {
- name: "valid one machine network",
- edit: func(ic *types.InstallConfig) {
- ic.Networking.MachineNetwork = []types.MachineNetworkEntry{
- {CIDR: *ipnet.MustParseCIDR(validMachineCIDR)},
- }
- },
- expectedError: false,
- expectedErrMsg: "",
- expectClient: func(kubevirtClient *mock.MockClient) {
- kubevirtClient.EXPECT().GetNetworkAttachmentDefinition(gomock.Any(), validNetworkName, validNamespace).Return(nil, nil).AnyTimes()
- kubevirtClient.EXPECT().GetStorageClass(gomock.Any(), validStorageClass).Return(nil, nil).AnyTimes()
- namespaceStruct.Labels = kubeMacPoolLabels
- kubevirtClient.EXPECT().GetNamespace(gomock.Any(), validNamespace).Return(namespaceStruct, nil).AnyTimes()
- },
- },
- {
- name: "invalid storage class",
- edit: func(ic *types.InstallConfig) { ic.Platform.Kubevirt.StorageClass = invalidStorageClass },
- expectedError: true,
- expectedErrMsg: "platform.kubevirt.storageClass: Invalid value: \"invalid-storage-class\": failed to get StorageClass from InfraCluster, with error: test",
- expectClient: func(kubevirtClient *mock.MockClient) {
- kubevirtClient.EXPECT().GetNetworkAttachmentDefinition(gomock.Any(), validNetworkName, validNamespace).Return(nil, nil).AnyTimes()
- kubevirtClient.EXPECT().GetStorageClass(gomock.Any(), invalidStorageClass).Return(nil, fmt.Errorf("test")).AnyTimes()
- namespaceStruct.Labels = kubeMacPoolLabels
- kubevirtClient.EXPECT().GetNamespace(gomock.Any(), validNamespace).Return(namespaceStruct, nil).AnyTimes()
- },
- },
- {
- name: "invalid network name",
- edit: func(ic *types.InstallConfig) { ic.Platform.Kubevirt.NetworkName = invalidNetworkName },
- expectedError: true,
- expectedErrMsg: "platform.kubevirt.networkName: Invalid value: \"invalid-network-name\": failed to get network-attachment-definition from InfraCluster, with error: test",
- expectClient: func(kubevirtClient *mock.MockClient) {
- kubevirtClient.EXPECT().GetNetworkAttachmentDefinition(gomock.Any(), invalidNetworkName, validNamespace).Return(nil, fmt.Errorf("test")).AnyTimes()
- kubevirtClient.EXPECT().GetStorageClass(gomock.Any(), validStorageClass).Return(nil, nil).AnyTimes()
- namespaceStruct.Labels = kubeMacPoolLabels
- kubevirtClient.EXPECT().GetNamespace(gomock.Any(), validNamespace).Return(namespaceStruct, nil).AnyTimes()
- },
- },
- {
- name: "invalid kubemacpool namespace not found",
- edit: nil,
- expectedError: true,
- expectedErrMsg: "platform.kubevirt.namespace: Invalid value: \"valid-namespace\": failed to get namepsace, with error: test",
- expectClient: func(kubevirtClient *mock.MockClient) {
- kubevirtClient.EXPECT().GetNetworkAttachmentDefinition(gomock.Any(), validNetworkName, validNamespace).Return(nil, nil).AnyTimes()
- kubevirtClient.EXPECT().GetStorageClass(gomock.Any(), validStorageClass).Return(nil, nil).AnyTimes()
- namespaceStruct.Labels = kubeMacPoolLabels
- kubevirtClient.EXPECT().GetNamespace(gomock.Any(), validNamespace).Return(nil, fmt.Errorf("test")).AnyTimes()
- },
- },
- {
- name: "invalid kubemacpool Labels nil",
- edit: nil,
- expectedError: true,
- expectedErrMsg: "platform.kubevirt.namespace: Invalid value: \"valid-namespace\": KubeMacPool component is not enabled for the namespace, the namespace must have label \"mutatevirtualmachines.kubemacpool.io: allocate\"",
- expectClient: func(kubevirtClient *mock.MockClient) {
- kubevirtClient.EXPECT().GetNetworkAttachmentDefinition(gomock.Any(), validNetworkName, validNamespace).Return(nil, nil).AnyTimes()
- kubevirtClient.EXPECT().GetStorageClass(gomock.Any(), validStorageClass).Return(nil, nil).AnyTimes()
- namespaceStruct.Labels = nil
- kubevirtClient.EXPECT().GetNamespace(gomock.Any(), validNamespace).Return(namespaceStruct, nil).AnyTimes()
- },
- },
- {
- name: "invalid kubemacpool Labels empty",
- edit: nil,
- expectedError: true,
- expectedErrMsg: "platform.kubevirt.namespace: Invalid value: \"valid-namespace\": KubeMacPool component is not enabled for the namespace, the namespace must have label \"mutatevirtualmachines.kubemacpool.io: allocate\"",
- expectClient: func(kubevirtClient *mock.MockClient) {
- kubevirtClient.EXPECT().GetNetworkAttachmentDefinition(gomock.Any(), validNetworkName, validNamespace).Return(nil, nil).AnyTimes()
- kubevirtClient.EXPECT().GetStorageClass(gomock.Any(), validStorageClass).Return(nil, nil).AnyTimes()
- namespaceStruct.Labels = map[string]string{}
- kubevirtClient.EXPECT().GetNamespace(gomock.Any(), validNamespace).Return(namespaceStruct, nil).AnyTimes()
- },
- },
- {
- name: "invalid kubemacpool wrong label val",
- edit: nil,
- expectedError: true,
- expectedErrMsg: "platform.kubevirt.namespace: Invalid value: \"valid-namespace\": KubeMacPool component is not enabled for the namespace, the namespace must have label \"mutatevirtualmachines.kubemacpool.io: allocate\"",
- expectClient: func(kubevirtClient *mock.MockClient) {
- kubevirtClient.EXPECT().GetNetworkAttachmentDefinition(gomock.Any(), validNetworkName, validNamespace).Return(nil, nil).AnyTimes()
- kubevirtClient.EXPECT().GetStorageClass(gomock.Any(), validStorageClass).Return(nil, nil).AnyTimes()
- namespaceStruct.Labels = map[string]string{"mutatevirtualmachines.kubemacpool.io": "wrong value"}
- kubevirtClient.EXPECT().GetNamespace(gomock.Any(), validNamespace).Return(namespaceStruct, nil).AnyTimes()
- },
- },
- }
-
- mockCtrl := gomock.NewController(t)
- defer mockCtrl.Finish()
-
- for _, tc := range cases {
- t.Run(tc.name, func(t *testing.T) {
- installConfig := validInstallConfig()
- if tc.edit != nil {
- tc.edit(installConfig)
- }
-
- kubevirtClient := mock.NewMockClient(mockCtrl)
- if tc.expectClient != nil {
- tc.expectClient(kubevirtClient)
- }
-
- errs := Validate(installConfig, kubevirtClient)
- if tc.expectedError {
- assert.Regexp(t, tc.expectedErrMsg, errs)
- } else {
- assert.Empty(t, errs)
- }
- })
- }
-}
-
-func TestValidatePermissions(t *testing.T) {
- mockCtrl := gomock.NewController(t)
- defer mockCtrl.Finish()
-
- t.Run("All permissions are set", func(t *testing.T) {
- client := mock.NewMockClient(mockCtrl)
- client.EXPECT().CreateSelfSubjectAccessReview(gomock.Any(), gomock.Any()).DoAndReturn(
- func(ctx context.Context, reviewObj *authv1.SelfSubjectAccessReview) (*authv1.SelfSubjectAccessReview, error) {
- reviewObj.Status.Allowed = true
- return reviewObj, nil
- },
- ).AnyTimes()
- err := ValidatePermissions(client, validInstallConfig())
- assert.Nil(t, err)
- })
-
- t.Run("Get VMI permission is missing", func(t *testing.T) {
- client := mock.NewMockClient(mockCtrl)
- client.EXPECT().CreateSelfSubjectAccessReview(gomock.Any(), gomock.Any()).DoAndReturn(
- func(ctx context.Context, reviewObj *authv1.SelfSubjectAccessReview) (*authv1.SelfSubjectAccessReview, error) {
- if reviewObj.Spec.ResourceAttributes.Resource == "virtualmachineinstances" &&
- reviewObj.Spec.ResourceAttributes.Verb == "get" {
- reviewObj.Status.Allowed = false
- } else {
- reviewObj.Status.Allowed = true
- }
-
- return reviewObj, nil
- },
- ).AnyTimes()
- err := ValidatePermissions(client, validInstallConfig())
- assert.NotNil(t, err)
- })
-}
-
-func TestValidationForProvisioning(t *testing.T) {
- createKvObjects()
-
- mockCtrl := gomock.NewController(t)
- defer mockCtrl.Finish()
-
- // HotplugVolumes feature is always enabled by HCO in version 4.8.0.
- // For backward compitability, we are now checking that kubevirt CR is configured
- // with hotPlugVolumes feature gate.
- t.Run("Missing Kubevirt CR", func(t *testing.T) {
- client := mock.NewMockClient(mockCtrl)
- client.EXPECT().GetKubeVirt(gomock.Any(), kvCrName, kvNamespace).Return(nil, fmt.Errorf("test")).AnyTimes()
- err := ValidateForProvisioning(client)
- assert.NotNil(t, err)
- })
-
- t.Run("HotplugVolumes feature gate is NOT set on KubeVirt CR", func(t *testing.T) {
- client := mock.NewMockClient(mockCtrl)
- client.EXPECT().GetKubeVirt(gomock.Any(), kvCrName, kvNamespace).Return(&kvInvalidCr, nil).AnyTimes()
- err := ValidateForProvisioning(client)
- assert.NotNil(t, err)
- })
-
- t.Run("HotplugVolumes feature gate is set on KubeVirt CR", func(t *testing.T) {
- client := mock.NewMockClient(mockCtrl)
- client.EXPECT().GetKubeVirt(gomock.Any(), kvCrName, kvNamespace).Return(&kvValidCr, nil).AnyTimes()
- err := ValidateForProvisioning(client)
- assert.Nil(t, err)
- })
-}
-
-func createKvObjects() {
- kvValidCrJSON := `{
- "apiVersion": "kubevirt.io/v1",
- "kind": "KubeVirt",
- "metadata": {
- "name": "kubevirt-kubevirt-hyperconverged",
- "namespace": "openshift-cnv"
- },
- "spec": {
- "configuration": {
- "developerConfiguration": {
- "featureGates": [
- "DataVolumes",
- "SRIOV",
- "LiveMigration",
- "CPUManager",
- "CPUNodeDiscovery",
- "Snapshot",
- "HotplugVolumes",
- "GPU",
- "HostDevices",
- "WithHostModelCPU",
- "HypervStrictCheck"
- ]
- }
- },
- "customizeComponents": {},
- "infra": {},
- "uninstallStrategy": "BlockUninstallIfWorkloadsExist",
- "workloadUpdateStrategy": {}
- }
- }`
-
- kvInvalidCrJSON := `{
- "apiVersion": "kubevirt.io/v1",
- "kind": "KubeVirt",
- "metadata": {
- "name": "kubevirt-kubevirt-hyperconverged",
- "namespace": "openshift-cnv"
- },
- "spec": {
- "configuration": {
- "developerConfiguration": {
- "featureGates": [
- "DataVolumes",
- "SRIOV",
- "LiveMigration",
- "CPUManager",
- "CPUNodeDiscovery",
- "Snapshot",
- "GPU",
- "HostDevices",
- "WithHostModelCPU",
- "HypervStrictCheck"
- ]
- }
- },
- "customizeComponents": {},
- "infra": {},
- "uninstallStrategy": "BlockUninstallIfWorkloadsExist",
- "workloadUpdateStrategy": {}
- }
- }`
- err := kvValidCr.UnmarshalJSON([]byte(kvValidCrJSON))
- if err != nil {
- panic(err)
- }
- err = kvInvalidCr.UnmarshalJSON([]byte(kvInvalidCrJSON))
- if err != nil {
- panic(err)
- }
-}
diff --git a/pkg/asset/installconfig/networking.go b/pkg/asset/installconfig/networking.go
index e035ca92909..510646fc78b 100644
--- a/pkg/asset/installconfig/networking.go
+++ b/pkg/asset/installconfig/networking.go
@@ -4,9 +4,7 @@ import (
survey "github.com/AlecAivazis/survey/v2"
"github.com/openshift/installer/pkg/asset"
- "github.com/openshift/installer/pkg/ipnet"
"github.com/openshift/installer/pkg/types"
- "github.com/openshift/installer/pkg/types/kubevirt"
)
type networking struct {
@@ -26,21 +24,6 @@ func (a *networking) Dependencies() []asset.Asset {
func (a *networking) Generate(parents asset.Parents) error {
platform := &platform{}
parents.Get(platform)
-
- switch platform.CurrentName() {
- case kubevirt.Name:
- selectedCIDR, err := selectMachineNetworkCIDR()
- if err != nil {
- return err
- }
- CIDR, err := ipnet.ParseCIDR(selectedCIDR)
- if err != nil {
- return err
- }
- a.machineNetwork = []types.MachineNetworkEntry{
- {CIDR: *CIDR},
- }
- }
return nil
}
diff --git a/pkg/asset/installconfig/platform.go b/pkg/asset/installconfig/platform.go
index 322bc6bfc3a..9ae0a27096b 100644
--- a/pkg/asset/installconfig/platform.go
+++ b/pkg/asset/installconfig/platform.go
@@ -14,7 +14,6 @@ import (
baremetalconfig "github.com/openshift/installer/pkg/asset/installconfig/baremetal"
gcpconfig "github.com/openshift/installer/pkg/asset/installconfig/gcp"
ibmcloudconfig "github.com/openshift/installer/pkg/asset/installconfig/ibmcloud"
- kubevirtconfig "github.com/openshift/installer/pkg/asset/installconfig/kubevirt"
libvirtconfig "github.com/openshift/installer/pkg/asset/installconfig/libvirt"
openstackconfig "github.com/openshift/installer/pkg/asset/installconfig/openstack"
ovirtconfig "github.com/openshift/installer/pkg/asset/installconfig/ovirt"
@@ -25,7 +24,6 @@ import (
"github.com/openshift/installer/pkg/types/baremetal"
"github.com/openshift/installer/pkg/types/gcp"
"github.com/openshift/installer/pkg/types/ibmcloud"
- "github.com/openshift/installer/pkg/types/kubevirt"
"github.com/openshift/installer/pkg/types/libvirt"
"github.com/openshift/installer/pkg/types/none"
"github.com/openshift/installer/pkg/types/openstack"
@@ -101,11 +99,6 @@ func (a *platform) Generate(asset.Parents) error {
if err != nil {
return err
}
- case kubevirt.Name:
- a.Kubevirt, err = kubevirtconfig.Platform()
- if err != nil {
- return err
- }
default:
return fmt.Errorf("unknown platform type %q", platform)
}
diff --git a/pkg/asset/installconfig/platformcredscheck.go b/pkg/asset/installconfig/platformcredscheck.go
index 62a58b5913d..919dc00abd7 100644
--- a/pkg/asset/installconfig/platformcredscheck.go
+++ b/pkg/asset/installconfig/platformcredscheck.go
@@ -9,7 +9,6 @@ import (
"github.com/openshift/installer/pkg/asset"
gcpconfig "github.com/openshift/installer/pkg/asset/installconfig/gcp"
ibmcloudconfig "github.com/openshift/installer/pkg/asset/installconfig/ibmcloud"
- kubevirtconfig "github.com/openshift/installer/pkg/asset/installconfig/kubevirt"
openstackconfig "github.com/openshift/installer/pkg/asset/installconfig/openstack"
ovirtconfig "github.com/openshift/installer/pkg/asset/installconfig/ovirt"
"github.com/openshift/installer/pkg/types/aws"
@@ -17,13 +16,11 @@ import (
"github.com/openshift/installer/pkg/types/baremetal"
"github.com/openshift/installer/pkg/types/gcp"
"github.com/openshift/installer/pkg/types/ibmcloud"
- "github.com/openshift/installer/pkg/types/kubevirt"
"github.com/openshift/installer/pkg/types/libvirt"
"github.com/openshift/installer/pkg/types/none"
"github.com/openshift/installer/pkg/types/openstack"
"github.com/openshift/installer/pkg/types/ovirt"
"github.com/openshift/installer/pkg/types/vsphere"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// PlatformCredsCheck is an asset that checks the platform credentials, asks for them or errors out if invalid
@@ -85,15 +82,6 @@ func (a *PlatformCredsCheck) Generate(dependencies asset.Parents) error {
if err != nil {
return errors.Wrap(err, "testing Engine connection")
}
- case kubevirt.Name:
- client, err := kubevirtconfig.NewClient()
- if err != nil {
- return errors.Wrap(err, "creating KubeVirt client")
- }
- // Test the connection to InfraCluster by calling ListVM API
- if _, err = client.ListVirtualMachine(context.Background(), ic.Config.Platform.Kubevirt.Namespace, metav1.ListOptions{}); err != nil {
- return errors.Wrap(err, "testing KubeVirt connection")
- }
default:
err = fmt.Errorf("unknown platform type %q", platform)
}
diff --git a/pkg/asset/installconfig/platformpermscheck.go b/pkg/asset/installconfig/platformpermscheck.go
index 14242115b5a..f8953c04ee8 100644
--- a/pkg/asset/installconfig/platformpermscheck.go
+++ b/pkg/asset/installconfig/platformpermscheck.go
@@ -9,13 +9,11 @@ import (
"github.com/openshift/installer/pkg/asset"
awsconfig "github.com/openshift/installer/pkg/asset/installconfig/aws"
gcpconfig "github.com/openshift/installer/pkg/asset/installconfig/gcp"
- kubevirtconfig "github.com/openshift/installer/pkg/asset/installconfig/kubevirt"
"github.com/openshift/installer/pkg/types/aws"
"github.com/openshift/installer/pkg/types/azure"
"github.com/openshift/installer/pkg/types/baremetal"
"github.com/openshift/installer/pkg/types/gcp"
"github.com/openshift/installer/pkg/types/ibmcloud"
- "github.com/openshift/installer/pkg/types/kubevirt"
"github.com/openshift/installer/pkg/types/libvirt"
"github.com/openshift/installer/pkg/types/none"
"github.com/openshift/installer/pkg/types/openstack"
@@ -88,16 +86,6 @@ func (a *PlatformPermsCheck) Generate(dependencies asset.Parents) error {
}
case ibmcloud.Name:
// TODO: IBM[#90]: platformpermscheck
- case kubevirt.Name:
- client, err := kubevirtconfig.NewClient()
- if err != nil {
- return err
- }
-
- err = kubevirtconfig.ValidatePermissions(client, ic.Config)
- if err != nil {
- return errors.Wrap(err, "Kubevirt permissions validation failed")
- }
case azure.Name, baremetal.Name, libvirt.Name, none.Name, openstack.Name, ovirt.Name, vsphere.Name:
// no permissions to check
default:
diff --git a/pkg/asset/installconfig/platformprovisioncheck.go b/pkg/asset/installconfig/platformprovisioncheck.go
index 3aa02edce28..55de0396c6f 100644
--- a/pkg/asset/installconfig/platformprovisioncheck.go
+++ b/pkg/asset/installconfig/platformprovisioncheck.go
@@ -10,7 +10,6 @@ import (
bmconfig "github.com/openshift/installer/pkg/asset/installconfig/baremetal"
gcpconfig "github.com/openshift/installer/pkg/asset/installconfig/gcp"
ibmcloudconfig "github.com/openshift/installer/pkg/asset/installconfig/ibmcloud"
- kubevirtconfig "github.com/openshift/installer/pkg/asset/installconfig/kubevirt"
osconfig "github.com/openshift/installer/pkg/asset/installconfig/openstack"
ovirtconfig "github.com/openshift/installer/pkg/asset/installconfig/ovirt"
vsconfig "github.com/openshift/installer/pkg/asset/installconfig/vsphere"
@@ -19,7 +18,6 @@ import (
"github.com/openshift/installer/pkg/types/baremetal"
"github.com/openshift/installer/pkg/types/gcp"
"github.com/openshift/installer/pkg/types/ibmcloud"
- "github.com/openshift/installer/pkg/types/kubevirt"
"github.com/openshift/installer/pkg/types/libvirt"
"github.com/openshift/installer/pkg/types/none"
"github.com/openshift/installer/pkg/types/openstack"
@@ -101,15 +99,6 @@ func (a *PlatformProvisionCheck) Generate(dependencies asset.Parents) error {
if err != nil {
return err
}
- case kubevirt.Name:
- client, err := kubevirtconfig.NewClient()
- if err != nil {
- return err
- }
- err = kubevirtconfig.ValidateForProvisioning(client)
- if err != nil {
- return err
- }
case ovirt.Name:
err = ovirtconfig.ValidateForProvisioning(ic.Config)
if err != nil {
diff --git a/pkg/asset/machines/kubevirt/OWNERS b/pkg/asset/machines/kubevirt/OWNERS
deleted file mode 100644
index c81b62d00a3..00000000000
--- a/pkg/asset/machines/kubevirt/OWNERS
+++ /dev/null
@@ -1,7 +0,0 @@
-# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
-# This file just uses aliases defined in OWNERS_ALIASES.
-
-approvers:
- - kubevirt-approvers
-reviewers:
- - kubevirt-reviewers
diff --git a/pkg/asset/machines/kubevirt/machines.go b/pkg/asset/machines/kubevirt/machines.go
deleted file mode 100644
index 0507acc9ee3..00000000000
--- a/pkg/asset/machines/kubevirt/machines.go
+++ /dev/null
@@ -1,82 +0,0 @@
-// Package kubevirt generates Machine objects for kubevirt.
-package kubevirt
-
-import (
- "fmt"
-
- machineapi "github.com/openshift/machine-api-operator/pkg/apis/machine/v1beta1"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "k8s.io/apimachinery/pkg/runtime"
-
- "github.com/openshift/installer/pkg/types"
- "github.com/openshift/installer/pkg/types/kubevirt"
-
- kubevirtprovider "github.com/openshift/cluster-api-provider-kubevirt/pkg/apis/kubevirtprovider/v1alpha1"
-)
-
-// Machines returns a list of machines for a machinepool.
-func Machines(clusterID string, config *types.InstallConfig, pool *types.MachinePool, osImage, role, userDataSecret string) ([]machineapi.Machine, error) {
- if configPlatform := config.Platform.Name(); configPlatform != kubevirt.Name {
- return nil, fmt.Errorf("non-kubevirt configuration: %q", configPlatform)
- }
- if poolPlatform := pool.Platform.Name(); poolPlatform != kubevirt.Name {
- return nil, fmt.Errorf("non-kubevirt machine-pool: %q", poolPlatform)
- }
- platform := config.Platform.Kubevirt
-
- total := int64(1)
- if pool.Replicas != nil {
- total = *pool.Replicas
- }
- provider := provider(clusterID, platform, pool, userDataSecret, config)
- var machines []machineapi.Machine
- for idx := int64(0); idx < total; idx++ {
- machine := machineapi.Machine{
- TypeMeta: metav1.TypeMeta{
- APIVersion: "machine.openshift.io/v1beta1",
- Kind: "Machine",
- },
- ObjectMeta: metav1.ObjectMeta{
- Namespace: "openshift-machine-api",
- Name: fmt.Sprintf("%s-%s-%d", clusterID, pool.Name, idx),
- Labels: map[string]string{
- "machine.openshift.io/cluster-api-cluster": clusterID,
- "machine.openshift.io/cluster-api-machine-role": role,
- "machine.openshift.io/cluster-api-machine-type": role,
- },
- },
- Spec: machineapi.MachineSpec{
- ProviderSpec: machineapi.ProviderSpec{
- Value: &runtime.RawExtension{Object: provider},
- },
- // we don't need to set Versions, because we control those via cluster operators.
- },
- }
- machines = append(machines, machine)
- }
-
- return machines, nil
-}
-
-func provider(clusterID string, platform *kubevirt.Platform, pool *types.MachinePool, userDataSecret string, config *types.InstallConfig) *kubevirtprovider.KubevirtMachineProviderSpec {
- interfaceBindingMethod := "InterfaceBridge"
- if config.Kubevirt.InterfaceBindingMethod != "" {
- interfaceBindingMethod = "Interface" + config.Kubevirt.InterfaceBindingMethod
- }
- spec := kubevirtprovider.KubevirtMachineProviderSpec{
- TypeMeta: metav1.TypeMeta{
- APIVersion: "kubevirtproviderconfig.openshift.io/v1alpha1",
- Kind: "KubevirtMachineProviderSpec",
- },
- SourcePvcName: fmt.Sprintf("%s-source-pvc", clusterID),
- RequestedMemory: pool.Platform.Kubevirt.Memory,
- RequestedCPU: pool.Platform.Kubevirt.CPU,
- RequestedStorage: pool.Platform.Kubevirt.StorageSize,
- StorageClassName: platform.StorageClass,
- IgnitionSecretName: userDataSecret,
- NetworkName: platform.NetworkName,
- InterfaceBindingMethod: interfaceBindingMethod,
- PersistentVolumeAccessMode: platform.PersistentVolumeAccessMode,
- }
- return &spec
-}
diff --git a/pkg/asset/machines/kubevirt/machinesets.go b/pkg/asset/machines/kubevirt/machinesets.go
deleted file mode 100644
index f6198bfeb95..00000000000
--- a/pkg/asset/machines/kubevirt/machinesets.go
+++ /dev/null
@@ -1,77 +0,0 @@
-// Package kubevirt generates Machine objects for kubevirt.
-package kubevirt
-
-import (
- "fmt"
-
- machineapi "github.com/openshift/machine-api-operator/pkg/apis/machine/v1beta1"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "k8s.io/apimachinery/pkg/runtime"
- "k8s.io/utils/pointer"
-
- "github.com/openshift/installer/pkg/types"
- "github.com/openshift/installer/pkg/types/kubevirt"
-)
-
-// MachineSets returns a list of machinesets for a machinepool.
-func MachineSets(clusterID string, config *types.InstallConfig, pool *types.MachinePool, osImage, role,
- userDataSecret string) ([]*machineapi.MachineSet, error) {
-
- if configPlatform := config.Platform.Name(); configPlatform != kubevirt.Name {
- return nil, fmt.Errorf("non-kubevirt configuration: %q", configPlatform)
- }
- if poolPlatform := pool.Platform.Name(); poolPlatform != kubevirt.Name {
- return nil, fmt.Errorf("non-kubevirt machine-pool: %q", poolPlatform)
- }
- platform := config.Platform.Kubevirt
-
- total := int64(0)
- if pool.Replicas != nil {
- total = *pool.Replicas
- }
-
- provider := provider(clusterID, platform, pool, userDataSecret, config)
- name := fmt.Sprintf("%s-%s", clusterID, pool.Name)
- mset := &machineapi.MachineSet{
- TypeMeta: metav1.TypeMeta{
- APIVersion: "machine.openshift.io/v1beta1",
- Kind: "MachineSet",
- },
- ObjectMeta: metav1.ObjectMeta{
- Namespace: "openshift-machine-api",
- Name: name,
- Labels: map[string]string{
- "machine.openshift.io/cluster-api-cluster": clusterID,
- "machine.openshift.io/cluster-api-machine-role": role,
- "machine.openshift.io/cluster-api-machine-type": role,
- },
- },
- Spec: machineapi.MachineSetSpec{
- Replicas: pointer.Int32Ptr(int32(total)),
- Selector: metav1.LabelSelector{
- MatchLabels: map[string]string{
- "machine.openshift.io/cluster-api-machineset": name,
- "machine.openshift.io/cluster-api-cluster": clusterID,
- },
- },
- Template: machineapi.MachineTemplateSpec{
- ObjectMeta: machineapi.ObjectMeta{
- Labels: map[string]string{
- "machine.openshift.io/cluster-api-machineset": name,
- "machine.openshift.io/cluster-api-cluster": clusterID,
- "machine.openshift.io/cluster-api-machine-role": role,
- "machine.openshift.io/cluster-api-machine-type": role,
- },
- },
- Spec: machineapi.MachineSpec{
- ProviderSpec: machineapi.ProviderSpec{
- Value: &runtime.RawExtension{Object: provider},
- },
- // we don't need to set Versions, because we control those via cluster operators.
- },
- },
- },
- }
-
- return []*machineapi.MachineSet{mset}, nil
-}
diff --git a/pkg/asset/machines/master.go b/pkg/asset/machines/master.go
index d711b62bebe..19a980a5540 100644
--- a/pkg/asset/machines/master.go
+++ b/pkg/asset/machines/master.go
@@ -14,8 +14,6 @@ import (
gcpprovider "github.com/openshift/cluster-api-provider-gcp/pkg/apis/gcpprovider/v1beta1"
ibmcloudapi "github.com/openshift/cluster-api-provider-ibmcloud/pkg/apis"
ibmcloudprovider "github.com/openshift/cluster-api-provider-ibmcloud/pkg/apis/ibmcloudprovider/v1beta1"
- kubevirtproviderapi "github.com/openshift/cluster-api-provider-kubevirt/pkg/apis"
- kubevirtprovider "github.com/openshift/cluster-api-provider-kubevirt/pkg/apis/kubevirtprovider/v1alpha1"
libvirtapi "github.com/openshift/cluster-api-provider-libvirt/pkg/apis"
libvirtprovider "github.com/openshift/cluster-api-provider-libvirt/pkg/apis/libvirtproviderconfig/v1beta1"
ovirtproviderapi "github.com/openshift/cluster-api-provider-ovirt/pkg/apis"
@@ -43,7 +41,6 @@ import (
"github.com/openshift/installer/pkg/asset/machines/baremetal"
"github.com/openshift/installer/pkg/asset/machines/gcp"
"github.com/openshift/installer/pkg/asset/machines/ibmcloud"
- "github.com/openshift/installer/pkg/asset/machines/kubevirt"
"github.com/openshift/installer/pkg/asset/machines/libvirt"
"github.com/openshift/installer/pkg/asset/machines/machineconfig"
"github.com/openshift/installer/pkg/asset/machines/openstack"
@@ -59,7 +56,6 @@ import (
baremetaltypes "github.com/openshift/installer/pkg/types/baremetal"
gcptypes "github.com/openshift/installer/pkg/types/gcp"
ibmcloudtypes "github.com/openshift/installer/pkg/types/ibmcloud"
- kubevirttypes "github.com/openshift/installer/pkg/types/kubevirt"
libvirttypes "github.com/openshift/installer/pkg/types/libvirt"
nonetypes "github.com/openshift/installer/pkg/types/none"
openstacktypes "github.com/openshift/installer/pkg/types/openstack"
@@ -390,18 +386,6 @@ func (m *Master) Generate(dependencies asset.Parents) error {
return errors.Wrap(err, "failed to create master machine objects")
}
vsphere.ConfigMasters(machines, clusterID.InfraID)
- case kubevirttypes.Name:
- mpool := defaultKubevirtMachinePoolPlatform()
- mpool.Set(ic.Platform.Kubevirt.DefaultMachinePlatform)
- mpool.Set(pool.Platform.Kubevirt)
- pool.Platform.Kubevirt = &mpool
-
- imageName, _ := rhcosutils.GenerateOpenStackImageName(string(*rhcosImage), clusterID.InfraID)
-
- machines, err = kubevirt.Machines(clusterID.InfraID, ic, &pool, imageName, "master", "master-user-data")
- if err != nil {
- return errors.Wrap(err, "failed to create master machine objects for kubevirt provider")
- }
case nonetypes.Name:
default:
return fmt.Errorf("invalid Platform")
@@ -531,7 +515,6 @@ func (m *Master) Machines() ([]machineapi.Machine, error) {
openstackapi.AddToScheme(scheme)
ovirtproviderapi.AddToScheme(scheme)
vsphereapi.AddToScheme(scheme)
- kubevirtproviderapi.AddToScheme(scheme)
decoder := serializer.NewCodecFactory(scheme).UniversalDecoder(
awsprovider.SchemeGroupVersion,
azureprovider.SchemeGroupVersion,
@@ -542,7 +525,6 @@ func (m *Master) Machines() ([]machineapi.Machine, error) {
openstackprovider.SchemeGroupVersion,
vsphereprovider.SchemeGroupVersion,
ovirtprovider.SchemeGroupVersion,
- kubevirtprovider.SchemeGroupVersion,
)
machines := []machineapi.Machine{}
diff --git a/pkg/asset/machines/worker.go b/pkg/asset/machines/worker.go
index b7bca7f0d39..97148e16595 100644
--- a/pkg/asset/machines/worker.go
+++ b/pkg/asset/machines/worker.go
@@ -14,8 +14,6 @@ import (
gcpprovider "github.com/openshift/cluster-api-provider-gcp/pkg/apis/gcpprovider/v1beta1"
ibmcloudapi "github.com/openshift/cluster-api-provider-ibmcloud/pkg/apis"
ibmcloudprovider "github.com/openshift/cluster-api-provider-ibmcloud/pkg/apis/ibmcloudprovider/v1beta1"
- kubevirtproviderapi "github.com/openshift/cluster-api-provider-kubevirt/pkg/apis"
- kubevirtprovider "github.com/openshift/cluster-api-provider-kubevirt/pkg/apis/kubevirtprovider/v1alpha1"
libvirtapi "github.com/openshift/cluster-api-provider-libvirt/pkg/apis"
libvirtprovider "github.com/openshift/cluster-api-provider-libvirt/pkg/apis/libvirtproviderconfig/v1beta1"
ovirtproviderapi "github.com/openshift/cluster-api-provider-ovirt/pkg/apis"
@@ -43,7 +41,6 @@ import (
"github.com/openshift/installer/pkg/asset/machines/baremetal"
"github.com/openshift/installer/pkg/asset/machines/gcp"
"github.com/openshift/installer/pkg/asset/machines/ibmcloud"
- "github.com/openshift/installer/pkg/asset/machines/kubevirt"
"github.com/openshift/installer/pkg/asset/machines/libvirt"
"github.com/openshift/installer/pkg/asset/machines/machineconfig"
"github.com/openshift/installer/pkg/asset/machines/openstack"
@@ -59,7 +56,6 @@ import (
baremetaltypes "github.com/openshift/installer/pkg/types/baremetal"
gcptypes "github.com/openshift/installer/pkg/types/gcp"
ibmcloudtypes "github.com/openshift/installer/pkg/types/ibmcloud"
- kubevirttypes "github.com/openshift/installer/pkg/types/kubevirt"
libvirttypes "github.com/openshift/installer/pkg/types/libvirt"
nonetypes "github.com/openshift/installer/pkg/types/none"
openstacktypes "github.com/openshift/installer/pkg/types/openstack"
@@ -155,14 +151,6 @@ func defaultVSphereMachinePoolPlatform() vspheretypes.MachinePool {
}
}
-func defaultKubevirtMachinePoolPlatform() kubevirttypes.MachinePool {
- return kubevirttypes.MachinePool{
- CPU: 4,
- Memory: "16G",
- StorageSize: "120Gi",
- }
-}
-
func awsDefaultWorkerMachineTypes(region string, arch types.Architecture) []string {
classes := awsdefaults.InstanceClasses(region, arch)
types := make([]string, len(classes))
@@ -442,21 +430,6 @@ func (w *Worker) Generate(dependencies asset.Parents) error {
for _, set := range sets {
machineSets = append(machineSets, set)
}
- case kubevirttypes.Name:
- mpool := defaultKubevirtMachinePoolPlatform()
- mpool.Set(ic.Platform.Kubevirt.DefaultMachinePlatform)
- mpool.Set(pool.Platform.Kubevirt)
- pool.Platform.Kubevirt = &mpool
-
- imageName, _ := rhcosutils.GenerateOpenStackImageName(string(*rhcosImage), clusterID.InfraID)
-
- sets, err := kubevirt.MachineSets(clusterID.InfraID, ic, &pool, imageName, "worker", "worker-user-data")
- if err != nil {
- return errors.Wrap(err, "failed to create worker machine objects for kubevirt provider")
- }
- for _, set := range sets {
- machineSets = append(machineSets, set)
- }
case nonetypes.Name:
default:
return fmt.Errorf("invalid Platform")
@@ -542,7 +515,6 @@ func (w *Worker) MachineSets() ([]machineapi.MachineSet, error) {
openstackapi.AddToScheme(scheme)
ovirtproviderapi.AddToScheme(scheme)
vsphereproviderapi.AddToScheme(scheme)
- kubevirtproviderapi.AddToScheme(scheme)
decoder := serializer.NewCodecFactory(scheme).UniversalDecoder(
awsprovider.SchemeGroupVersion,
azureprovider.SchemeGroupVersion,
@@ -553,7 +525,6 @@ func (w *Worker) MachineSets() ([]machineapi.MachineSet, error) {
openstackprovider.SchemeGroupVersion,
ovirtprovider.SchemeGroupVersion,
vsphereprovider.SchemeGroupVersion,
- kubevirtprovider.SchemeGroupVersion,
)
machineSets := []machineapi.MachineSet{}
diff --git a/pkg/asset/manifests/cloudproviderconfig.go b/pkg/asset/manifests/cloudproviderconfig.go
index d17641f16fc..b5d22708c15 100644
--- a/pkg/asset/manifests/cloudproviderconfig.go
+++ b/pkg/asset/manifests/cloudproviderconfig.go
@@ -18,7 +18,6 @@ import (
"github.com/openshift/installer/pkg/asset/manifests/azure"
gcpmanifests "github.com/openshift/installer/pkg/asset/manifests/gcp"
ibmcloudmanifests "github.com/openshift/installer/pkg/asset/manifests/ibmcloud"
- kubevirtmanifests "github.com/openshift/installer/pkg/asset/manifests/kubevirt"
openstackmanifests "github.com/openshift/installer/pkg/asset/manifests/openstack"
vspheremanifests "github.com/openshift/installer/pkg/asset/manifests/vsphere"
awstypes "github.com/openshift/installer/pkg/types/aws"
@@ -26,7 +25,6 @@ import (
baremetaltypes "github.com/openshift/installer/pkg/types/baremetal"
gcptypes "github.com/openshift/installer/pkg/types/gcp"
ibmcloudtypes "github.com/openshift/installer/pkg/types/ibmcloud"
- kubevirttypes "github.com/openshift/installer/pkg/types/kubevirt"
libvirttypes "github.com/openshift/installer/pkg/types/libvirt"
nonetypes "github.com/openshift/installer/pkg/types/none"
openstacktypes "github.com/openshift/installer/pkg/types/openstack"
@@ -211,15 +209,6 @@ func (cpc *CloudProviderConfig) Generate(dependencies asset.Parents) error {
return errors.Wrap(err, "could not create cloud provider config")
}
cm.Data[cloudProviderConfigDataKey] = vsphereConfig
- case kubevirttypes.Name:
- kubevirtConfig, err := kubevirtmanifests.CloudProviderConfig{
- Namespace: installConfig.Config.Platform.Kubevirt.Namespace,
- InfraID: clusterID.InfraID,
- }.JSON()
- if err != nil {
- return errors.Wrap(err, "could not create cloud provider config")
- }
- cm.Data[cloudProviderConfigDataKey] = kubevirtConfig
default:
return errors.New("invalid Platform")
}
diff --git a/pkg/asset/manifests/dns.go b/pkg/asset/manifests/dns.go
index 4e5eed5c298..bb6cee653cb 100644
--- a/pkg/asset/manifests/dns.go
+++ b/pkg/asset/manifests/dns.go
@@ -23,7 +23,6 @@ import (
baremetaltypes "github.com/openshift/installer/pkg/types/baremetal"
gcptypes "github.com/openshift/installer/pkg/types/gcp"
ibmcloudtypes "github.com/openshift/installer/pkg/types/ibmcloud"
- kubevirttypes "github.com/openshift/installer/pkg/types/kubevirt"
libvirttypes "github.com/openshift/installer/pkg/types/libvirt"
nonetypes "github.com/openshift/installer/pkg/types/none"
openstacktypes "github.com/openshift/installer/pkg/types/openstack"
@@ -146,7 +145,7 @@ func (d *DNS) Generate(dependencies asset.Parents) error {
config.Spec.PrivateZone = &configv1.DNSZone{
ID: zoneID,
}
- case libvirttypes.Name, openstacktypes.Name, baremetaltypes.Name, nonetypes.Name, vspheretypes.Name, ovirttypes.Name, kubevirttypes.Name:
+ case libvirttypes.Name, openstacktypes.Name, baremetaltypes.Name, nonetypes.Name, vspheretypes.Name, ovirttypes.Name:
default:
return errors.New("invalid Platform")
}
diff --git a/pkg/asset/manifests/infrastructure.go b/pkg/asset/manifests/infrastructure.go
index ca0b52cee74..6eccc9beead 100644
--- a/pkg/asset/manifests/infrastructure.go
+++ b/pkg/asset/manifests/infrastructure.go
@@ -18,7 +18,6 @@ import (
"github.com/openshift/installer/pkg/types/baremetal"
"github.com/openshift/installer/pkg/types/gcp"
"github.com/openshift/installer/pkg/types/ibmcloud"
- "github.com/openshift/installer/pkg/types/kubevirt"
"github.com/openshift/installer/pkg/types/libvirt"
"github.com/openshift/installer/pkg/types/none"
"github.com/openshift/installer/pkg/types/openstack"
@@ -205,12 +204,6 @@ func (i *Infrastructure) Generate(dependencies asset.Parents) error {
APIServerInternalIP: installConfig.Config.Ovirt.APIVIP,
IngressIP: installConfig.Config.Ovirt.IngressVIP,
}
- case kubevirt.Name:
- config.Spec.PlatformSpec.Type = configv1.KubevirtPlatformType
- config.Status.PlatformStatus.Kubevirt = &configv1.KubevirtPlatformStatus{
- APIServerInternalIP: installConfig.Config.Kubevirt.APIVIP,
- IngressIP: installConfig.Config.Kubevirt.IngressVIP,
- }
default:
config.Spec.PlatformSpec.Type = configv1.NonePlatformType
}
diff --git a/pkg/asset/manifests/kubevirt/OWNERS b/pkg/asset/manifests/kubevirt/OWNERS
deleted file mode 100644
index c81b62d00a3..00000000000
--- a/pkg/asset/manifests/kubevirt/OWNERS
+++ /dev/null
@@ -1,7 +0,0 @@
-# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
-# This file just uses aliases defined in OWNERS_ALIASES.
-
-approvers:
- - kubevirt-approvers
-reviewers:
- - kubevirt-reviewers
diff --git a/pkg/asset/manifests/kubevirt/cloudproviderconfig.go b/pkg/asset/manifests/kubevirt/cloudproviderconfig.go
deleted file mode 100644
index 9328ee08c53..00000000000
--- a/pkg/asset/manifests/kubevirt/cloudproviderconfig.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package kubevirt
-
-import (
- "bytes"
- "encoding/json"
-)
-
-// CloudProviderConfig is the kubevirt cloud provider config
-type CloudProviderConfig struct {
- // The namespace in the infra cluster that the cluster resources are created in
- Namespace string `json:"namespace"`
- InfraID string `json:"infraID"`
-}
-
-// JSON generates the cloud provider json config for the kubevirt platform.
-func (params CloudProviderConfig) JSON() (string, error) {
- buff := &bytes.Buffer{}
- encoder := json.NewEncoder(buff)
- encoder.SetIndent("", "\t")
- if err := encoder.Encode(params); err != nil {
- return "", err
- }
- return buff.String(), nil
-}
diff --git a/pkg/asset/manifests/openshift.go b/pkg/asset/manifests/openshift.go
index 032f66fe0fa..21a97cd4e05 100644
--- a/pkg/asset/manifests/openshift.go
+++ b/pkg/asset/manifests/openshift.go
@@ -17,7 +17,6 @@ import (
installconfigaws "github.com/openshift/installer/pkg/asset/installconfig/aws"
"github.com/openshift/installer/pkg/asset/installconfig/gcp"
"github.com/openshift/installer/pkg/asset/installconfig/ibmcloud"
- kubeconfig "github.com/openshift/installer/pkg/asset/installconfig/kubevirt"
"github.com/openshift/installer/pkg/asset/installconfig/ovirt"
"github.com/openshift/installer/pkg/asset/machines"
osmachine "github.com/openshift/installer/pkg/asset/machines/openstack"
@@ -32,7 +31,6 @@ import (
baremetaltypes "github.com/openshift/installer/pkg/types/baremetal"
gcptypes "github.com/openshift/installer/pkg/types/gcp"
ibmcloudtypes "github.com/openshift/installer/pkg/types/ibmcloud"
- kubevirttypes "github.com/openshift/installer/pkg/types/kubevirt"
openstacktypes "github.com/openshift/installer/pkg/types/openstack"
ovirttypes "github.com/openshift/installer/pkg/types/ovirt"
vspheretypes "github.com/openshift/installer/pkg/types/vsphere"
@@ -214,16 +212,6 @@ func (o *Openshift) Generate(dependencies asset.Parents) error {
Base64encodeCABundle: base64.StdEncoding.EncodeToString([]byte(conf.CABundle)),
},
}
- case kubevirttypes.Name:
- kubeconfigContent, err := kubeconfig.LoadKubeConfigContent()
- if err != nil {
- return err
- }
- cloudCreds = cloudCredsSecretData{
- Kubevirt: &KubevirtCredsSecretData{
- Base64encodedKubeconfig: base64.StdEncoding.EncodeToString(kubeconfigContent),
- },
- }
}
templateData := &openshiftTemplateData{
@@ -249,7 +237,7 @@ func (o *Openshift) Generate(dependencies asset.Parents) error {
}
switch platform {
- case awstypes.Name, openstacktypes.Name, vspheretypes.Name, azuretypes.Name, gcptypes.Name, ibmcloudtypes.Name, ovirttypes.Name, kubevirttypes.Name:
+ case awstypes.Name, openstacktypes.Name, vspheretypes.Name, azuretypes.Name, gcptypes.Name, ibmcloudtypes.Name, ovirttypes.Name:
if installConfig.Config.CredentialsMode != types.ManualCredentialsMode {
assetData["99_cloud-creds-secret.yaml"] = applyTemplateData(cloudCredsSecret.Files()[0].Data, templateData)
}
diff --git a/pkg/asset/manifests/operators.go b/pkg/asset/manifests/operators.go
index 66fa9682753..79e7530d35d 100644
--- a/pkg/asset/manifests/operators.go
+++ b/pkg/asset/manifests/operators.go
@@ -70,7 +70,6 @@ func (m *Manifests) Dependencies() []asset.Asset {
&bootkube.MachineConfigServerTLSSecret{},
&bootkube.OpenshiftConfigSecretPullSecret{},
&bootkube.OpenshiftMachineConfigOperator{},
- &bootkube.KubevirtInfraNamespace{},
}
}
@@ -154,7 +153,6 @@ func (m *Manifests) generateBootKubeManifests(dependencies asset.Parents) []*ass
&bootkube.MachineConfigServerTLSSecret{},
&bootkube.OpenshiftConfigSecretPullSecret{},
&bootkube.OpenshiftMachineConfigOperator{},
- &bootkube.KubevirtInfraNamespace{},
} {
dependencies.Get(a)
for _, f := range a.Files() {
diff --git a/pkg/asset/manifests/template.go b/pkg/asset/manifests/template.go
index 414d6569963..4e93d3b00d8 100644
--- a/pkg/asset/manifests/template.go
+++ b/pkg/asset/manifests/template.go
@@ -51,12 +51,6 @@ type OvirtCredsSecretData struct {
Base64encodeCABundle string
}
-// KubevirtCredsSecretData holds the encoded kubeconfig for the infra cluster.
-// It is used to generated cloud-creds secret.
-type KubevirtCredsSecretData struct {
- Base64encodedKubeconfig string
-}
-
type cloudCredsSecretData struct {
AWS *AwsCredsSecretData
Azure *AzureCredsSecretData
@@ -65,7 +59,6 @@ type cloudCredsSecretData struct {
OpenStack *OpenStackCredsSecretData
VSphere *VSphereCredsSecretData
Ovirt *OvirtCredsSecretData
- Kubevirt *KubevirtCredsSecretData
}
type bootkubeTemplateData struct {
diff --git a/pkg/asset/quota/quota.go b/pkg/asset/quota/quota.go
index e5a6ab9c044..98077345de1 100644
--- a/pkg/asset/quota/quota.go
+++ b/pkg/asset/quota/quota.go
@@ -26,7 +26,6 @@ import (
"github.com/openshift/installer/pkg/types/baremetal"
typesgcp "github.com/openshift/installer/pkg/types/gcp"
"github.com/openshift/installer/pkg/types/ibmcloud"
- "github.com/openshift/installer/pkg/types/kubevirt"
"github.com/openshift/installer/pkg/types/libvirt"
"github.com/openshift/installer/pkg/types/none"
typesopenstack "github.com/openshift/installer/pkg/types/openstack"
@@ -141,7 +140,7 @@ func (a *PlatformQuotaCheck) Generate(dependencies asset.Parents) error {
return summarizeFailingReport(reports)
}
summarizeReport(reports)
- case azure.Name, baremetal.Name, ibmcloud.Name, libvirt.Name, none.Name, ovirt.Name, vsphere.Name, kubevirt.Name:
+ case azure.Name, baremetal.Name, ibmcloud.Name, libvirt.Name, none.Name, ovirt.Name, vsphere.Name:
// no special provisioning requirements to check
default:
err = fmt.Errorf("unknown platform type %q", platform)
diff --git a/pkg/asset/rhcos/image.go b/pkg/asset/rhcos/image.go
index 251a6036069..05187f14d04 100644
--- a/pkg/asset/rhcos/image.go
+++ b/pkg/asset/rhcos/image.go
@@ -20,7 +20,6 @@ import (
"github.com/openshift/installer/pkg/types/baremetal"
"github.com/openshift/installer/pkg/types/gcp"
"github.com/openshift/installer/pkg/types/ibmcloud"
- "github.com/openshift/installer/pkg/types/kubevirt"
"github.com/openshift/installer/pkg/types/libvirt"
"github.com/openshift/installer/pkg/types/none"
"github.com/openshift/installer/pkg/types/openstack"
@@ -114,7 +113,7 @@ func osImage(config *types.InstallConfig) (string, error) {
return rhcos.FindArtifactURL(a)
}
return "", fmt.Errorf("%s: No qemu build found", st.FormatPrefix(archName))
- case ovirt.Name, kubevirt.Name, openstack.Name:
+ case ovirt.Name, openstack.Name:
op := config.Platform.OpenStack
if op != nil {
if oi := op.ClusterOSImage; oi != "" {
diff --git a/pkg/asset/targets/targets.go b/pkg/asset/targets/targets.go
index 82114ec84ad..591a2745c27 100644
--- a/pkg/asset/targets/targets.go
+++ b/pkg/asset/targets/targets.go
@@ -37,7 +37,6 @@ var (
&bootkube.KubeSystemConfigmapRootCA{},
&bootkube.OpenshiftMachineConfigOperator{},
&bootkube.OpenshiftConfigSecretPullSecret{},
- &bootkube.KubevirtInfraNamespace{},
&openshift.CloudCredsSecret{},
&openshift.KubeadminPasswordSecret{},
&openshift.RoleCloudCredsSecretReader{},
diff --git a/pkg/asset/templates/content/bootkube/openshift-kubevirt-infra-namespace.go b/pkg/asset/templates/content/bootkube/openshift-kubevirt-infra-namespace.go
deleted file mode 100644
index b956d364ad1..00000000000
--- a/pkg/asset/templates/content/bootkube/openshift-kubevirt-infra-namespace.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package bootkube
-
-import (
- "os"
- "path/filepath"
-
- "github.com/openshift/installer/pkg/asset"
- "github.com/openshift/installer/pkg/asset/templates/content"
-)
-
-const (
- kubevirtInfraNamespaceFileName = "openshift-kubevirt-infra-namespace.yaml"
-)
-
-var _ asset.WritableAsset = (*KubevirtInfraNamespace)(nil)
-
-// KubevirtInfraNamespace is an asset for the openshift-kubevirt-infra namespace
-type KubevirtInfraNamespace struct {
- FileList []*asset.File
-}
-
-// Dependencies returns all of the dependencies directly needed by the asset
-func (t *KubevirtInfraNamespace) Dependencies() []asset.Asset {
- return []asset.Asset{}
-}
-
-// Name returns the human-friendly name of the asset.
-func (t *KubevirtInfraNamespace) Name() string {
- return "KubevirtInfraNamespace"
-}
-
-// Generate generates the actual files by this asset
-func (t *KubevirtInfraNamespace) Generate(parents asset.Parents) error {
- fileName := kubevirtInfraNamespaceFileName
- data, err := content.GetBootkubeTemplate(fileName)
- if err != nil {
- return err
- }
- t.FileList = []*asset.File{
- {
- Filename: filepath.Join(content.TemplateDir, fileName),
- Data: []byte(data),
- },
- }
- return nil
-}
-
-// Files returns the files generated by the asset.
-func (t *KubevirtInfraNamespace) Files() []*asset.File {
- return t.FileList
-}
-
-// Load returns the asset from disk.
-func (t *KubevirtInfraNamespace) Load(f asset.FileFetcher) (bool, error) {
- file, err := f.FetchByName(filepath.Join(content.TemplateDir, kubevirtInfraNamespaceFileName))
- if err != nil {
- if os.IsNotExist(err) {
- return false, nil
- }
- return false, err
- }
- t.FileList = []*asset.File{file}
- return true, nil
-}
diff --git a/pkg/asset/tls/mcscertkey.go b/pkg/asset/tls/mcscertkey.go
index 2611007ce3e..ac15113c0f7 100644
--- a/pkg/asset/tls/mcscertkey.go
+++ b/pkg/asset/tls/mcscertkey.go
@@ -8,7 +8,6 @@ import (
"github.com/openshift/installer/pkg/asset"
"github.com/openshift/installer/pkg/asset/installconfig"
baremetaltypes "github.com/openshift/installer/pkg/types/baremetal"
- kubevirttypes "github.com/openshift/installer/pkg/types/kubevirt"
openstacktypes "github.com/openshift/installer/pkg/types/openstack"
ovirttypes "github.com/openshift/installer/pkg/types/ovirt"
vspheretypes "github.com/openshift/installer/pkg/types/vsphere"
@@ -61,9 +60,6 @@ func (a *MCSCertKey) Generate(dependencies asset.Parents) error {
cfg.IPAddresses = []net.IP{net.ParseIP(installConfig.Config.VSphere.APIVIP)}
cfg.DNSNames = append(cfg.DNSNames, installConfig.Config.VSphere.APIVIP)
}
- case kubevirttypes.Name:
- cfg.IPAddresses = []net.IP{net.ParseIP(installConfig.Config.Kubevirt.APIVIP)}
- cfg.DNSNames = []string{hostname, installConfig.Config.Kubevirt.APIVIP}
default:
cfg.DNSNames = []string{hostname}
}
diff --git a/pkg/destroy/kubevirt/OWNERS b/pkg/destroy/kubevirt/OWNERS
deleted file mode 100644
index c81b62d00a3..00000000000
--- a/pkg/destroy/kubevirt/OWNERS
+++ /dev/null
@@ -1,7 +0,0 @@
-# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
-# This file just uses aliases defined in OWNERS_ALIASES.
-
-approvers:
- - kubevirt-approvers
-reviewers:
- - kubevirt-reviewers
diff --git a/pkg/destroy/kubevirt/destroyer.go b/pkg/destroy/kubevirt/destroyer.go
deleted file mode 100644
index e67b71d75de..00000000000
--- a/pkg/destroy/kubevirt/destroyer.go
+++ /dev/null
@@ -1,180 +0,0 @@
-package kubevirt
-
-import (
- "context"
- "fmt"
- "time"
-
- "github.com/sirupsen/logrus"
- "k8s.io/apimachinery/pkg/api/errors"
- apilabels "k8s.io/apimachinery/pkg/labels"
- "k8s.io/apimachinery/pkg/util/wait"
-
- ickubevirt "github.com/openshift/installer/pkg/asset/installconfig/kubevirt"
- "github.com/openshift/installer/pkg/destroy/providers"
- "github.com/openshift/installer/pkg/types"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-// deleteFunc is the interface a function needs to implement to be delete resources.
-type deleteFunc func(ctx context.Context, namespace string, listOpts metav1.ListOptions, kubevirtClient ickubevirt.Client) error
-
-// ClusterUninstaller holds the Metadata info needed to delete the tenantCluster resources from the infraCluster.
-type ClusterUninstaller struct {
- Metadata types.ClusterMetadata
- Logger logrus.FieldLogger
-}
-
-// New returns KubeVirt Uninstaller from ClusterMetadata.
-func New(logger logrus.FieldLogger, metadata *types.ClusterMetadata) (providers.Destroyer, error) {
- return &ClusterUninstaller{
- Metadata: *metadata,
- Logger: logger,
- }, nil
-}
-
-// Run is the entrypoint to start the uninstall process.
-func (uninstaller *ClusterUninstaller) Run() (*types.ClusterQuota, error) {
- ctx := context.Background()
- namespace := uninstaller.Metadata.Kubevirt.Namespace
-
- listOpts := metav1.ListOptions{LabelSelector: apilabels.FormatLabels(uninstaller.Metadata.Kubevirt.Labels)}
- kubevirtClient, err := ickubevirt.NewClient()
- if err != nil {
- return nil, err
- }
-
- deleteFuncs := []deleteFunc{uninstaller.deleteAllVMs, uninstaller.deleteAllDVs, uninstaller.deleteAllSecrets}
- var results = make(chan error, len(deleteFuncs))
- for i, del := range deleteFuncs {
- go func(index int, delFunc deleteFunc) {
- for {
- err := delFunc(ctx, namespace, listOpts, kubevirtClient)
- if err == nil {
- results <- err
- break
- }
- time.Sleep(10 * time.Second)
- }
-
- }(i, del)
- }
-
- var resultMsg = ""
- for i := len(deleteFuncs); i > 0; i-- {
- err := <-results
- if err != nil {
- resultMsg = fmt.Sprintf("%s, %s", resultMsg, err.Error())
- }
- }
- if resultMsg != "" {
- return nil, fmt.Errorf("destroy finished with errors: %s", resultMsg)
- }
- return nil, nil
-}
-
-func (uninstaller *ClusterUninstaller) deleteAllVMs(ctx context.Context, namespace string, listOpts metav1.ListOptions, kubevirtClient ickubevirt.Client) error {
- vmList, err := kubevirtClient.ListVirtualMachine(ctx, namespace, listOpts)
- if err != nil {
- uninstaller.Logger.Errorf("failed to delete VirtualMachines: %s", err)
- return fmt.Errorf("failed to list VMs")
- }
-
- if len(vmList.Items) == 0 {
- uninstaller.Logger.Infof("There is no Virtual Machine to delete in namespace %s", namespace)
- return nil
- }
- uninstaller.Logger.Infof("Found %d Virtual Machines to delete in namespace %s", len(vmList.Items), namespace)
- for _, vm := range vmList.Items {
- uninstaller.Logger.Infof("Delete Virtual Machine %s from Namespace %s", vm.Name, namespace)
- if err := kubevirtClient.DeleteVirtualMachine(ctx, namespace, vm.Name); err != nil {
- uninstaller.Logger.Errorf("failed to delete VirtualMachines: %s", err)
- return fmt.Errorf("failed to delete VM")
- }
- if err := uninstaller.exponentialBackoff("Virtual Machine", func() error {
- _, err := kubevirtClient.GetVirtualMachine(ctx, namespace, vm.Name)
- return err
- }); err != nil {
- uninstaller.Logger.Errorf("failed to delete VirtualMachines: %s", err)
- return fmt.Errorf("failed to validate VM deleted")
- }
- }
- return nil
-}
-
-func (uninstaller *ClusterUninstaller) deleteAllDVs(ctx context.Context, namespace string, listOpts metav1.ListOptions, kubevirtClient ickubevirt.Client) error {
- dvList, err := kubevirtClient.ListDataVolume(ctx, namespace, listOpts)
- if err != nil {
- uninstaller.Logger.Errorf("failed to delete DataVolumes: %s", err)
- return fmt.Errorf("failed to list DVs")
- }
-
- if len(dvList.Items) == 0 {
- uninstaller.Logger.Infof("There is no Data Volume to delete in namespace %s", namespace)
- return nil
- }
- uninstaller.Logger.Infof("Found %d Data Volumes to delete in namespace %s", len(dvList.Items), namespace)
- for _, dv := range dvList.Items {
- uninstaller.Logger.Infof("Delete Data Volume %s from Namespace %s", dv.Name, namespace)
- if err := kubevirtClient.DeleteDataVolume(ctx, namespace, dv.Name); err != nil {
- uninstaller.Logger.Errorf("failed to delete DataVolumes: %s", err)
- return fmt.Errorf("failed to delete DV")
- }
- if err := uninstaller.exponentialBackoff("Data Volume", func() error {
- _, err := kubevirtClient.GetDataVolume(ctx, namespace, dv.Name)
- return err
- }); err != nil {
- uninstaller.Logger.Errorf("failed to delete DataVolumes: %s", err)
- return fmt.Errorf("failed to validate DV deleted")
- }
- }
- return nil
-}
-
-func (uninstaller *ClusterUninstaller) deleteAllSecrets(ctx context.Context, namespace string, listOpts metav1.ListOptions, kubevirtClient ickubevirt.Client) error {
- secretList, err := kubevirtClient.ListSecret(ctx, namespace, listOpts)
- if err != nil {
- uninstaller.Logger.Errorf("failed to delete Secrets: %s", err)
- return fmt.Errorf("failed to list Secrets")
- }
-
- if len(secretList.Items) == 0 {
- uninstaller.Logger.Infof("There is no Secret to delete in namespace %s", namespace)
- return nil
- }
- uninstaller.Logger.Infof("Found %d Secrets to delete in namespace %s", len(secretList.Items), namespace)
- for _, secret := range secretList.Items {
- uninstaller.Logger.Infof("Delete Secret %s from Namespace %s", secret.Name, namespace)
- if err := kubevirtClient.DeleteSecret(ctx, namespace, secret.Name); err != nil {
- uninstaller.Logger.Errorf("failed to delete Secrets: %s", err)
- return fmt.Errorf("failed to delete Secret")
- }
- if err := uninstaller.exponentialBackoff("Secret", func() error {
- _, err := kubevirtClient.GetVirtualMachine(ctx, namespace, secret.Name)
- return err
- }); err != nil {
- uninstaller.Logger.Errorf("failed to delete Secrets: %s", err)
- return fmt.Errorf("failed to validate Secret deleted")
- }
- }
- return nil
-}
-
-func (uninstaller *ClusterUninstaller) exponentialBackoff(resourceType string, tryGetFunc func() error) error {
- backoff := wait.Backoff{
- Duration: 1 * time.Second,
- Jitter: 0,
- Factor: 2,
- Steps: 5,
- }
- return wait.ExponentialBackoff(backoff, func() (done bool, err error) {
- err = tryGetFunc()
- if err != nil {
- if errors.IsNotFound(err) {
- return true, nil
- }
- return true, fmt.Errorf("failed to get %s, with error: %v", resourceType, err)
- }
- return false, nil
- })
-}
diff --git a/pkg/destroy/kubevirt/doc.go b/pkg/destroy/kubevirt/doc.go
deleted file mode 100644
index 0983357c84c..00000000000
--- a/pkg/destroy/kubevirt/doc.go
+++ /dev/null
@@ -1,2 +0,0 @@
-// Package kubevirt provides a cluster-destroyer for kubevirt clusters.
-package kubevirt
diff --git a/pkg/destroy/kubevirt/register.go b/pkg/destroy/kubevirt/register.go
deleted file mode 100644
index 7345ea0bf8a..00000000000
--- a/pkg/destroy/kubevirt/register.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package kubevirt
-
-import "github.com/openshift/installer/pkg/destroy/providers"
-
-func init() {
- providers.Registry["kubevirt"] = New
-}
diff --git a/pkg/explain/printer_test.go b/pkg/explain/printer_test.go
index 05d987bc4a7..d8ef1e6c986 100644
--- a/pkg/explain/printer_test.go
+++ b/pkg/explain/printer_test.go
@@ -99,9 +99,6 @@ func Test_PrintFields(t *testing.T) {
ibmcloud