mirror of
https://github.com/ZwareBear/awx.git
synced 2026-03-20 07:43:35 -05:00
update UI for max_forks and max_concurrent_jobs
This includes updates for container groups and instance groups. Includes updates to ui test data with new fields
This commit is contained in:
@@ -29,6 +29,10 @@ function ContainerGroupAdd() {
|
|||||||
try {
|
try {
|
||||||
const { data: response } = await InstanceGroupsAPI.create({
|
const { data: response } = await InstanceGroupsAPI.create({
|
||||||
name: values.name,
|
name: values.name,
|
||||||
|
max_forks: values.max_forks ? values.max_forks : 0,
|
||||||
|
max_concurrent_jobs: values.max_concurrent_jobs
|
||||||
|
? values.max_concurrent_jobs
|
||||||
|
: 0,
|
||||||
credential: values?.credential?.id,
|
credential: values?.credential?.id,
|
||||||
pod_spec_override: values.override
|
pod_spec_override: values.override
|
||||||
? getPodSpecValue(values.pod_spec_override)
|
? getPodSpecValue(values.pod_spec_override)
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ const initialPodSpec = {
|
|||||||
const instanceGroupCreateData = {
|
const instanceGroupCreateData = {
|
||||||
name: 'Fuz',
|
name: 'Fuz',
|
||||||
credential: { id: 71, name: 'CG' },
|
credential: { id: 71, name: 'CG' },
|
||||||
|
max_concurrent_jobs: 0,
|
||||||
|
max_forks: 0,
|
||||||
pod_spec_override:
|
pod_spec_override:
|
||||||
'apiVersion: v1\nkind: Pod\nmetadata:\n namespace: default\nspec:\n containers:\n - image: ansible/ansible-runner\n tty: true\n stdin: true\n imagePullPolicy: Always\n args:\n - sleep\n - infinity\n - test',
|
'apiVersion: v1\nkind: Pod\nmetadata:\n namespace: default\nspec:\n containers:\n - image: ansible/ansible-runner\n tty: true\n stdin: true\n imagePullPolicy: Always\n args:\n - sleep\n - infinity\n - test',
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -9,7 +9,12 @@ import AlertModal from 'components/AlertModal';
|
|||||||
import ErrorDetail from 'components/ErrorDetail';
|
import ErrorDetail from 'components/ErrorDetail';
|
||||||
import { CardBody, CardActionsRow } from 'components/Card';
|
import { CardBody, CardActionsRow } from 'components/Card';
|
||||||
import DeleteButton from 'components/DeleteButton';
|
import DeleteButton from 'components/DeleteButton';
|
||||||
import { Detail, DetailList, UserDateDetail } from 'components/DetailList';
|
import {
|
||||||
|
Detail,
|
||||||
|
DetailList,
|
||||||
|
UserDateDetail,
|
||||||
|
DetailBadge,
|
||||||
|
} from 'components/DetailList';
|
||||||
import useRequest, { useDismissableError } from 'hooks/useRequest';
|
import useRequest, { useDismissableError } from 'hooks/useRequest';
|
||||||
import { jsonToYaml, isJsonString } from 'util/yaml';
|
import { jsonToYaml, isJsonString } from 'util/yaml';
|
||||||
import { InstanceGroupsAPI } from 'api';
|
import { InstanceGroupsAPI } from 'api';
|
||||||
@@ -47,6 +52,20 @@ function ContainerGroupDetails({ instanceGroup }) {
|
|||||||
value={t`Container group`}
|
value={t`Container group`}
|
||||||
dataCy="container-group-type"
|
dataCy="container-group-type"
|
||||||
/>
|
/>
|
||||||
|
<DetailBadge
|
||||||
|
label={t`Max concurrent jobs`}
|
||||||
|
dataCy="instance-group-max-concurrent-jobs"
|
||||||
|
helpText={t`Maximum number of jobs to run concurrently on this group.
|
||||||
|
Zero means no limit will be enforced.`}
|
||||||
|
content={instanceGroup.max_concurrent_jobs}
|
||||||
|
/>
|
||||||
|
<DetailBadge
|
||||||
|
label={t`Max forks`}
|
||||||
|
dataCy="instance-group-max-forks"
|
||||||
|
helpText={t`Maximum number of forks to allow across all jobs running concurrently on this group.
|
||||||
|
Zero means no limit will be enforced.`}
|
||||||
|
content={instanceGroup.max_forks}
|
||||||
|
/>
|
||||||
{instanceGroup.summary_fields.credential && (
|
{instanceGroup.summary_fields.credential && (
|
||||||
<Detail
|
<Detail
|
||||||
label={t`Credential`}
|
label={t`Credential`}
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ const instanceGroup = {
|
|||||||
created: '2020-09-03T18:26:47.113934Z',
|
created: '2020-09-03T18:26:47.113934Z',
|
||||||
modified: '2020-09-03T19:34:23.244694Z',
|
modified: '2020-09-03T19:34:23.244694Z',
|
||||||
capacity: 0,
|
capacity: 0,
|
||||||
|
max_concurrent_jobs: 0,
|
||||||
|
max_forks: 0,
|
||||||
committed_capacity: 0,
|
committed_capacity: 0,
|
||||||
consumed_capacity: 0,
|
consumed_capacity: 0,
|
||||||
percent_capacity_remaining: 0.0,
|
percent_capacity_remaining: 0.0,
|
||||||
|
|||||||
@@ -39,6 +39,10 @@ function ContainerGroupEdit({ instanceGroup }) {
|
|||||||
name: values.name,
|
name: values.name,
|
||||||
credential: values.credential ? values.credential.id : null,
|
credential: values.credential ? values.credential.id : null,
|
||||||
pod_spec_override: values.override ? values.pod_spec_override : null,
|
pod_spec_override: values.override ? values.pod_spec_override : null,
|
||||||
|
max_forks: values.max_forks ? values.max_forks : 0,
|
||||||
|
max_concurrent_jobs: values.max_concurrent_jobs
|
||||||
|
? values.max_concurrent_jobs
|
||||||
|
: 0,
|
||||||
is_container_group: true,
|
is_container_group: true,
|
||||||
});
|
});
|
||||||
history.push(detailsIUrl);
|
history.push(detailsIUrl);
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ const instanceGroup = {
|
|||||||
policy_instance_percentage: 0,
|
policy_instance_percentage: 0,
|
||||||
policy_instance_minimum: 0,
|
policy_instance_minimum: 0,
|
||||||
policy_instance_list: [],
|
policy_instance_list: [],
|
||||||
|
max_concurrent_jobs: 0,
|
||||||
|
max_forks: 0,
|
||||||
pod_spec_override: '',
|
pod_spec_override: '',
|
||||||
summary_fields: {
|
summary_fields: {
|
||||||
credential: {
|
credential: {
|
||||||
@@ -144,6 +146,8 @@ describe('<ContainerGroupEdit/>', () => {
|
|||||||
...updatedInstanceGroup,
|
...updatedInstanceGroup,
|
||||||
credential: 12,
|
credential: 12,
|
||||||
pod_spec_override: null,
|
pod_spec_override: null,
|
||||||
|
max_concurrent_jobs: 0,
|
||||||
|
max_forks: 0,
|
||||||
is_container_group: true,
|
is_container_group: true,
|
||||||
});
|
});
|
||||||
expect(history.location.pathname).toEqual(
|
expect(history.location.pathname).toEqual(
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ const instanceGroup = {
|
|||||||
credential: null,
|
credential: null,
|
||||||
policy_instance_percentage: 100,
|
policy_instance_percentage: 100,
|
||||||
policy_instance_minimum: 0,
|
policy_instance_minimum: 0,
|
||||||
|
max_concurrent_jobs: 0,
|
||||||
|
max_forks: 0,
|
||||||
policy_instance_list: ['receptor-1', 'receptor-2'],
|
policy_instance_list: ['receptor-1', 'receptor-2'],
|
||||||
pod_spec_override: '',
|
pod_spec_override: '',
|
||||||
summary_fields: {
|
summary_fields: {
|
||||||
|
|||||||
@@ -73,6 +73,20 @@ function InstanceGroupDetails({ instanceGroup }) {
|
|||||||
dataCy="instance-group-policy-instance-percentage"
|
dataCy="instance-group-policy-instance-percentage"
|
||||||
content={`${instanceGroup.policy_instance_percentage} %`}
|
content={`${instanceGroup.policy_instance_percentage} %`}
|
||||||
/>
|
/>
|
||||||
|
<DetailBadge
|
||||||
|
label={t`Max concurrent jobs`}
|
||||||
|
dataCy="instance-group-max-concurrent-jobs"
|
||||||
|
helpText={t`Maximum number of jobs to run concurrently on this group.
|
||||||
|
Zero means no limit will be enforced.`}
|
||||||
|
content={instanceGroup.max_concurrent_jobs}
|
||||||
|
/>
|
||||||
|
<DetailBadge
|
||||||
|
label={t`Max forks`}
|
||||||
|
dataCy="instance-group-max-forks"
|
||||||
|
helpText={t`Maximum number of forks to allow across all jobs running concurrently on this group.
|
||||||
|
Zero means no limit will be enforced.`}
|
||||||
|
content={instanceGroup.max_forks}
|
||||||
|
/>
|
||||||
{instanceGroup.capacity ? (
|
{instanceGroup.capacity ? (
|
||||||
<DetailBadge
|
<DetailBadge
|
||||||
label={t`Used capacity`}
|
label={t`Used capacity`}
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ const instanceGroups = [
|
|||||||
policy_instance_minimum: 10,
|
policy_instance_minimum: 10,
|
||||||
policy_instance_percentage: 50,
|
policy_instance_percentage: 50,
|
||||||
percent_capacity_remaining: 60,
|
percent_capacity_remaining: 60,
|
||||||
|
max_concurrent_jobs: 0,
|
||||||
|
max_forks: 0,
|
||||||
is_container_group: false,
|
is_container_group: false,
|
||||||
created: '2020-07-21T18:41:02.818081Z',
|
created: '2020-07-21T18:41:02.818081Z',
|
||||||
modified: '2020-07-24T20:32:03.121079Z',
|
modified: '2020-07-24T20:32:03.121079Z',
|
||||||
@@ -38,6 +40,8 @@ const instanceGroups = [
|
|||||||
policy_instance_minimum: 0,
|
policy_instance_minimum: 0,
|
||||||
policy_instance_percentage: 0,
|
policy_instance_percentage: 0,
|
||||||
percent_capacity_remaining: 0,
|
percent_capacity_remaining: 0,
|
||||||
|
max_concurrent_jobs: 0,
|
||||||
|
max_forks: 0,
|
||||||
is_container_group: true,
|
is_container_group: true,
|
||||||
created: '2020-07-21T18:41:02.818081Z',
|
created: '2020-07-21T18:41:02.818081Z',
|
||||||
modified: '2020-07-24T20:32:03.121079Z',
|
modified: '2020-07-24T20:32:03.121079Z',
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import FormField, {
|
|||||||
CheckboxField,
|
CheckboxField,
|
||||||
} from 'components/FormField';
|
} from 'components/FormField';
|
||||||
import FormActionGroup from 'components/FormActionGroup';
|
import FormActionGroup from 'components/FormActionGroup';
|
||||||
import { required } from 'util/validators';
|
import { required, minMaxValue } from 'util/validators';
|
||||||
import {
|
import {
|
||||||
FormColumnLayout,
|
FormColumnLayout,
|
||||||
FormFullWidthLayout,
|
FormFullWidthLayout,
|
||||||
@@ -57,6 +57,26 @@ function ContainerGroupFormFields({ instanceGroup }) {
|
|||||||
tooltip={t`Credential to authenticate with Kubernetes or OpenShift. Must be of type "Kubernetes/OpenShift API Bearer Token". If left blank, the underlying Pod's service account will be used.`}
|
tooltip={t`Credential to authenticate with Kubernetes or OpenShift. Must be of type "Kubernetes/OpenShift API Bearer Token". If left blank, the underlying Pod's service account will be used.`}
|
||||||
autoPopulate={!instanceGroup?.id}
|
autoPopulate={!instanceGroup?.id}
|
||||||
/>
|
/>
|
||||||
|
<FormField
|
||||||
|
id="instance-group-max-concurrent-jobs"
|
||||||
|
label={t`Max concurrent jobs`}
|
||||||
|
name="max_concurrent_jobs"
|
||||||
|
type="number"
|
||||||
|
min="0"
|
||||||
|
validate={minMaxValue(0, 2147483647)}
|
||||||
|
tooltip={t`Maximum number of jobs to run concurrently on this group.
|
||||||
|
Zero means no limit will be enforced.`}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
id="instance-group-max-forks"
|
||||||
|
label={t`Max forks`}
|
||||||
|
name="max_forks"
|
||||||
|
type="number"
|
||||||
|
min="0"
|
||||||
|
validate={minMaxValue(0, 2147483647)}
|
||||||
|
tooltip={t`Maximum number of forks to allow across all jobs running concurrently on this group.
|
||||||
|
Zero means no limit will be enforced.`}
|
||||||
|
/>
|
||||||
|
|
||||||
<FormGroup fieldId="container-groups-option-checkbox" label={t`Options`}>
|
<FormGroup fieldId="container-groups-option-checkbox" label={t`Options`}>
|
||||||
<FormCheckboxLayout>
|
<FormCheckboxLayout>
|
||||||
@@ -97,6 +117,8 @@ function ContainerGroupForm({
|
|||||||
|
|
||||||
const initialValues = {
|
const initialValues = {
|
||||||
name: instanceGroup?.name || '',
|
name: instanceGroup?.name || '',
|
||||||
|
max_concurrent_jobs: instanceGroup.max_concurrent_jobs || 0,
|
||||||
|
max_forks: instanceGroup.max_forks || 0,
|
||||||
credential: instanceGroup?.summary_fields?.credential,
|
credential: instanceGroup?.summary_fields?.credential,
|
||||||
pod_spec_override: isCheckboxChecked
|
pod_spec_override: isCheckboxChecked
|
||||||
? instanceGroup?.pod_spec_override
|
? instanceGroup?.pod_spec_override
|
||||||
|
|||||||
@@ -42,6 +42,26 @@ function InstanceGroupFormFields() {
|
|||||||
assigned to this group when new instances come online.`}
|
assigned to this group when new instances come online.`}
|
||||||
validate={minMaxValue(0, 100)}
|
validate={minMaxValue(0, 100)}
|
||||||
/>
|
/>
|
||||||
|
<FormField
|
||||||
|
id="instance-group-max-concurrent-jobs"
|
||||||
|
label={t`Max concurrent jobs`}
|
||||||
|
name="max_concurrent_jobs"
|
||||||
|
type="number"
|
||||||
|
min="0"
|
||||||
|
validate={minMaxValue(0, 2147483647)}
|
||||||
|
tooltip={t`Maximum number of jobs to run concurrently on this group.
|
||||||
|
Zero means no limit will be enforced.`}
|
||||||
|
/>
|
||||||
|
<FormField
|
||||||
|
id="instance-group-max-forks"
|
||||||
|
label={t`Max forks`}
|
||||||
|
name="max_forks"
|
||||||
|
type="number"
|
||||||
|
min="0"
|
||||||
|
validate={minMaxValue(0, 2147483647)}
|
||||||
|
tooltip={t`Maximum number of forks to allow across all jobs running concurrently on this group.
|
||||||
|
Zero means no limit will be enforced.`}
|
||||||
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -57,6 +77,8 @@ function InstanceGroupForm({
|
|||||||
name: instanceGroup.name || '',
|
name: instanceGroup.name || '',
|
||||||
policy_instance_minimum: instanceGroup.policy_instance_minimum || 0,
|
policy_instance_minimum: instanceGroup.policy_instance_minimum || 0,
|
||||||
policy_instance_percentage: instanceGroup.policy_instance_percentage || 0,
|
policy_instance_percentage: instanceGroup.policy_instance_percentage || 0,
|
||||||
|
max_concurrent_jobs: instanceGroup.max_concurrent_jobs || 0,
|
||||||
|
max_forks: instanceGroup.max_forks || 0,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<Formik
|
<Formik
|
||||||
|
|||||||
Reference in New Issue
Block a user