Enable source vars for all inventory types

This commit is contained in:
Marliana Lara
2020-10-30 14:39:40 -04:00
parent 48ecd2400c
commit 330625b565
13 changed files with 300 additions and 25 deletions

View File

@@ -1,7 +1,7 @@
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { useField, useFormikContext } from 'formik'; import { useField, useFormikContext } from 'formik';
import { withI18n } from '@lingui/react'; import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro'; import { t, Trans } from '@lingui/macro';
import CredentialLookup from '../../../../components/Lookup/CredentialLookup'; import CredentialLookup from '../../../../components/Lookup/CredentialLookup';
import { import {
OptionsField, OptionsField,
@@ -27,6 +27,11 @@ const AzureSubForm = ({ autoPopulateCredential, i18n }) => {
[setFieldValue] [setFieldValue]
); );
const pluginLink =
'http://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html#inventory-plugins';
const configLink =
'https://docs.ansible.com/ansible/latest/collections/azure/azcollection/azure_rm_inventory.html';
return ( return (
<> <>
<CredentialLookup <CredentialLookup
@@ -45,7 +50,26 @@ const AzureSubForm = ({ autoPopulateCredential, i18n }) => {
<EnabledVarField /> <EnabledVarField />
<EnabledValueField /> <EnabledValueField />
<OptionsField /> <OptionsField />
<SourceVarsField /> <SourceVarsField
popoverContent={
<>
<Trans>
Enter variables to configure the inventory source. For a detailed
description of how to configure this plugin, see{' '}
<a href={pluginLink} target="_blank" rel="noopener noreferrer">
Inventory Plugins
</a>{' '}
in the documentation and the{' '}
<a href={configLink} target="_blank" rel="noopener noreferrer">
azure_rm
</a>{' '}
plugin configuration guide.
</Trans>
<br />
<br />
</>
}
/>
</> </>
); );
}; };

View File

@@ -1,7 +1,7 @@
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { useField, useFormikContext } from 'formik'; import { useField, useFormikContext } from 'formik';
import { withI18n } from '@lingui/react'; import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro'; import { t, Trans } from '@lingui/macro';
import CredentialLookup from '../../../../components/Lookup/CredentialLookup'; import CredentialLookup from '../../../../components/Lookup/CredentialLookup';
import { import {
OptionsField, OptionsField,
@@ -27,6 +27,9 @@ const CloudFormsSubForm = ({ i18n }) => {
[setFieldValue] [setFieldValue]
); );
const configLink =
'https://github.com/ansible-collections/community.general/blob/main/scripts/inventory/cloudforms.ini';
return ( return (
<> <>
<CredentialLookup <CredentialLookup
@@ -44,7 +47,21 @@ const CloudFormsSubForm = ({ i18n }) => {
<EnabledVarField /> <EnabledVarField />
<EnabledValueField /> <EnabledValueField />
<OptionsField /> <OptionsField />
<SourceVarsField /> <SourceVarsField
popoverContent={
<>
<Trans>
Override variables found in cloudforms.ini and used by the
inventory update script. For an example variable configuration{' '}
<a href={configLink} target="_blank" rel="noopener noreferrer">
view cloudforms.ini in the Ansible Collections github repo.
</a>
</Trans>
<br />
<br />
</>
}
/>
</> </>
); );
}; };

View File

@@ -1,7 +1,7 @@
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { useField, useFormikContext } from 'formik'; import { useField, useFormikContext } from 'formik';
import { withI18n } from '@lingui/react'; import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro'; import { t, Trans } from '@lingui/macro';
import CredentialLookup from '../../../../components/Lookup/CredentialLookup'; import CredentialLookup from '../../../../components/Lookup/CredentialLookup';
import { import {
OptionsField, OptionsField,
@@ -23,6 +23,11 @@ const EC2SubForm = ({ i18n }) => {
[setFieldValue] [setFieldValue]
); );
const pluginLink =
'http://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html#inventory-plugins';
const configLink =
'https://docs.ansible.com/ansible/latest/collections/amazon/aws/aws_ec2_inventory.html';
return ( return (
<> <>
<CredentialLookup <CredentialLookup
@@ -36,7 +41,26 @@ const EC2SubForm = ({ i18n }) => {
<EnabledVarField /> <EnabledVarField />
<EnabledValueField /> <EnabledValueField />
<OptionsField /> <OptionsField />
<SourceVarsField /> <SourceVarsField
popoverContent={
<>
<Trans>
Enter variables to configure the inventory source. For a detailed
description of how to configure this plugin, see{' '}
<a href={pluginLink} target="_blank" rel="noopener noreferrer">
Inventory Plugins
</a>{' '}
in the documentation and the{' '}
<a href={configLink} target="_blank" rel="noopener noreferrer">
aws_ec2
</a>{' '}
plugin configuration guide.
</Trans>
<br />
<br />
</>
}
/>
</> </>
); );
}; };

View File

@@ -1,7 +1,7 @@
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { useField, useFormikContext } from 'formik'; import { useField, useFormikContext } from 'formik';
import { withI18n } from '@lingui/react'; import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro'; import { t, Trans } from '@lingui/macro';
import CredentialLookup from '../../../../components/Lookup/CredentialLookup'; import CredentialLookup from '../../../../components/Lookup/CredentialLookup';
import { import {
OptionsField, OptionsField,
@@ -9,6 +9,7 @@ import {
EnabledVarField, EnabledVarField,
EnabledValueField, EnabledValueField,
HostFilterField, HostFilterField,
SourceVarsField,
} from './SharedFields'; } from './SharedFields';
import { required } from '../../../../util/validators'; import { required } from '../../../../util/validators';
@@ -26,6 +27,11 @@ const GCESubForm = ({ autoPopulateCredential, i18n }) => {
[setFieldValue] [setFieldValue]
); );
const pluginLink =
'http://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html#inventory-plugins';
const configLink =
'https://docs.ansible.com/ansible/latest/collections/google/cloud/gcp_compute_inventory.html';
return ( return (
<> <>
<CredentialLookup <CredentialLookup
@@ -44,6 +50,26 @@ const GCESubForm = ({ autoPopulateCredential, i18n }) => {
<EnabledVarField /> <EnabledVarField />
<EnabledValueField /> <EnabledValueField />
<OptionsField /> <OptionsField />
<SourceVarsField
popoverContent={
<>
<Trans>
Enter variables to configure the inventory source. For a detailed
description of how to configure this plugin, see{' '}
<a href={pluginLink} target="_blank" rel="noopener noreferrer">
Inventory Plugins
</a>{' '}
in the documentation and the{' '}
<a href={configLink} target="_blank" rel="noopener noreferrer">
gcp_compute
</a>{' '}
plugin configuration guide.
</Trans>
<br />
<br />
</>
}
/>
</> </>
); );
}; };

View File

@@ -56,6 +56,9 @@ describe('<GCESubForm />', () => {
expect( expect(
wrapper.find('FormGroup[label="Cache timeout (seconds)"]') wrapper.find('FormGroup[label="Cache timeout (seconds)"]')
).toHaveLength(1); ).toHaveLength(1);
expect(
wrapper.find('VariablesField[label="Source variables"]')
).toHaveLength(1);
}); });
test('should make expected api calls', () => { test('should make expected api calls', () => {

View File

@@ -1,7 +1,7 @@
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { useField, useFormikContext } from 'formik'; import { useField, useFormikContext } from 'formik';
import { withI18n } from '@lingui/react'; import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro'; import { t, Trans } from '@lingui/macro';
import CredentialLookup from '../../../../components/Lookup/CredentialLookup'; import CredentialLookup from '../../../../components/Lookup/CredentialLookup';
import { import {
OptionsField, OptionsField,
@@ -27,6 +27,11 @@ const OpenStackSubForm = ({ autoPopulateCredential, i18n }) => {
[setFieldValue] [setFieldValue]
); );
const pluginLink =
'http://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html#inventory-plugins';
const configLink =
'https://docs.ansible.com/ansible/latest/collections/openstack/cloud/openstack_inventory.html';
return ( return (
<> <>
<CredentialLookup <CredentialLookup
@@ -45,7 +50,26 @@ const OpenStackSubForm = ({ autoPopulateCredential, i18n }) => {
<EnabledVarField /> <EnabledVarField />
<EnabledValueField /> <EnabledValueField />
<OptionsField /> <OptionsField />
<SourceVarsField /> <SourceVarsField
popoverContent={
<>
<Trans>
Enter variables to configure the inventory source. For a detailed
description of how to configure this plugin, see{' '}
<a href={pluginLink} target="_blank" rel="noopener noreferrer">
Inventory Plugins
</a>{' '}
in the documentation and the{' '}
<a href={configLink} target="_blank" rel="noopener noreferrer">
openstack
</a>{' '}
plugin configuration guide.
</Trans>
<br />
<br />
</>
}
/>
</> </>
); );
}; };

View File

@@ -1,7 +1,7 @@
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { useField, useFormikContext } from 'formik'; import { useField, useFormikContext } from 'formik';
import { withI18n } from '@lingui/react'; import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro'; import { t, Trans } from '@lingui/macro';
import CredentialLookup from '../../../../components/Lookup/CredentialLookup'; import CredentialLookup from '../../../../components/Lookup/CredentialLookup';
import { import {
OptionsField, OptionsField,
@@ -27,6 +27,11 @@ const SatelliteSubForm = ({ autoPopulateCredential, i18n }) => {
[setFieldValue] [setFieldValue]
); );
const pluginLink =
'http://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html#inventory-plugins';
const configLink =
'https://docs.ansible.com/ansible/latest/collections/theforeman/foreman/foreman_inventory.html';
return ( return (
<> <>
<CredentialLookup <CredentialLookup
@@ -45,7 +50,26 @@ const SatelliteSubForm = ({ autoPopulateCredential, i18n }) => {
<EnabledVarField /> <EnabledVarField />
<EnabledValueField /> <EnabledValueField />
<OptionsField /> <OptionsField />
<SourceVarsField /> <SourceVarsField
popoverContent={
<>
<Trans>
Enter variables to configure the inventory source. For a detailed
description of how to configure this plugin, see{' '}
<a href={pluginLink} target="_blank" rel="noopener noreferrer">
Inventory Plugins
</a>{' '}
in the documentation and the{' '}
<a href={configLink} target="_blank" rel="noopener noreferrer">
foreman
</a>{' '}
plugin configuration guide.
</Trans>
<br />
<br />
</>
}
/>
</> </>
); );
}; };

View File

@@ -1,6 +1,6 @@
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import { withI18n } from '@lingui/react'; import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro'; import { t, Trans } from '@lingui/macro';
import { useField } from 'formik'; import { useField } from 'formik';
import { FormGroup } from '@patternfly/react-core'; import { FormGroup } from '@patternfly/react-core';
import { minMaxValue, regExp } from '../../../../util/validators'; import { minMaxValue, regExp } from '../../../../util/validators';
@@ -13,15 +13,66 @@ import {
} from '../../../../components/FormLayout'; } from '../../../../components/FormLayout';
import Popover from '../../../../components/Popover'; import Popover from '../../../../components/Popover';
export const SourceVarsField = withI18n()(({ i18n }) => ( export const SourceVarsField = withI18n()(({ i18n, popoverContent }) => {
<FormFullWidthLayout> const jsonExample = `
<VariablesField {
id="source_vars" "somevar": "somevalue"
name="source_vars" "somepassword": "Magic"
label={i18n._(t`Source variables`)} }
/> `;
</FormFullWidthLayout> const yamlExample = `
)); ---
somevar: somevalue
somepassword: magic
`;
return (
<FormFullWidthLayout>
<VariablesField
id="source_vars"
name="source_vars"
label={i18n._(t`Source variables`)}
tooltip={
<div>
{popoverContent}
<Trans>
Enter variables using either JSON or YAML syntax. Use the radio
button to toggle between the two.
</Trans>
<br />
<br />
<Trans>JSON:</Trans>
<pre>{jsonExample}</pre>
<br />
<Trans>YAML:</Trans>
<pre>{yamlExample}</pre>
<br />
<Trans>
View JSON examples at{' '}
<a
href="http://www.json.org"
target="_blank"
rel="noopener noreferrer"
>
www.json.org
</a>
</Trans>
<br />
<Trans>
View YAML examples at{' '}
<a
href="http://docs.ansible.com/YAMLSyntax.html"
target="_blank"
rel="noopener noreferrer"
>
docs.ansible.com
</a>
</Trans>
</div>
}
/>
</FormFullWidthLayout>
);
});
export const VerbosityField = withI18n()(({ i18n }) => { export const VerbosityField = withI18n()(({ i18n }) => {
const [field, meta, helpers] = useField('verbosity'); const [field, meta, helpers] = useField('verbosity');

View File

@@ -1,7 +1,7 @@
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { useField, useFormikContext } from 'formik'; import { useField, useFormikContext } from 'formik';
import { withI18n } from '@lingui/react'; import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro'; import { t, Trans } from '@lingui/macro';
import CredentialLookup from '../../../../components/Lookup/CredentialLookup'; import CredentialLookup from '../../../../components/Lookup/CredentialLookup';
import { import {
OptionsField, OptionsField,
@@ -9,6 +9,7 @@ import {
EnabledVarField, EnabledVarField,
EnabledValueField, EnabledValueField,
HostFilterField, HostFilterField,
SourceVarsField,
} from './SharedFields'; } from './SharedFields';
import { required } from '../../../../util/validators'; import { required } from '../../../../util/validators';
@@ -26,6 +27,11 @@ const TowerSubForm = ({ autoPopulateCredential, i18n }) => {
[setFieldValue] [setFieldValue]
); );
const pluginLink =
'http://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html#inventory-plugins';
const configLink =
'https://docs.ansible.com/ansible/latest/collections/awx/awx/tower_inventory.html';
return ( return (
<> <>
<CredentialLookup <CredentialLookup
@@ -44,6 +50,26 @@ const TowerSubForm = ({ autoPopulateCredential, i18n }) => {
<EnabledVarField /> <EnabledVarField />
<EnabledValueField /> <EnabledValueField />
<OptionsField /> <OptionsField />
<SourceVarsField
popoverContent={
<>
<Trans>
Enter variables to configure the inventory source. For a detailed
description of how to configure this plugin, see{' '}
<a href={pluginLink} target="_blank" rel="noopener noreferrer">
Inventory Plugins
</a>{' '}
in the documentation and the{' '}
<a href={configLink} target="_blank" rel="noopener noreferrer">
Tower
</a>{' '}
plugin configuration guide.
</Trans>
<br />
<br />
</>
}
/>
</> </>
); );
}; };

View File

@@ -50,6 +50,9 @@ describe('<TowerSubForm />', () => {
expect( expect(
wrapper.find('FormGroup[label="Cache timeout (seconds)"]') wrapper.find('FormGroup[label="Cache timeout (seconds)"]')
).toHaveLength(1); ).toHaveLength(1);
expect(
wrapper.find('VariablesField[label="Source variables"]')
).toHaveLength(1);
}); });
test('should make expected api calls', () => { test('should make expected api calls', () => {

View File

@@ -1,7 +1,7 @@
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { useField, useFormikContext } from 'formik'; import { useField, useFormikContext } from 'formik';
import { withI18n } from '@lingui/react'; import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro'; import { t, Trans } from '@lingui/macro';
import CredentialLookup from '../../../../components/Lookup/CredentialLookup'; import CredentialLookup from '../../../../components/Lookup/CredentialLookup';
import { import {
OptionsField, OptionsField,
@@ -27,6 +27,11 @@ const VMwareSubForm = ({ autoPopulateCredential, i18n }) => {
[setFieldValue] [setFieldValue]
); );
const pluginLink =
'http://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html#inventory-plugins';
const configLink =
'https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vm_inventory_inventory.html';
return ( return (
<> <>
<CredentialLookup <CredentialLookup
@@ -45,7 +50,26 @@ const VMwareSubForm = ({ autoPopulateCredential, i18n }) => {
<EnabledVarField /> <EnabledVarField />
<EnabledValueField /> <EnabledValueField />
<OptionsField /> <OptionsField />
<SourceVarsField /> <SourceVarsField
popoverContent={
<>
<Trans>
Enter variables to configure the inventory source. For a detailed
description of how to configure this plugin, see{' '}
<a href={pluginLink} target="_blank" rel="noopener noreferrer">
Inventory Plugins
</a>{' '}
in the documentation and the{' '}
<a href={configLink} target="_blank" rel="noopener noreferrer">
vmware_vm_inventory
</a>{' '}
plugin configuration guide.
</Trans>
<br />
<br />
</>
}
/>
</> </>
); );
}; };

View File

@@ -1,7 +1,7 @@
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { useField, useFormikContext } from 'formik'; import { useField, useFormikContext } from 'formik';
import { withI18n } from '@lingui/react'; import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro'; import { t, Trans } from '@lingui/macro';
import CredentialLookup from '../../../../components/Lookup/CredentialLookup'; import CredentialLookup from '../../../../components/Lookup/CredentialLookup';
import { import {
OptionsField, OptionsField,
@@ -9,6 +9,7 @@ import {
EnabledVarField, EnabledVarField,
EnabledValueField, EnabledValueField,
HostFilterField, HostFilterField,
SourceVarsField,
} from './SharedFields'; } from './SharedFields';
import { required } from '../../../../util/validators'; import { required } from '../../../../util/validators';
@@ -26,6 +27,11 @@ const VirtualizationSubForm = ({ autoPopulateCredential, i18n }) => {
[setFieldValue] [setFieldValue]
); );
const pluginLink =
'http://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html#inventory-plugins';
const configLink =
'https://docs.ansible.com/ansible/latest/collections/ovirt/ovirt/ovirt_inventory.html';
return ( return (
<> <>
<CredentialLookup <CredentialLookup
@@ -44,6 +50,26 @@ const VirtualizationSubForm = ({ autoPopulateCredential, i18n }) => {
<EnabledVarField /> <EnabledVarField />
<EnabledValueField /> <EnabledValueField />
<OptionsField /> <OptionsField />
<SourceVarsField
popoverContent={
<>
<Trans>
Enter variables to configure the inventory source. For a detailed
description of how to configure this plugin, see{' '}
<a href={pluginLink} target="_blank" rel="noopener noreferrer">
Inventory Plugins
</a>{' '}
in the documentation and the{' '}
<a href={configLink} target="_blank" rel="noopener noreferrer">
ovirt
</a>{' '}
plugin configuration guide.
</Trans>
<br />
<br />
</>
}
/>
</> </>
); );
}; };

View File

@@ -50,6 +50,9 @@ describe('<VirtualizationSubForm />', () => {
expect( expect(
wrapper.find('FormGroup[label="Cache timeout (seconds)"]') wrapper.find('FormGroup[label="Cache timeout (seconds)"]')
).toHaveLength(1); ).toHaveLength(1);
expect(
wrapper.find('VariablesField[label="Source variables"]')
).toHaveLength(1);
}); });
test('should make expected api calls', () => { test('should make expected api calls', () => {