diff --git a/packages/forklift-console-plugin/locales/en/plugin__forklift-console-plugin.json b/packages/forklift-console-plugin/locales/en/plugin__forklift-console-plugin.json
index e6b6931e1..e40e8dd46 100644
--- a/packages/forklift-console-plugin/locales/en/plugin__forklift-console-plugin.json
+++ b/packages/forklift-console-plugin/locales/en/plugin__forklift-console-plugin.json
@@ -13,7 +13,6 @@
"7 days": "7 days",
"A CA certificate to be trusted when connecting to the Red Hat Virtualization Manager (RHVM) API endpoint. Ensure the CA certificate format is in a PEM encoded X.509 format. To use a CA certificate, drag the file to the text box or browse for it. To use the system CA certificates, leave the field empty.": "A CA certificate to be trusted when connecting to the Red Hat Virtualization Manager (RHVM) API endpoint. Ensure the CA certificate format is in a PEM encoded X.509 format. To use a CA certificate, drag the file to the text box or browse for it. To use the system CA certificates, leave the field empty.",
"A Secret containing credentials and other confidential information.": "A Secret containing credentials and other confidential information.",
- "A Secret containing credentials and other confidential information. Empty may be used for the host provider.": "A Secret containing credentials and other confidential information. Empty may be used for the host provider.",
"A service account token with cluster admin privileges, required for authenticating the connection to the API server.": "A service account token with cluster admin privileges, required for authenticating the connection to the API server.",
"A user name for connecting to the Red Hat Virtualization Manager (RHVM) API endpoint. Ensure the user name is in the format of username@user-domain. For example: admin@internal.": "A user name for connecting to the Red Hat Virtualization Manager (RHVM) API endpoint. Ensure the user name is in the format of username@user-domain. For example: admin@internal.",
"A user name for connecting to the vCenter API endpoint. Ensure the user name is in the format of username@user-domain. For example: user@vsphere.local .": "A user name for connecting to the vCenter API endpoint. Ensure the user name is in the format of username@user-domain. For example: user@vsphere.local .",
@@ -74,6 +73,7 @@
"Created at": "Created at",
"CreationTimestamp is a timestamp representing the server time when this object was created.\n It is not guaranteed to be set in happens-before order across separate operations.\n Clients may not set this value. It is represented in RFC3339 form and is in UTC.": "CreationTimestamp is a timestamp representing the server time when this object was created.\n It is not guaranteed to be set in happens-before order across separate operations.\n Clients may not set this value. It is represented in RFC3339 form and is in UTC.",
"CreationTimestamp is a timestamp representing the server time when this object was created.\n It is not guaranteed to be set in happens-before order across separate operations.\n Clients may not set this value. It is represented in RFC3339 form and is in UTC.": "CreationTimestamp is a timestamp representing the server time when this object was created.\n It is not guaranteed to be set in happens-before order across separate operations.\n Clients may not set this value. It is represented in RFC3339 form and is in UTC.",
+ "CreationTimestamp is a timestamp representing the server time when this object was created.\n It is not guaranteed to be set in happens-before order across separate operations.\n Clients may not set this value. It is represented in RFC3339 form and is in UTC.": "CreationTimestamp is a timestamp representing the server time when this object was created.\n It is not guaranteed to be set in happens-before order across separate operations.\n Clients may not set this value. It is represented in RFC3339 form and is in UTC.",
"Credentials": "Credentials",
"Critical concerns": "Critical concerns",
"Custom certification used to verify the OpenStack REST API server, when empty use system certificate.": "Custom certification used to verify the OpenStack REST API server, when empty use system certificate.",
@@ -91,6 +91,7 @@
"Delete Plan?": "Delete Plan?",
"Delete Provider": "Delete Provider",
"Delete StorageMap?": "Delete StorageMap?",
+ "Delete the provider resource.": "Delete the provider resource.",
"Deleting a migration plan does not remove temporary resources, it is recommended to <2>archive2> the plan first before deleting it, to remove temporary resources.": "Deleting a migration plan does not remove temporary resources, it is recommended to <2>archive2> the plan first before deleting it, to remove temporary resources.",
"Description": "Description",
"Details": "Details",
@@ -110,10 +111,13 @@
"Edit plan name": "Edit plan name",
"Edit Precopy interval (minutes)": "Edit Precopy interval (minutes)",
"Edit Provider": "Edit Provider",
+ "Edit Provider Credentials": "Edit Provider Credentials",
+ "Edit provider credentials.\n Use this link to edit the providers credentials instead of editing the secret directly.": "Edit provider credentials.\n Use this link to edit the providers credentials instead of editing the secret directly.",
"Edit Snapshot polling interval (seconds)": "Edit Snapshot polling interval (seconds)",
"Edit StorageMap": "Edit StorageMap",
"Edit target namespace": "Edit target namespace",
"Edit target provider": "Edit target provider",
+ "Edit the provider credential secret.": "Edit the provider credential secret.",
"Edit URL": "Edit URL",
"Edit VDDK init image": "Edit VDDK init image",
"Empty": "Empty",
@@ -186,6 +190,7 @@
"Invalid Username.": "Invalid Username.",
"Inventory": "Inventory",
"Inventory server is not reachable. To troubleshoot, check the Forklift controller pod logs.": "Inventory server is not reachable. To troubleshoot, check the Forklift controller pod logs.",
+ "List of objects depended by this object. If ALL objects in the list have been deleted,\n this object will be garbage collected. If this object is managed by a controller,\n then an entry in this list will point to this controller, with the controller field set to true.\n There cannot be more than one managing controller.": "List of objects depended by this object. If ALL objects in the list have been deleted,\n this object will be garbage collected. If this object is managed by a controller,\n then an entry in this list will point to this controller, with the controller field set to true.\n There cannot be more than one managing controller.",
"List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected.\n If this object is managed by a controller, then an entry in this list will point to this controller,\n with the controller field set to true. There cannot be more than one managing controller.": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected.\n If this object is managed by a controller, then an entry in this list will point to this controller,\n with the controller field set to true. There cannot be more than one managing controller.",
"Loading": "Loading",
"Manage Columns": "Manage Columns",
@@ -223,6 +228,7 @@
"Namespace": "Namespace",
"Namespace defines the space within which each name must be unique.\n An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation.\n Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.": "Namespace defines the space within which each name must be unique.\n An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation.\n Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.",
"Namespace defines the space within which each name must be unique.\n An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation.\n Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.": "Namespace defines the space within which each name must be unique.\n An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation.\n Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.",
+ "Namespace defines the space within which each name must be unique.\n An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation.\n Not all objects are required to be scoped to a namespace -\n the value of this field for those objects will be empty.": "Namespace defines the space within which each name must be unique.\n An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation.\n Not all objects are required to be scoped to a namespace -\n the value of this field for those objects will be empty.",
"Namespace is not defined": "Namespace is not defined",
"Network for data transfer": "Network for data transfer",
"Network interfaces": "Network interfaces",
@@ -310,6 +316,7 @@
"Project": "Project",
"Project ID": "Project ID",
"Projects": "Projects",
+ "Provider credentials": "Provider credentials",
"Provider details": "Provider details",
"Provider inventory": "Provider inventory",
"Provider resource name": "Provider resource name",
@@ -354,7 +361,9 @@
"Source provider": "Source provider",
"Specifies the duration for retaining 'must gather' reports before they are automatically deleted. The default value is -1, which implies automatic cleanup is disabled.": "Specifies the duration for retaining 'must gather' reports before they are automatically deleted. The default value is -1, which implies automatic cleanup is disabled.",
"Specify OpenStack Identity (Keystone) endpoint, for example, http://controller:5000/v3.": "Specify OpenStack Identity (Keystone) endpoint, for example, http://controller:5000/v3.",
+ "Specify the type of source provider. Allowed values are ova, ovirt, vsphere,\n openshift, and openstack. This label is needed to verify the credentials are correct when the remote system is accessible and, for RHV, to retrieve the Manager CA certificate when\n a third-party certificate is specified.": "Specify the type of source provider. Allowed values are ova, ovirt, vsphere,\n openshift, and openstack. This label is needed to verify the credentials are correct when the remote system is accessible and, for RHV, to retrieve the Manager CA certificate when\n a third-party certificate is specified.",
"Specify the type of source provider. Allowed values are ova, ovirt, vsphere, openshift, and openstack. This label is needed to verify the credentials are correct when the remote system is accessible and, for RHV, to retrieve the Manager CA certificate when a third-party certificate is specified.": "Specify the type of source provider. Allowed values are ova, ovirt, vsphere, openshift, and openstack. This label is needed to verify the credentials are correct when the remote system is accessible and, for RHV, to retrieve the Manager CA certificate when a third-party certificate is specified.",
+ "Specify the VDDK image that you created.": "Specify the VDDK image that you created.",
"SSHA-1 fingerprint": "SSHA-1 fingerprint",
"Staging": "Staging",
"Status": "Status",
@@ -418,10 +427,12 @@
"URL of the API endpoint of the Red Hat Virtualization Manager (RHVM) on which the source VM is mounted. Ensure that the URL includes the path leading to the RHVM API server, usually /ovirt-engine/api. For example, https://rhv-host-example.com/ovirt-engine/api.": "URL of the API endpoint of the Red Hat Virtualization Manager (RHVM) on which the source VM is mounted. Ensure that the URL includes the path leading to the RHVM API server, usually /ovirt-engine/api. For example, https://rhv-host-example.com/ovirt-engine/api.",
"URL of the API endpoint of the vCenter on which the source VM is mounted. Ensure that the URL includes the sdk path, usually /sdk. For example, https://vCenter-host-example.com/sdk. If a certificate for FQDN is specified, the value of this field needs to match the FQDN in the certificate.": "URL of the API endpoint of the vCenter on which the source VM is mounted. Ensure that the URL includes the sdk path, usually /sdk. For example, https://vCenter-host-example.com/sdk. If a certificate for FQDN is specified, the value of this field needs to match the FQDN in the certificate.",
"URL of the NFS file share that serves the OVA. Ensure the URL is in the following format: ip_or_hostname_of_nfs_server:/nfs_path. For example: 10.10.0.10:/ova .": "URL of the NFS file share that serves the OVA. Ensure the URL is in the following format: ip_or_hostname_of_nfs_server:/nfs_path. For example: 10.10.0.10:/ova .",
- "URL of the NFS file share that serves the OVA.
The URL must be in the following format: nfs_server:/nfs_path, where: nfs_server: An IP or hostname of the server where the share was created. nfs_path: The path on the server where the OVA files are stored. For example: 10.10.0.10:/ova .
Note: This URL field is not editable.": "URL of the NFS file share that serves the OVA.
The URL must be in the following format: nfs_server:/nfs_path, where: nfs_server: An IP or hostname of the server where the share was created. nfs_path: The path on the server where the OVA files are stored. For example: 10.10.0.10:/ova .
Note: This URL field is not editable.",
+ "URL of the NFS file share that serves the OVA., for example, 10.10.0.10:/ova": "URL of the NFS file share that serves the OVA., for example, 10.10.0.10:/ova",
"URL of the Openshift Virtualization API endpoint.": "URL of the Openshift Virtualization API endpoint.",
+ "URL of the Openshift Virtualization API endpoint. Empty may be used for the host provider.": "URL of the Openshift Virtualization API endpoint. Empty may be used for the host provider.",
"URL of the Openshift Virtualization API endpoint. If both URL and Service account bearer token are left blank, the local OpenShift cluster is used.": "URL of the Openshift Virtualization API endpoint. If both URL and Service account bearer token are left blank, the local OpenShift cluster is used.",
"URL of the provider": "URL of the provider",
+ "URL of the providers API endpoint. The URL must be a valid endpoint for the provider type, see\n the documentation for each provider type to learn more about the URL format.": "URL of the providers API endpoint. The URL must be a valid endpoint for the provider type, see\n the documentation for each provider type to learn more about the URL format.",
"URL of the Red Hat Virtualization Manager (RHVM) API endpoint.": "URL of the Red Hat Virtualization Manager (RHVM) API endpoint.",
"URL of the Red Hat Virtualization Manager (RHVM) API endpoint. Ensure the URL includes the \"/ovirt-engine/api\" path. For example: https://rhv-host-example.com/ovirt-engine/api.": "URL of the Red Hat Virtualization Manager (RHVM) API endpoint. Ensure the URL includes the \"/ovirt-engine/api\" path. For example: https://rhv-host-example.com/ovirt-engine/api.",
"URL of the vCenter API endpoint.": "URL of the vCenter API endpoint.",
@@ -430,6 +441,7 @@
"Username": "Username",
"Validation Failed": "Validation Failed",
"VDDK init image": "VDDK init image",
+ "View and edit provider details.": "View and edit provider details.",
"View details": "View details",
"View provider details": "View provider details",
"Virtual Disk Development Kit (VDDK) container init image path. The path must be empty or a valid container image path in the format of registry_route_or_server_path/vddk:‹tag›. For example: quay.io/kubev2v/example:latest. It is strongly recommended to specify a VDDK init image to accelerate migrations.": "Virtual Disk Development Kit (VDDK) container init image path. The path must be empty or a valid container image path in the format of registry_route_or_server_path/vddk:‹tag›. For example: quay.io/kubev2v/example:latest. It is strongly recommended to specify a VDDK init image to accelerate migrations.",
@@ -451,8 +463,8 @@
"When a plan is archived, its history, metadata, and logs are deleted. The plan cannot be edited or restarted but it can be viewed.": "When a plan is archived, its history, metadata, and logs are deleted. The plan cannot be edited or restarted but it can be viewed.",
"YAML": "YAML",
"You can always bring this welcome card back into view by clicking 'Show the welcome card' in the page heading.": "You can always bring this welcome card back into view by clicking 'Show the welcome card' in the page heading.",
+ "You can select a default migration network for an OpenShift Virtualization provider in the\n Red Hat OpenShift web console to improve performance. The default migration network is used to\n transfer disks to the namespaces in which it is configured.If you do not select a migration network,\n the default migration network is the pod network, which might not be optimal for disk transfer.": "You can select a default migration network for an OpenShift Virtualization provider in the\n Red Hat OpenShift web console to improve performance. The default migration network is used to\n transfer disks to the namespaces in which it is configured.If you do not select a migration network,\n the default migration network is the pod network, which might not be optimal for disk transfer.",
"You can select a default migration network for an OpenShift Virtualization provider in the Red Hat OpenShift web console to improve performance.\n The default migration network is used to transfer disks to the namespaces in which it is configured.If you do not select a migration network,\n the default migration network is the pod network, which might not be optimal for disk transfer.": "You can select a default migration network for an OpenShift Virtualization provider in the Red Hat OpenShift web console to improve performance.\n The default migration network is used to transfer disks to the namespaces in which it is configured.If you do not select a migration network,\n the default migration network is the pod network, which might not be optimal for disk transfer.",
- "You can select a default migration network for an OpenShift Virtualization provider in the Red Hat OpenShift web console to improve performance. The default migration network is used to transfer disks to the namespaces in which it is configured.If you do not select a migration network, the default migration network is the pod network, which might not be optimal for disk transfer.": "You can select a default migration network for an OpenShift Virtualization provider in the Red Hat OpenShift web console to improve performance. The default migration network is used to transfer disks to the namespaces in which it is configured.If you do not select a migration network, the default migration network is the pod network, which might not be optimal for disk transfer.",
"You can select a migration network for a source provider to reduce risk to the source environment and to improve performance.": "You can select a migration network for a source provider to reduce risk to the source environment and to improve performance.",
"You don't have access to this section due to cluster policy.": "You don't have access to this section due to cluster policy.",
"You will no longer be able to select mapping \"{{name}}\" when you create a migration plan.": "You will no longer be able to select mapping \"{{name}}\" when you create a migration plan."
diff --git a/packages/forklift-console-plugin/src/modules/Providers/actions/ProviderActionsDropdownItems.tsx b/packages/forklift-console-plugin/src/modules/Providers/actions/ProviderActionsDropdownItems.tsx
index 297a585e6..dbfc6a13c 100644
--- a/packages/forklift-console-plugin/src/modules/Providers/actions/ProviderActionsDropdownItems.tsx
+++ b/packages/forklift-console-plugin/src/modules/Providers/actions/ProviderActionsDropdownItems.tsx
@@ -1,5 +1,4 @@
import React from 'react';
-import { Link } from 'react-router-dom';
import { useForkliftTranslation } from 'src/utils/i18n';
import { ProviderModel, ProviderModelRef } from '@kubev2v/types';
@@ -23,10 +22,21 @@ export const ProviderActionsDropdownItems = ({ data }: ProviderActionsDropdownIt
return [
{t('Edit Provider')}}
- />,
+ description={t('View and edit provider details.')}
+ href={providerURL}
+ >
+ {t('Edit Provider')}
+ ,
+
+ {t('Edit Provider Credentials')}
+ ,
showModal()}
>
diff --git a/packages/forklift-console-plugin/src/modules/Providers/modals/components/AlertMessageForModals.tsx b/packages/forklift-console-plugin/src/modules/Providers/modals/components/AlertMessageForModals.tsx
index 059a8a019..b921b3771 100644
--- a/packages/forklift-console-plugin/src/modules/Providers/modals/components/AlertMessageForModals.tsx
+++ b/packages/forklift-console-plugin/src/modules/Providers/modals/components/AlertMessageForModals.tsx
@@ -2,11 +2,13 @@ import React from 'react';
import { Alert } from '@patternfly/react-core';
+import './alerts.style.css';
+
export const AlertMessageForModals: React.FC<{ title: string; message: string }> = ({
title,
message,
}) => (
-
+
{message}
);
diff --git a/packages/forklift-console-plugin/src/modules/Providers/modals/components/ItemIsOwnedAlert.tsx b/packages/forklift-console-plugin/src/modules/Providers/modals/components/ItemIsOwnedAlert.tsx
index 0ba2bd2be..bf3d64886 100644
--- a/packages/forklift-console-plugin/src/modules/Providers/modals/components/ItemIsOwnedAlert.tsx
+++ b/packages/forklift-console-plugin/src/modules/Providers/modals/components/ItemIsOwnedAlert.tsx
@@ -9,6 +9,8 @@ import {
} from '@openshift-console/dynamic-plugin-sdk';
import { Alert } from '@patternfly/react-core';
+import './alerts.style.css';
+
interface ItemIsOwnedAlertProps {
owner: OwnerReference;
namespace: string;
@@ -19,7 +21,7 @@ export const ItemIsOwnedAlert: React.FC = ({ owner, names
return (
= ({ data }) => {
const { t } = useForkliftTranslation();
const { provider } = data;
- const type = PROVIDERS[provider?.spec?.type] || provider?.spec?.type;
return (
= ({ data }) => {
default: '2Col',
}}
>
-
- {type}{' '}
- {!provider?.spec?.url && (
-
- )}
- >
- }
- moreInfoLink={
- 'https://access.redhat.com/documentation/en-us/migration_toolkit_for_virtualization/2.5/html-single/installing_and_using_the_migration_toolkit_for_virtualization/index#adding-providers'
- }
- helpContent={
-
- {t(
- 'Specify the type of source provider. Allowed values are ova, ovirt, vsphere, openshift, and openstack. This label is needed to verify the credentials are correct when the remote system is accessible and, for RHV, to retrieve the Manager CA certificate when a third-party certificate is specified.',
- )}
-
- }
- crumbs={['Provider', 'spec', 'type']}
- />
+
-
- {t(
- 'Name is primarily intended for creation idempotence and configuration definition. Cannot be updated.',
- )}
-
- }
- crumbs={['Provider', 'metadata', 'name']}
- />
+
-
- }
- moreInfoLink={
- 'https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces'
- }
- helpContent={t(
- `Namespace defines the space within which each name must be unique.
- An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation.
- Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.`,
- )}
- crumbs={['Provider', 'metadata', 'namespace']}
- />
+
- {t('Empty')}}
- moreInfoLink={
- 'https://access.redhat.com/documentation/en-us/migration_toolkit_for_virtualization/2.5/html-single/installing_and_using_the_migration_toolkit_for_virtualization/index#adding-providers'
- }
- helpContent={
-
-
- URL of the NFS file share that serves the OVA.{'
'}
- The URL must be in the following format: {''}nfs_server:/nfs_path
- {''}, where:{' '}
- {''}nfs_server:{''} An IP or hostname of the server where the share
- was created.{' '}
- {''}nfs_path: {''} The path on the server where the OVA files are
- stored.{' '}
- For example: {''}10.10.0.10:/ova{''} .{'
'}
- Note:{' '} This URL field is not editable.
-
-
- }
- crumbs={['Provider', 'spec', 'url']}
- />
+
- }
- moreInfoLink={'https://kubernetes.io/docs/reference/using-api/api-concepts'}
- helpContent={
-
- {t(
- `CreationTimestamp is a timestamp representing the server time when this object was created.
- It is not guaranteed to be set in happens-before order across separate operations.
- Clients may not set this value. It is represented in RFC3339 form and is in UTC.`,
- )}
-
- }
- crumbs={['Provider', 'metadata', 'creationTimestamp']}
+
- }
- moreInfoLink={
- 'https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/'
- }
- helpContent={
-
- {t(
- `List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected.
- If this object is managed by a controller, then an entry in this list will point to this controller,
- with the controller field set to true. There cannot be more than one managing controller.`,
- )}
-
- }
- crumbs={['Provider', 'metadata', 'ownerReferences']}
- />
+
);
};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/OpenshiftDetailsSection.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/OpenshiftDetailsSection.tsx
index de67c509e..be3f87dab 100644
--- a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/OpenshiftDetailsSection.tsx
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/OpenshiftDetailsSection.tsx
@@ -1,27 +1,27 @@
import React from 'react';
-import { Trans } from 'react-i18next';
-import {
- EditProviderDefaultTransferNetwork,
- EditProviderURLModal,
- useModal,
-} from 'src/modules/Providers/modals';
-import { PROVIDERS } from 'src/utils/enums';
import { useForkliftTranslation } from 'src/utils/i18n';
-import { ResourceLink, Timestamp } from '@openshift-console/dynamic-plugin-sdk';
-import { DescriptionList, Label, Text } from '@patternfly/react-core';
+import { DescriptionList } from '@patternfly/react-core';
-import { DetailsItem, OwnerReferencesItem } from '../../../../utils';
+import { DetailsItem } from '../../../../utils';
+import {
+ CreatedAtDetailsItem,
+ CredentialsDetailsItem,
+ NameDetailsItem,
+ NamespaceDetailsItem,
+ OwnerDetailsItem,
+ SecretDetailsItem,
+ TransferNetworkDetailsItem,
+ TypeDetailsItem,
+ URLDetailsItem,
+} from './components';
import { DetailsSectionProps } from './DetailsSection';
export const OpenshiftDetailsSection: React.FC = ({ data }) => {
const { t } = useForkliftTranslation();
- const { showModal } = useModal();
const { provider, permissions } = data;
- const canEdit = permissions.canPatch;
- const type = PROVIDERS[provider?.spec?.type] || provider?.spec?.type;
return (
= ({ data })
default: '2Col',
}}
>
-
- {type}{' '}
- {!provider?.spec?.url && (
-
- )}
- >
- }
- moreInfoLink={
- 'https://access.redhat.com/documentation/en-us/migration_toolkit_for_virtualization/2.5/html-single/installing_and_using_the_migration_toolkit_for_virtualization/index#adding-providers'
- }
- helpContent={
-
- {t(
- 'Specify the type of source provider. Allowed values are ova, ovirt, vsphere, openshift, and openstack. This label is needed to verify the credentials are correct when the remote system is accessible and, for RHV, to retrieve the Manager CA certificate when a third-party certificate is specified.',
- )}
-
- }
- crumbs={['Provider', 'spec', 'type']}
- />
+
-
- {t(
- 'Name is primarily intended for creation idempotence and configuration definition. Cannot be updated.',
- )}
-
- }
- crumbs={['Provider', 'metadata', 'name']}
- />
+
+
+
-
- }
- moreInfoLink={
- 'https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces'
- }
+
- {t('Empty')}}
- moreInfoLink={
- 'https://access.redhat.com/documentation/en-us/migration_toolkit_for_virtualization/2.5/html-single/installing_and_using_the_migration_toolkit_for_virtualization/index#adding-source-provider_cnv2'
- }
- helpContent={
-
-
- {
- 'URL of the Openshift Virtualization API endpoint. If both URL and Service account bearer token are left blank, the local OpenShift cluster is used.'
- }
-
-
- }
- crumbs={['Provider', 'spec', 'url']}
- onEdit={
- canEdit &&
- provider?.spec?.url &&
- (() => showModal())
- }
- />
+
-
- ) : (
- {t('No secret')}
- )
- }
- moreInfoLink={'https://kubernetes.io/docs/concepts/configuration/secret/'}
- helpContent={t(
- `A Secret containing credentials and other confidential information. Empty may be used for the host provider.`,
- )}
- crumbs={['Provider', 'spec', 'secret']}
- />
+
- }
- moreInfoLink={'https://kubernetes.io/docs/reference/using-api/api-concepts'}
- helpContent={
-
- {t(
- `CreationTimestamp is a timestamp representing the server time when this object was created.
- It is not guaranteed to be set in happens-before order across separate operations.
- Clients may not set this value. It is represented in RFC3339 form and is in UTC.`,
- )}
-
- }
- crumbs={['Provider', 'metadata', 'creationTimestamp']}
+
- {t('Pod network')}
- )
- }
- moreInfoLink={
- 'https://access.redhat.com/documentation/en-us/migration_toolkit_for_virtualization/2.5/html-single/installing_and_using_the_migration_toolkit_for_virtualization/index#selecting-migration-network-for-virt-provider_mtv'
- }
- helpContent={
-
- {t(
- 'You can select a default migration network for an OpenShift Virtualization provider in the Red Hat OpenShift web console to improve performance. The default migration network is used to transfer disks to the namespaces in which it is configured.If you do not select a migration network, the default migration network is the pod network, which might not be optimal for disk transfer.',
- )}
-
- }
- crumbs={[
- 'Provider',
- 'metadata',
- 'annotations',
- 'forklift.konveyor.io/defaultTransferNetwork',
- ]}
- onEdit={
- canEdit && (() => showModal())
- }
- />
+
- }
- moreInfoLink={
- 'https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/'
- }
- helpContent={
-
- {t(
- `List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected.
- If this object is managed by a controller, then an entry in this list will point to this controller,
- with the controller field set to true. There cannot be more than one managing controller.`,
- )}
-
- }
- crumbs={['Provider', 'metadata', 'ownerReferences']}
- />
+
);
};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/OpenstackDetailsSection.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/OpenstackDetailsSection.tsx
index b8b965268..966a3ca14 100644
--- a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/OpenstackDetailsSection.tsx
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/OpenstackDetailsSection.tsx
@@ -1,22 +1,26 @@
import React from 'react';
-import { EditProviderURLModal, useModal } from 'src/modules/Providers/modals';
-import { PROVIDERS } from 'src/utils/enums';
import { useForkliftTranslation } from 'src/utils/i18n';
-import { ResourceLink, Timestamp } from '@openshift-console/dynamic-plugin-sdk';
-import { DescriptionList, Text } from '@patternfly/react-core';
+import { DescriptionList } from '@patternfly/react-core';
-import { DetailsItem, OwnerReferencesItem } from '../../../../utils';
+import { DetailsItem } from '../../../../utils';
+import {
+ CreatedAtDetailsItem,
+ CredentialsDetailsItem,
+ NameDetailsItem,
+ NamespaceDetailsItem,
+ OwnerDetailsItem,
+ SecretDetailsItem,
+ TypeDetailsItem,
+ URLDetailsItem,
+} from './components';
import { DetailsSectionProps } from './DetailsSection';
export const OpenstackDetailsSection: React.FC = ({ data }) => {
const { t } = useForkliftTranslation();
- const { showModal } = useModal();
const { provider, permissions } = data;
- const canEdit = permissions.canPatch;
- const type = PROVIDERS[provider?.spec?.type] || provider?.spec?.type;
return (
= ({ data })
default: '2Col',
}}
>
-
- {t(
- 'Specify the type of source provider. Allowed values are ova, ovirt, vsphere, openshift, and openstack. This label is needed to verify the credentials are correct when the remote system is accessible and, for RHV, to retrieve the Manager CA certificate when a third-party certificate is specified.',
- )}
-
- }
- crumbs={['Provider', 'spec', 'type']}
- />
+
-
- {t(
- 'Name is primarily intended for creation idempotence and configuration definition. Cannot be updated.',
- )}
-
- }
- crumbs={['Provider', 'metadata', 'name']}
- />
+
+
+
-
- }
- moreInfoLink={
- 'https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces'
- }
+
- {t('Empty')}}
- moreInfoLink={
- 'https://access.redhat.com/documentation/en-us/migration_toolkit_for_virtualization/2.5/html-single/installing_and_using_the_migration_toolkit_for_virtualization/index#adding-source-provider_ostack'
- }
- helpContent={
-
- {t(`OpenStack Identity (Keystone) endpoint, for example, http://controller:5000/v3`)}
-
- }
- crumbs={['Provider', 'spec', 'url']}
- onEdit={canEdit && (() => showModal())}
- />
+
-
- ) : (
- {t('No secret')}
- )
- }
- moreInfoLink={'https://kubernetes.io/docs/concepts/configuration/secret/'}
- helpContent={t(`A Secret containing credentials and other confidential information.`)}
- crumbs={['Provider', 'spec', 'secret']}
- />
+
- }
- moreInfoLink={'https://kubernetes.io/docs/reference/using-api/api-concepts'}
- helpContent={
-
- {t(
- `CreationTimestamp is a timestamp representing the server time when this object was created.
- It is not guaranteed to be set in happens-before order across separate operations.
- Clients may not set this value. It is represented in RFC3339 form and is in UTC.`,
- )}
-
- }
- crumbs={['Provider', 'metadata', 'creationTimestamp']}
- />
-
-
+
- }
- moreInfoLink={
- 'https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/'
- }
- helpContent={
-
- {t(
- `List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected.
- If this object is managed by a controller, then an entry in this list will point to this controller,
- with the controller field set to true. There cannot be more than one managing controller.`,
- )}
-
- }
- crumbs={['Provider', 'metadata', 'ownerReferences']}
- />
+
);
};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/OvirtDetailsSection.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/OvirtDetailsSection.tsx
index 6d66940d2..a158e58d5 100644
--- a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/OvirtDetailsSection.tsx
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/OvirtDetailsSection.tsx
@@ -1,22 +1,26 @@
import React from 'react';
-import { EditProviderURLModal, useModal } from 'src/modules/Providers/modals';
-import { PROVIDERS } from 'src/utils/enums';
import { useForkliftTranslation } from 'src/utils/i18n';
-import { ResourceLink, Timestamp } from '@openshift-console/dynamic-plugin-sdk';
-import { DescriptionList, Text } from '@patternfly/react-core';
+import { DescriptionList } from '@patternfly/react-core';
-import { DetailsItem, OwnerReferencesItem } from '../../../../utils';
+import { DetailsItem } from '../../../../utils';
+import {
+ CreatedAtDetailsItem,
+ CredentialsDetailsItem,
+ NameDetailsItem,
+ NamespaceDetailsItem,
+ OwnerDetailsItem,
+ SecretDetailsItem,
+ TypeDetailsItem,
+ URLDetailsItem,
+} from './components';
import { DetailsSectionProps } from './DetailsSection';
export const OvirtDetailsSection: React.FC = ({ data }) => {
const { t } = useForkliftTranslation();
- const { showModal } = useModal();
const { provider, permissions } = data;
- const canEdit = permissions.canPatch;
- const type = PROVIDERS[provider?.spec?.type] || provider?.spec?.type;
return (
= ({ data }) =>
default: '2Col',
}}
>
-
- {t(
- 'Specify the type of source provider. Allowed values are ova, ovirt, vsphere, openshift, and openstack. This label is needed to verify the credentials are correct when the remote system is accessible and, for RHV, to retrieve the Manager CA certificate when a third-party certificate is specified.',
- )}
-
- }
- crumbs={['Provider', 'spec', 'type']}
- />
+
-
- {t(
- 'Name is primarily intended for creation idempotence and configuration definition. Cannot be updated.',
- )}
-
- }
- crumbs={['Provider', 'metadata', 'name']}
- />
+
+
+
-
- }
- moreInfoLink={
- 'https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces'
- }
+
- {t('Empty')}}
- moreInfoLink={
- 'https://access.redhat.com/documentation/en-us/migration_toolkit_for_virtualization/2.5/html-single/installing_and_using_the_migration_toolkit_for_virtualization/index#adding-source-provider_rhv'
- }
- helpContent={
-
- {t(
- `URL of the API endpoint of the Red Hat Virtualization Manager (RHVM) on which the source VM is mounted. Ensure that the URL includes the path leading to the RHVM API server, usually /ovirt-engine/api. For example, https://rhv-host-example.com/ovirt-engine/api.`,
- )}
-
- }
- crumbs={['Provider', 'spec', 'url']}
- onEdit={canEdit && (() => showModal())}
- />
+
-
- ) : (
- {t('No secret')}
- )
- }
- moreInfoLink={'https://kubernetes.io/docs/concepts/configuration/secret/'}
- helpContent={t(`A Secret containing credentials and other confidential information.`)}
- crumbs={['Provider', 'spec', 'secret']}
- />
+
- }
- moreInfoLink={'https://kubernetes.io/docs/reference/using-api/api-concepts'}
- helpContent={
-
- {t(
- `CreationTimestamp is a timestamp representing the server time when this object was created.
- It is not guaranteed to be set in happens-before order across separate operations.
- Clients may not set this value. It is represented in RFC3339 form and is in UTC.`,
- )}
-
- }
- crumbs={['Provider', 'metadata', 'creationTimestamp']}
- />
-
-
+
- }
- moreInfoLink={
- 'https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/'
- }
- helpContent={
-
- {t(
- `List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected.
- If this object is managed by a controller, then an entry in this list will point to this controller,
- with the controller field set to true. There cannot be more than one managing controller.`,
- )}
-
- }
- crumbs={['Provider', 'metadata', 'ownerReferences']}
- />
+
);
};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/CreatedAtDetailsItem.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/CreatedAtDetailsItem.tsx
new file mode 100644
index 000000000..0a1c342dd
--- /dev/null
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/CreatedAtDetailsItem.tsx
@@ -0,0 +1,33 @@
+import React from 'react';
+import { useForkliftTranslation } from 'src/utils/i18n';
+
+import { Timestamp } from '@openshift-console/dynamic-plugin-sdk';
+
+import { DetailsItem } from '../../../../../utils';
+
+import { ProviderDetailsItemProps } from './ProviderDetailsItem';
+
+export const CreatedAtDetailsItem: React.FC = ({
+ resource: provider,
+ moreInfoLink,
+ helpContent,
+}) => {
+ const { t } = useForkliftTranslation();
+
+ const defaultMoreInfoLink = 'https://kubernetes.io/docs/reference/using-api/api-concepts';
+ const defaultHelpContent = t(
+ `CreationTimestamp is a timestamp representing the server time when this object was created.
+ It is not guaranteed to be set in happens-before order across separate operations.
+ Clients may not set this value. It is represented in RFC3339 form and is in UTC.`,
+ );
+
+ return (
+ }
+ moreInfoLink={moreInfoLink ?? defaultMoreInfoLink}
+ helpContent={helpContent ?? defaultHelpContent}
+ crumbs={['Provider', 'metadata', 'creationTimestamp']}
+ />
+ );
+};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/CredentialsDetailsItem.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/CredentialsDetailsItem.tsx
new file mode 100644
index 000000000..fb1d614aa
--- /dev/null
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/CredentialsDetailsItem.tsx
@@ -0,0 +1,43 @@
+import React from 'react';
+import { Link } from 'react-router-dom';
+import { useForkliftTranslation } from 'src/utils/i18n';
+
+import { ProviderModelRef } from '@kubev2v/types';
+
+import { DetailsItem, getResourceUrl } from '../../../../../utils';
+
+import { ProviderDetailsItemProps } from './ProviderDetailsItem';
+
+export const CredentialsDetailsItem: React.FC = ({
+ resource: provider,
+ moreInfoLink,
+ helpContent,
+}) => {
+ const { t } = useForkliftTranslation();
+
+ const providerURL = getResourceUrl({
+ reference: ProviderModelRef,
+ name: provider?.metadata?.name,
+ namespace: provider?.metadata?.namespace,
+ });
+
+ const defaultHelpContent = t(
+ `Edit provider credentials.
+ Use this link to edit the providers credentials instead of editing the secret directly.`,
+ );
+
+ return (
+ {t('Provider credentials')}
+ ) : (
+ {t('No secret')}
+ )
+ }
+ moreInfoLink={moreInfoLink}
+ helpContent={helpContent ?? defaultHelpContent}
+ />
+ );
+};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/NameDetailsItem.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/NameDetailsItem.tsx
new file mode 100644
index 000000000..16377b9e7
--- /dev/null
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/NameDetailsItem.tsx
@@ -0,0 +1,30 @@
+import React from 'react';
+import { useForkliftTranslation } from 'src/utils/i18n';
+
+import { DetailsItem } from '../../../../../utils';
+
+import { ProviderDetailsItemProps } from './ProviderDetailsItem';
+
+export const NameDetailsItem: React.FC = ({
+ resource: provider,
+ moreInfoLink,
+ helpContent,
+}) => {
+ const { t } = useForkliftTranslation();
+
+ const defaultMoreInfoLink =
+ 'https://kubernetes.io/docs/concepts/overview/working-with-objects/names';
+ const defaultHelpContent = t(
+ 'Name is primarily intended for creation idempotence and configuration definition. Cannot be updated.',
+ );
+
+ return (
+
+ );
+};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/NamespaceDetailsItem.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/NamespaceDetailsItem.tsx
new file mode 100644
index 000000000..65fd7934d
--- /dev/null
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/NamespaceDetailsItem.tsx
@@ -0,0 +1,41 @@
+import React from 'react';
+import { useForkliftTranslation } from 'src/utils/i18n';
+
+import { ResourceLink } from '@openshift-console/dynamic-plugin-sdk';
+
+import { DetailsItem } from '../../../../../utils';
+
+import { ProviderDetailsItemProps } from './ProviderDetailsItem';
+
+export const NamespaceDetailsItem: React.FC = ({
+ resource: provider,
+ moreInfoLink,
+ helpContent,
+}) => {
+ const { t } = useForkliftTranslation();
+
+ const defaultMoreInfoLink =
+ 'https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces';
+ const defaultHelpContent = t(
+ `Namespace defines the space within which each name must be unique.
+ An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation.
+ Not all objects are required to be scoped to a namespace -
+ the value of this field for those objects will be empty.`,
+ );
+
+ return (
+
+ }
+ moreInfoLink={moreInfoLink ?? defaultMoreInfoLink}
+ helpContent={helpContent ?? defaultHelpContent}
+ crumbs={['Provider', 'metadata', 'namespace']}
+ />
+ );
+};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/OwnerDetailsItem.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/OwnerDetailsItem.tsx
new file mode 100644
index 000000000..26068601b
--- /dev/null
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/OwnerDetailsItem.tsx
@@ -0,0 +1,33 @@
+import React from 'react';
+import { useForkliftTranslation } from 'src/utils/i18n';
+
+import { DetailsItem, OwnerReferencesItem } from '../../../../../utils';
+
+import { ProviderDetailsItemProps } from './ProviderDetailsItem';
+
+export const OwnerDetailsItem: React.FC = ({
+ resource: provider,
+ moreInfoLink,
+ helpContent,
+}) => {
+ const { t } = useForkliftTranslation();
+
+ const defaultMoreInfoLink =
+ 'https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/';
+ const defaultHelpContent = t(
+ `List of objects depended by this object. If ALL objects in the list have been deleted,
+ this object will be garbage collected. If this object is managed by a controller,
+ then an entry in this list will point to this controller, with the controller field set to true.
+ There cannot be more than one managing controller.`,
+ );
+
+ return (
+ }
+ moreInfoLink={moreInfoLink ?? defaultMoreInfoLink}
+ helpContent={helpContent ?? defaultHelpContent}
+ crumbs={['Provider', 'metadata', 'ownerReferences']}
+ />
+ );
+};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/ProviderDetailsItem.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/ProviderDetailsItem.tsx
new file mode 100644
index 000000000..833c2a6cb
--- /dev/null
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/ProviderDetailsItem.tsx
@@ -0,0 +1,10 @@
+import { ReactNode } from 'react';
+
+import { V1beta1Provider } from '@kubev2v/types';
+
+export interface ProviderDetailsItemProps {
+ resource: V1beta1Provider;
+ canPatch?: boolean;
+ moreInfoLink?: string;
+ helpContent?: ReactNode;
+}
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/SecretDetailsItem.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/SecretDetailsItem.tsx
new file mode 100644
index 000000000..a6af6724a
--- /dev/null
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/SecretDetailsItem.tsx
@@ -0,0 +1,41 @@
+import React from 'react';
+import { useForkliftTranslation } from 'src/utils/i18n';
+
+import { ResourceLink } from '@openshift-console/dynamic-plugin-sdk';
+
+import { DetailsItem } from '../../../../../utils';
+
+import { ProviderDetailsItemProps } from './ProviderDetailsItem';
+
+export const SecretDetailsItem: React.FC = ({
+ resource: provider,
+ moreInfoLink,
+ helpContent,
+}) => {
+ const { t } = useForkliftTranslation();
+
+ const defaultMoreInfoLink = 'https://kubernetes.io/docs/concepts/configuration/secret/';
+ const defaultHelpContent = t(
+ `A Secret containing credentials and other confidential information.`,
+ );
+
+ return (
+
+ ) : (
+ {t('No secret')}
+ )
+ }
+ moreInfoLink={moreInfoLink ?? defaultMoreInfoLink}
+ helpContent={helpContent ?? defaultHelpContent}
+ crumbs={['Provider', 'spec', 'secret']}
+ />
+ );
+};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/TransferNetworkDetailsItem.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/TransferNetworkDetailsItem.tsx
new file mode 100644
index 000000000..31d215164
--- /dev/null
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/TransferNetworkDetailsItem.tsx
@@ -0,0 +1,48 @@
+import React from 'react';
+import { EditProviderDefaultTransferNetwork, useModal } from 'src/modules/Providers/modals';
+import { useForkliftTranslation } from 'src/utils/i18n';
+
+import { DetailsItem } from '../../../../../utils';
+
+import { ProviderDetailsItemProps } from './ProviderDetailsItem';
+
+export const TransferNetworkDetailsItem: React.FC = ({
+ resource: provider,
+ canPatch,
+ moreInfoLink,
+ helpContent,
+}) => {
+ const { t } = useForkliftTranslation();
+ const { showModal } = useModal();
+
+ const defaultMoreInfoLink =
+ 'https://access.redhat.com/documentation/en-us/migration_toolkit_for_virtualization/2.5/html-single/installing_and_using_the_migration_toolkit_for_virtualization/index#selecting-migration-network-for-virt-provider_mtv';
+ const defaultHelpContent = t(
+ `You can select a default migration network for an OpenShift Virtualization provider in the
+ Red Hat OpenShift web console to improve performance. The default migration network is used to
+ transfer disks to the namespaces in which it is configured.If you do not select a migration network,
+ the default migration network is the pod network, which might not be optimal for disk transfer.`,
+ );
+
+ return (
+ {t('Pod network')}
+ )
+ }
+ moreInfoLink={moreInfoLink ?? defaultMoreInfoLink}
+ helpContent={helpContent ?? defaultHelpContent}
+ crumbs={[
+ 'Provider',
+ 'metadata',
+ 'annotations',
+ 'forklift.konveyor.io/defaultTransferNetwork',
+ ]}
+ onEdit={
+ canPatch && (() => showModal())
+ }
+ />
+ );
+};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/TypeDetailsItem.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/TypeDetailsItem.tsx
new file mode 100644
index 000000000..7cd83cedd
--- /dev/null
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/TypeDetailsItem.tsx
@@ -0,0 +1,46 @@
+import React from 'react';
+import { PROVIDERS } from 'src/utils/enums';
+import { useForkliftTranslation } from 'src/utils/i18n';
+
+import { Label } from '@patternfly/react-core';
+
+import { DetailsItem } from '../../../../../utils';
+
+import { ProviderDetailsItemProps } from './ProviderDetailsItem';
+
+export const TypeDetailsItem: React.FC = ({
+ resource: provider,
+ moreInfoLink,
+ helpContent,
+}) => {
+ const { t } = useForkliftTranslation();
+
+ const type = PROVIDERS[provider?.spec?.type] || provider?.spec?.type;
+
+ const defaultMoreInfoLink =
+ 'https://access.redhat.com/documentation/en-us/migration_toolkit_for_virtualization/2.5/html-single/installing_and_using_the_migration_toolkit_for_virtualization/index#adding-providers';
+ const defaultHelpContent = t(
+ `Specify the type of source provider. Allowed values are ova, ovirt, vsphere,
+ openshift, and openstack. This label is needed to verify the credentials are correct when the remote system is accessible and, for RHV, to retrieve the Manager CA certificate when
+ a third-party certificate is specified.`,
+ );
+
+ return (
+
+ {type}{' '}
+ {!provider?.spec?.url && (
+
+ )}
+ >
+ }
+ moreInfoLink={moreInfoLink ?? defaultMoreInfoLink}
+ helpContent={helpContent ?? defaultHelpContent}
+ crumbs={['Provider', 'spec', 'type']}
+ />
+ );
+};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/URLDetailsItem.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/URLDetailsItem.tsx
new file mode 100644
index 000000000..944eb0470
--- /dev/null
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/URLDetailsItem.tsx
@@ -0,0 +1,38 @@
+import React from 'react';
+import { EditProviderURLModal, useModal } from 'src/modules/Providers/modals';
+import { useForkliftTranslation } from 'src/utils/i18n';
+
+import { DetailsItem } from '../../../../../utils';
+
+import { ProviderDetailsItemProps } from './ProviderDetailsItem';
+
+export const URLDetailsItem: React.FC = ({
+ resource: provider,
+ canPatch,
+ moreInfoLink,
+ helpContent,
+}) => {
+ const { t } = useForkliftTranslation();
+ const { showModal } = useModal();
+
+ const defaultMoreInfoLink =
+ 'https://access.redhat.com/documentation/en-us/migration_toolkit_for_virtualization/2.5/html-single/installing_and_using_the_migration_toolkit_for_virtualization/index#adding-source-provider_cnv2';
+ const defaultHelpContent =
+ t(`URL of the providers API endpoint. The URL must be a valid endpoint for the provider type, see
+ the documentation for each provider type to learn more about the URL format.`);
+
+ return (
+ {t('Empty')}}
+ moreInfoLink={moreInfoLink ?? defaultMoreInfoLink}
+ helpContent={helpContent ?? defaultHelpContent}
+ crumbs={['Provider', 'spec', 'url']}
+ onEdit={
+ canPatch &&
+ provider?.spec?.url &&
+ (() => showModal())
+ }
+ />
+ );
+};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/VDDKDetailsItem.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/VDDKDetailsItem.tsx
new file mode 100644
index 000000000..b29d44750
--- /dev/null
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/VDDKDetailsItem.tsx
@@ -0,0 +1,36 @@
+import React from 'react';
+import { EditProviderVDDKImage, useModal } from 'src/modules/Providers/modals';
+import { useForkliftTranslation } from 'src/utils/i18n';
+
+import { DetailsItem } from '../../../../../utils';
+
+import { ProviderDetailsItemProps } from './ProviderDetailsItem';
+
+export const VDDKDetailsItem: React.FC = ({
+ resource: provider,
+ canPatch,
+ moreInfoLink,
+ helpContent,
+}) => {
+ const { t } = useForkliftTranslation();
+ const { showModal } = useModal();
+
+ const defaultMoreInfoLink =
+ 'https://access.redhat.com/documentation/en-us/migration_toolkit_for_virtualization/2.5/html-single/installing_and_using_the_migration_toolkit_for_virtualization/index#creating-vddk-image_mtv';
+ const defaultHelpContent = t(`Specify the VDDK image that you created.`);
+
+ return (
+ {t('Empty')}
+ )
+ }
+ moreInfoLink={moreInfoLink ?? defaultMoreInfoLink}
+ helpContent={helpContent ?? defaultHelpContent}
+ crumbs={['Provider', 'spec', 'settings', 'vddkInitImage']}
+ onEdit={canPatch && (() => showModal())}
+ />
+ );
+};
diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/index.ts b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/index.ts
new file mode 100644
index 000000000..532399152
--- /dev/null
+++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/components/DetailsSection/components/index.ts
@@ -0,0 +1,13 @@
+// @index(['./*', /style/g], f => `export * from '${f.path}';`)
+export * from './CreatedAtDetailsItem';
+export * from './CredentialsDetailsItem';
+export * from './NameDetailsItem';
+export * from './NamespaceDetailsItem';
+export * from './OwnerDetailsItem';
+export * from './ProviderDetailsItem';
+export * from './SecretDetailsItem';
+export * from './TransferNetworkDetailsItem';
+export * from './TypeDetailsItem';
+export * from './URLDetailsItem';
+export * from './VDDKDetailsItem';
+// @endindex