mirror of
https://github.com/ansible/awx.git
synced 2026-01-11 10:00:01 -03:30
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:
parent
1cdd2cad67
commit
4b7b3c7c7d
@ -29,6 +29,10 @@ function ContainerGroupAdd() {
|
||||
try {
|
||||
const { data: response } = await InstanceGroupsAPI.create({
|
||||
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,
|
||||
pod_spec_override: values.override
|
||||
? getPodSpecValue(values.pod_spec_override)
|
||||
|
||||
@ -33,6 +33,8 @@ const initialPodSpec = {
|
||||
const instanceGroupCreateData = {
|
||||
name: 'Fuz',
|
||||
credential: { id: 71, name: 'CG' },
|
||||
max_concurrent_jobs: 0,
|
||||
max_forks: 0,
|
||||
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',
|
||||
};
|
||||
|
||||
@ -9,7 +9,12 @@ import AlertModal from 'components/AlertModal';
|
||||
import ErrorDetail from 'components/ErrorDetail';
|
||||
import { CardBody, CardActionsRow } from 'components/Card';
|
||||
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 { jsonToYaml, isJsonString } from 'util/yaml';
|
||||
import { InstanceGroupsAPI } from 'api';
|
||||
@ -47,6 +52,20 @@ function ContainerGroupDetails({ instanceGroup }) {
|
||||
value={t`Container group`}
|
||||
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 && (
|
||||
<Detail
|
||||
label={t`Credential`}
|
||||
|
||||
@ -23,6 +23,8 @@ const instanceGroup = {
|
||||
created: '2020-09-03T18:26:47.113934Z',
|
||||
modified: '2020-09-03T19:34:23.244694Z',
|
||||
capacity: 0,
|
||||
max_concurrent_jobs: 0,
|
||||
max_forks: 0,
|
||||
committed_capacity: 0,
|
||||
consumed_capacity: 0,
|
||||
percent_capacity_remaining: 0.0,
|
||||
|
||||
@ -39,6 +39,10 @@ function ContainerGroupEdit({ instanceGroup }) {
|
||||
name: values.name,
|
||||
credential: values.credential ? values.credential.id : 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,
|
||||
});
|
||||
history.push(detailsIUrl);
|
||||
|
||||
@ -34,6 +34,8 @@ const instanceGroup = {
|
||||
policy_instance_percentage: 0,
|
||||
policy_instance_minimum: 0,
|
||||
policy_instance_list: [],
|
||||
max_concurrent_jobs: 0,
|
||||
max_forks: 0,
|
||||
pod_spec_override: '',
|
||||
summary_fields: {
|
||||
credential: {
|
||||
@ -144,6 +146,8 @@ describe('<ContainerGroupEdit/>', () => {
|
||||
...updatedInstanceGroup,
|
||||
credential: 12,
|
||||
pod_spec_override: null,
|
||||
max_concurrent_jobs: 0,
|
||||
max_forks: 0,
|
||||
is_container_group: true,
|
||||
});
|
||||
expect(history.location.pathname).toEqual(
|
||||
|
||||
@ -42,6 +42,8 @@ const instanceGroup = {
|
||||
credential: null,
|
||||
policy_instance_percentage: 100,
|
||||
policy_instance_minimum: 0,
|
||||
max_concurrent_jobs: 0,
|
||||
max_forks: 0,
|
||||
policy_instance_list: ['receptor-1', 'receptor-2'],
|
||||
pod_spec_override: '',
|
||||
summary_fields: {
|
||||
|
||||
@ -73,6 +73,20 @@ function InstanceGroupDetails({ instanceGroup }) {
|
||||
dataCy="instance-group-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 ? (
|
||||
<DetailBadge
|
||||
label={t`Used capacity`}
|
||||
|
||||
@ -19,6 +19,8 @@ const instanceGroups = [
|
||||
policy_instance_minimum: 10,
|
||||
policy_instance_percentage: 50,
|
||||
percent_capacity_remaining: 60,
|
||||
max_concurrent_jobs: 0,
|
||||
max_forks: 0,
|
||||
is_container_group: false,
|
||||
created: '2020-07-21T18:41:02.818081Z',
|
||||
modified: '2020-07-24T20:32:03.121079Z',
|
||||
@ -38,6 +40,8 @@ const instanceGroups = [
|
||||
policy_instance_minimum: 0,
|
||||
policy_instance_percentage: 0,
|
||||
percent_capacity_remaining: 0,
|
||||
max_concurrent_jobs: 0,
|
||||
max_forks: 0,
|
||||
is_container_group: true,
|
||||
created: '2020-07-21T18:41:02.818081Z',
|
||||
modified: '2020-07-24T20:32:03.121079Z',
|
||||
|
||||
@ -11,7 +11,7 @@ import FormField, {
|
||||
CheckboxField,
|
||||
} from 'components/FormField';
|
||||
import FormActionGroup from 'components/FormActionGroup';
|
||||
import { required } from 'util/validators';
|
||||
import { required, minMaxValue } from 'util/validators';
|
||||
import {
|
||||
FormColumnLayout,
|
||||
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.`}
|
||||
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`}>
|
||||
<FormCheckboxLayout>
|
||||
@ -97,6 +117,8 @@ function ContainerGroupForm({
|
||||
|
||||
const initialValues = {
|
||||
name: instanceGroup?.name || '',
|
||||
max_concurrent_jobs: instanceGroup.max_concurrent_jobs || 0,
|
||||
max_forks: instanceGroup.max_forks || 0,
|
||||
credential: instanceGroup?.summary_fields?.credential,
|
||||
pod_spec_override: isCheckboxChecked
|
||||
? instanceGroup?.pod_spec_override
|
||||
|
||||
@ -42,6 +42,26 @@ function InstanceGroupFormFields() {
|
||||
assigned to this group when new instances come online.`}
|
||||
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 || '',
|
||||
policy_instance_minimum: instanceGroup.policy_instance_minimum || 0,
|
||||
policy_instance_percentage: instanceGroup.policy_instance_percentage || 0,
|
||||
max_concurrent_jobs: instanceGroup.max_concurrent_jobs || 0,
|
||||
max_forks: instanceGroup.max_forks || 0,
|
||||
};
|
||||
return (
|
||||
<Formik
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user