mirror of
https://github.com/ansible/awx.git
synced 2026-05-07 17:37:37 -02:30
InstanceGroup#is_containerized -> InstanceGroup#is_container_group
This commit is contained in:
@@ -131,7 +131,7 @@ SUMMARIZABLE_FK_FIELDS = {
|
|||||||
'source_script': DEFAULT_SUMMARY_FIELDS,
|
'source_script': DEFAULT_SUMMARY_FIELDS,
|
||||||
'role': ('id', 'role_field'),
|
'role': ('id', 'role_field'),
|
||||||
'notification_template': DEFAULT_SUMMARY_FIELDS,
|
'notification_template': DEFAULT_SUMMARY_FIELDS,
|
||||||
'instance_group': ('id', 'name', 'controller_id', 'is_containerized'),
|
'instance_group': ('id', 'name', 'controller_id', 'is_container_group'),
|
||||||
'insights_credential': DEFAULT_SUMMARY_FIELDS,
|
'insights_credential': DEFAULT_SUMMARY_FIELDS,
|
||||||
'source_credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud', 'credential_type_id'),
|
'source_credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud', 'credential_type_id'),
|
||||||
'target_credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud', 'credential_type_id'),
|
'target_credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud', 'credential_type_id'),
|
||||||
@@ -4768,7 +4768,7 @@ class InstanceGroupSerializer(BaseSerializer):
|
|||||||
'Isolated groups have a designated controller group.'),
|
'Isolated groups have a designated controller group.'),
|
||||||
read_only=True
|
read_only=True
|
||||||
)
|
)
|
||||||
is_containerized = serializers.BooleanField(
|
is_container_group = serializers.BooleanField(
|
||||||
help_text=_('Indicates whether instances in this group are containerized.'
|
help_text=_('Indicates whether instances in this group are containerized.'
|
||||||
'Containerized groups have a designated Openshift or Kubernetes cluster.'),
|
'Containerized groups have a designated Openshift or Kubernetes cluster.'),
|
||||||
read_only=True
|
read_only=True
|
||||||
@@ -4798,7 +4798,7 @@ class InstanceGroupSerializer(BaseSerializer):
|
|||||||
fields = ("id", "type", "url", "related", "name", "created", "modified",
|
fields = ("id", "type", "url", "related", "name", "created", "modified",
|
||||||
"capacity", "committed_capacity", "consumed_capacity",
|
"capacity", "committed_capacity", "consumed_capacity",
|
||||||
"percent_capacity_remaining", "jobs_running", "jobs_total",
|
"percent_capacity_remaining", "jobs_running", "jobs_total",
|
||||||
"instances", "controller", "is_controller", "is_isolated", "is_containerized", "credential",
|
"instances", "controller", "is_controller", "is_isolated", "is_container_group", "credential",
|
||||||
"policy_instance_percentage", "policy_instance_minimum", "policy_instance_list",
|
"policy_instance_percentage", "policy_instance_minimum", "policy_instance_list",
|
||||||
"pod_spec_override", "summary_fields")
|
"pod_spec_override", "summary_fields")
|
||||||
|
|
||||||
@@ -4823,17 +4823,17 @@ class InstanceGroupSerializer(BaseSerializer):
|
|||||||
raise serializers.ValidationError(_('Isolated instances may not be added or removed from instances groups via the API.'))
|
raise serializers.ValidationError(_('Isolated instances may not be added or removed from instances groups via the API.'))
|
||||||
if self.instance and self.instance.controller_id is not None:
|
if self.instance and self.instance.controller_id is not None:
|
||||||
raise serializers.ValidationError(_('Isolated instance group membership may not be managed via the API.'))
|
raise serializers.ValidationError(_('Isolated instance group membership may not be managed via the API.'))
|
||||||
if value and self.instance and self.instance.is_containerized:
|
if value and self.instance and self.instance.is_container_group:
|
||||||
raise serializers.ValidationError(_('Containerized instances may not be managed via the API'))
|
raise serializers.ValidationError(_('Containerized instances may not be managed via the API'))
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def validate_policy_instance_percentage(self, value):
|
def validate_policy_instance_percentage(self, value):
|
||||||
if value and self.instance and self.instance.is_containerized:
|
if value and self.instance and self.instance.is_container_group:
|
||||||
raise serializers.ValidationError(_('Containerized instances may not be managed via the API'))
|
raise serializers.ValidationError(_('Containerized instances may not be managed via the API'))
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def validate_policy_instance_minimum(self, value):
|
def validate_policy_instance_minimum(self, value):
|
||||||
if value and self.instance and self.instance.is_containerized:
|
if value and self.instance and self.instance.is_container_group:
|
||||||
raise serializers.ValidationError(_('Containerized instances may not be managed via the API'))
|
raise serializers.ValidationError(_('Containerized instances may not be managed via the API'))
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|||||||
@@ -397,7 +397,7 @@ class InstanceGroupDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAP
|
|||||||
permission_classes = (InstanceGroupTowerPermission,)
|
permission_classes = (InstanceGroupTowerPermission,)
|
||||||
|
|
||||||
def update_raw_data(self, data):
|
def update_raw_data(self, data):
|
||||||
if self.get_object().is_containerized:
|
if self.get_object().is_container_group:
|
||||||
data.pop('policy_instance_percentage', None)
|
data.pop('policy_instance_percentage', None)
|
||||||
data.pop('policy_instance_minimum', None)
|
data.pop('policy_instance_minimum', None)
|
||||||
data.pop('policy_instance_list', None)
|
data.pop('policy_instance_list', None)
|
||||||
|
|||||||
@@ -151,8 +151,8 @@ class AdHocCommand(UnifiedJob, JobNotificationMixin):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_containerized(self):
|
def is_container_group_task(self):
|
||||||
return bool(self.instance_group and self.instance_group.is_containerized)
|
return bool(self.instance_group and self.instance_group.is_container_group)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def can_run_containerized(self):
|
def can_run_containerized(self):
|
||||||
|
|||||||
@@ -247,7 +247,7 @@ class InstanceGroup(HasPolicyEditsMixin, BaseModel, RelatedJobsMixin):
|
|||||||
return bool(self.controller)
|
return bool(self.controller)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_containerized(self):
|
def is_container_group(self):
|
||||||
return bool(self.credential and self.credential.kubernetes)
|
return bool(self.credential and self.credential.kubernetes)
|
||||||
|
|
||||||
'''
|
'''
|
||||||
@@ -306,9 +306,9 @@ def schedule_policy_task():
|
|||||||
@receiver(post_save, sender=InstanceGroup)
|
@receiver(post_save, sender=InstanceGroup)
|
||||||
def on_instance_group_saved(sender, instance, created=False, raw=False, **kwargs):
|
def on_instance_group_saved(sender, instance, created=False, raw=False, **kwargs):
|
||||||
if created or instance.has_policy_changes():
|
if created or instance.has_policy_changes():
|
||||||
if not instance.is_containerized:
|
if not instance.is_container_group:
|
||||||
schedule_policy_task()
|
schedule_policy_task()
|
||||||
elif created or instance.is_containerized:
|
elif created or instance.is_container_group:
|
||||||
instance.set_default_policy_fields()
|
instance.set_default_policy_fields()
|
||||||
|
|
||||||
|
|
||||||
@@ -320,7 +320,7 @@ def on_instance_saved(sender, instance, created=False, raw=False, **kwargs):
|
|||||||
|
|
||||||
@receiver(post_delete, sender=InstanceGroup)
|
@receiver(post_delete, sender=InstanceGroup)
|
||||||
def on_instance_group_deleted(sender, instance, using, **kwargs):
|
def on_instance_group_deleted(sender, instance, using, **kwargs):
|
||||||
if not instance.is_containerized:
|
if not instance.is_container_group:
|
||||||
schedule_policy_task()
|
schedule_policy_task()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -768,11 +768,11 @@ class Job(UnifiedJob, JobOptions, SurveyJobMixin, JobNotificationMixin, TaskMana
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def can_run_containerized(self):
|
def can_run_containerized(self):
|
||||||
return any([ig for ig in self.preferred_instance_groups if ig.is_containerized])
|
return any([ig for ig in self.preferred_instance_groups if ig.is_container_group])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_containerized(self):
|
def is_container_group_task(self):
|
||||||
return bool(self.instance_group and self.instance_group.is_containerized)
|
return bool(self.instance_group and self.instance_group.is_container_group)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def preferred_instance_groups(self):
|
def preferred_instance_groups(self):
|
||||||
|
|||||||
@@ -283,12 +283,12 @@ class TaskManager():
|
|||||||
task.controller_node = controller_node
|
task.controller_node = controller_node
|
||||||
logger.debug('Submitting isolated {} to queue {} controlled by {}.'.format(
|
logger.debug('Submitting isolated {} to queue {} controlled by {}.'.format(
|
||||||
task.log_format, task.execution_node, controller_node))
|
task.log_format, task.execution_node, controller_node))
|
||||||
elif rampart_group.is_containerized:
|
elif rampart_group.is_container_group:
|
||||||
# find one real, non-containerized instance with capacity to
|
# find one real, non-containerized instance with capacity to
|
||||||
# act as the controller for k8s API interaction
|
# act as the controller for k8s API interaction
|
||||||
match = None
|
match = None
|
||||||
for group in InstanceGroup.objects.all():
|
for group in InstanceGroup.objects.all():
|
||||||
if group.is_containerized or group.controller_id:
|
if group.is_container_group or group.controller_id:
|
||||||
continue
|
continue
|
||||||
match = group.fit_task_to_most_remaining_capacity_instance(task, group.instances.all())
|
match = group.fit_task_to_most_remaining_capacity_instance(task, group.instances.all())
|
||||||
if match:
|
if match:
|
||||||
@@ -521,14 +521,14 @@ class TaskManager():
|
|||||||
self.start_task(task, None, task.get_jobs_fail_chain(), None)
|
self.start_task(task, None, task.get_jobs_fail_chain(), None)
|
||||||
continue
|
continue
|
||||||
for rampart_group in preferred_instance_groups:
|
for rampart_group in preferred_instance_groups:
|
||||||
if task.can_run_containerized and rampart_group.is_containerized:
|
if task.can_run_containerized and rampart_group.is_container_group:
|
||||||
self.graph[rampart_group.name]['graph'].add_job(task)
|
self.graph[rampart_group.name]['graph'].add_job(task)
|
||||||
self.start_task(task, rampart_group, task.get_jobs_fail_chain(), None)
|
self.start_task(task, rampart_group, task.get_jobs_fail_chain(), None)
|
||||||
found_acceptable_queue = True
|
found_acceptable_queue = True
|
||||||
break
|
break
|
||||||
|
|
||||||
remaining_capacity = self.get_remaining_capacity(rampart_group.name)
|
remaining_capacity = self.get_remaining_capacity(rampart_group.name)
|
||||||
if not rampart_group.is_containerized and self.get_remaining_capacity(rampart_group.name) <= 0:
|
if not rampart_group.is_container_group and self.get_remaining_capacity(rampart_group.name) <= 0:
|
||||||
logger.debug("Skipping group {}, remaining_capacity {} <= 0".format(
|
logger.debug("Skipping group {}, remaining_capacity {} <= 0".format(
|
||||||
rampart_group.name, remaining_capacity))
|
rampart_group.name, remaining_capacity))
|
||||||
continue
|
continue
|
||||||
@@ -536,8 +536,8 @@ class TaskManager():
|
|||||||
execution_instance = InstanceGroup.fit_task_to_most_remaining_capacity_instance(task, self.graph[rampart_group.name]['instances']) or \
|
execution_instance = InstanceGroup.fit_task_to_most_remaining_capacity_instance(task, self.graph[rampart_group.name]['instances']) or \
|
||||||
InstanceGroup.find_largest_idle_instance(self.graph[rampart_group.name]['instances'])
|
InstanceGroup.find_largest_idle_instance(self.graph[rampart_group.name]['instances'])
|
||||||
|
|
||||||
if execution_instance or rampart_group.is_containerized:
|
if execution_instance or rampart_group.is_container_group:
|
||||||
if not rampart_group.is_containerized:
|
if not rampart_group.is_container_group:
|
||||||
execution_instance.remaining_capacity = max(0, execution_instance.remaining_capacity - task.task_impact)
|
execution_instance.remaining_capacity = max(0, execution_instance.remaining_capacity - task.task_impact)
|
||||||
execution_instance.jobs_running += 1
|
execution_instance.jobs_running += 1
|
||||||
logger.debug("Starting {} in group {} instance {} (remaining_capacity={})".format(
|
logger.debug("Starting {} in group {} instance {} (remaining_capacity={})".format(
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ def apply_cluster_membership_policies():
|
|||||||
# On a differential basis, apply instances to non-isolated groups
|
# On a differential basis, apply instances to non-isolated groups
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
for g in actual_groups:
|
for g in actual_groups:
|
||||||
if g.obj.is_containerized:
|
if g.obj.is_container_group:
|
||||||
logger.debug('Skipping containerized group {} for policy calculation'.format(g.obj.name))
|
logger.debug('Skipping containerized group {} for policy calculation'.format(g.obj.name))
|
||||||
continue
|
continue
|
||||||
instances_to_add = set(g.instances) - set(g.prior_instances)
|
instances_to_add = set(g.instances) - set(g.prior_instances)
|
||||||
@@ -507,7 +507,7 @@ def cluster_node_heartbeat():
|
|||||||
def awx_k8s_reaper():
|
def awx_k8s_reaper():
|
||||||
from awx.main.scheduler.kubernetes import PodManager # prevent circular import
|
from awx.main.scheduler.kubernetes import PodManager # prevent circular import
|
||||||
for group in InstanceGroup.objects.filter(credential__isnull=False).iterator():
|
for group in InstanceGroup.objects.filter(credential__isnull=False).iterator():
|
||||||
if group.is_containerized:
|
if group.is_container_group:
|
||||||
logger.debug("Checking for orphaned k8s pods for {}.".format(group))
|
logger.debug("Checking for orphaned k8s pods for {}.".format(group))
|
||||||
for job in UnifiedJob.objects.filter(
|
for job in UnifiedJob.objects.filter(
|
||||||
pk__in=list(PodManager.list_active_jobs(group))
|
pk__in=list(PodManager.list_active_jobs(group))
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ def test_instance_group_update_fields(patch, instance, instance_group, admin, co
|
|||||||
# policy_instance_ variables can only be updated in instance groups that are NOT containerized
|
# policy_instance_ variables can only be updated in instance groups that are NOT containerized
|
||||||
# instance group (not containerized)
|
# instance group (not containerized)
|
||||||
ig_url = reverse("api:instance_group_detail", kwargs={'pk': instance_group.pk})
|
ig_url = reverse("api:instance_group_detail", kwargs={'pk': instance_group.pk})
|
||||||
assert not instance_group.is_containerized
|
assert not instance_group.is_container_group
|
||||||
assert not containerized_instance_group.is_isolated
|
assert not containerized_instance_group.is_isolated
|
||||||
resp = patch(ig_url, {'policy_instance_percentage':15}, admin, expect=200)
|
resp = patch(ig_url, {'policy_instance_percentage':15}, admin, expect=200)
|
||||||
assert 15 == resp.data['policy_instance_percentage']
|
assert 15 == resp.data['policy_instance_percentage']
|
||||||
@@ -266,7 +266,7 @@ def test_instance_group_update_fields(patch, instance, instance_group, admin, co
|
|||||||
|
|
||||||
# containerized instance group
|
# containerized instance group
|
||||||
cg_url = reverse("api:instance_group_detail", kwargs={'pk': containerized_instance_group.pk})
|
cg_url = reverse("api:instance_group_detail", kwargs={'pk': containerized_instance_group.pk})
|
||||||
assert containerized_instance_group.is_containerized
|
assert containerized_instance_group.is_container_group
|
||||||
assert not containerized_instance_group.is_isolated
|
assert not containerized_instance_group.is_isolated
|
||||||
resp = patch(cg_url, {'policy_instance_percentage':15}, admin, expect=400)
|
resp = patch(cg_url, {'policy_instance_percentage':15}, admin, expect=400)
|
||||||
assert ["Containerized instances may not be managed via the API"] == resp.data['policy_instance_percentage']
|
assert ["Containerized instances may not be managed via the API"] == resp.data['policy_instance_percentage']
|
||||||
@@ -291,4 +291,3 @@ def test_containerized_group_default_fields(instance_group, kube_credential):
|
|||||||
assert ig.policy_instance_list == []
|
assert ig.policy_instance_list == []
|
||||||
assert ig.policy_instance_minimum == 0
|
assert ig.policy_instance_minimum == 0
|
||||||
assert ig.policy_instance_percentage == 0
|
assert ig.policy_instance_percentage == 0
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ def containerized_job(default_instance_group, kube_credential, job_template_fact
|
|||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_containerized_job(containerized_job):
|
def test_containerized_job(containerized_job):
|
||||||
assert containerized_job.is_containerized
|
assert containerized_job.is_containerized
|
||||||
assert containerized_job.instance_group.is_containerized
|
assert containerized_job.instance_group.is_container_group
|
||||||
assert containerized_job.instance_group.credential.kubernetes
|
assert containerized_job.instance_group.credential.kubernetes
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ Instances of orgs list include:
|
|||||||
|
|
||||||
**Instance Groups list**
|
**Instance Groups list**
|
||||||
- Name - search is ?name=ig
|
- Name - search is ?name=ig
|
||||||
- ? is_containerized boolean choice (doesn't work right now in API but will soon) - search is ?is_containerized=true
|
- ? is_container_group boolean choice (doesn't work right now in API but will soon) - search is ?is_container_group=true
|
||||||
- ? credential name - search is ?credentials__name=kubey
|
- ? credential name - search is ?credentials__name=kubey
|
||||||
|
|
||||||
Instance of instance groups list include:
|
Instance of instance groups list include:
|
||||||
@@ -136,7 +136,7 @@ Instance of team lists include:
|
|||||||
|
|
||||||
**Credentials list**
|
**Credentials list**
|
||||||
- Name
|
- Name
|
||||||
- ? Type (dropdown on right with different types)
|
- ? Type (dropdown on right with different types)
|
||||||
- ? Created by (username)
|
- ? Created by (username)
|
||||||
- ? Modified by (username)
|
- ? Modified by (username)
|
||||||
|
|
||||||
@@ -273,7 +273,7 @@ For the UI url params, we want to only encode those params that aren't defaults,
|
|||||||
|
|
||||||
#### mergeParams vs. replaceParams
|
#### mergeParams vs. replaceParams
|
||||||
|
|
||||||
**mergeParams** is used to suppport putting values with the same key
|
**mergeParams** is used to suppport putting values with the same key
|
||||||
|
|
||||||
From a UX perspective, we wanted to be able to support searching on the same key multiple times (i.e. searching for things like `?foo=bar&foo=baz`). We do this by creating an array of all values. i.e.:
|
From a UX perspective, we wanted to be able to support searching on the same key multiple times (i.e. searching for things like `?foo=bar&foo=baz`). We do this by creating an array of all values. i.e.:
|
||||||
|
|
||||||
@@ -361,7 +361,7 @@ Smart search will be able to craft the tag through various states. Note that th
|
|||||||
"instance_groups__search"
|
"instance_groups__search"
|
||||||
],
|
],
|
||||||
```
|
```
|
||||||
|
|
||||||
PHASE 3: keys, give by object key names for data.actions.GET
|
PHASE 3: keys, give by object key names for data.actions.GET
|
||||||
- type is given for each key which we could use to help craft the value
|
- type is given for each key which we could use to help craft the value
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ const instanceGroup = {
|
|||||||
controller: null,
|
controller: null,
|
||||||
is_controller: false,
|
is_controller: false,
|
||||||
is_isolated: false,
|
is_isolated: false,
|
||||||
is_containerized: true,
|
is_container_group: true,
|
||||||
credential: 71,
|
credential: 71,
|
||||||
policy_instance_percentage: 0,
|
policy_instance_percentage: 0,
|
||||||
policy_instance_minimum: 0,
|
policy_instance_minimum: 0,
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ const instanceGroup = {
|
|||||||
controller: null,
|
controller: null,
|
||||||
is_controller: false,
|
is_controller: false,
|
||||||
is_isolated: false,
|
is_isolated: false,
|
||||||
is_containerized: true,
|
is_container_group: true,
|
||||||
credential: 71,
|
credential: 71,
|
||||||
policy_instance_percentage: 0,
|
policy_instance_percentage: 0,
|
||||||
policy_instance_minimum: 0,
|
policy_instance_minimum: 0,
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ const instanceGroupData = {
|
|||||||
controller: null,
|
controller: null,
|
||||||
is_controller: false,
|
is_controller: false,
|
||||||
is_isolated: false,
|
is_isolated: false,
|
||||||
is_containerized: false,
|
is_container_group: false,
|
||||||
credential: null,
|
credential: null,
|
||||||
policy_instance_percentage: 46,
|
policy_instance_percentage: 46,
|
||||||
policy_instance_minimum: 12,
|
policy_instance_minimum: 12,
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ function InstanceGroupDetails({ instanceGroup, i18n }) {
|
|||||||
<Detail
|
<Detail
|
||||||
label={i18n._(t`Type`)}
|
label={i18n._(t`Type`)}
|
||||||
value={
|
value={
|
||||||
instanceGroup.is_containerized
|
instanceGroup.is_container_group
|
||||||
? i18n._(t`Container group`)
|
? i18n._(t`Container group`)
|
||||||
: i18n._(t`Instance group`)
|
: i18n._(t`Instance group`)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ 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,
|
||||||
is_containerized: false,
|
is_container_group: false,
|
||||||
is_isolated: false,
|
is_isolated: 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',
|
||||||
@@ -40,7 +40,7 @@ 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,
|
||||||
is_containerized: true,
|
is_container_group: true,
|
||||||
is_isolated: false,
|
is_isolated: 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',
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ const instanceGroupData = {
|
|||||||
controller: null,
|
controller: null,
|
||||||
is_controller: false,
|
is_controller: false,
|
||||||
is_isolated: false,
|
is_isolated: false,
|
||||||
is_containerized: false,
|
is_container_group: false,
|
||||||
credential: null,
|
credential: null,
|
||||||
policy_instance_percentage: 46,
|
policy_instance_percentage: 46,
|
||||||
policy_instance_minimum: 12,
|
policy_instance_minimum: 12,
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ function InstanceGroupList({ i18n }) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const getDetailUrl = item => {
|
const getDetailUrl = item => {
|
||||||
return item.is_containerized
|
return item.is_container_group
|
||||||
? `${match.url}/container_group/${item.id}/details`
|
? `${match.url}/container_group/${item.id}/details`
|
||||||
: `${match.url}/${item.id}/details`;
|
: `${match.url}/${item.id}/details`;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ function InstanceGroupListItem({
|
|||||||
const labelId = `check-action-${instanceGroup.id}`;
|
const labelId = `check-action-${instanceGroup.id}`;
|
||||||
|
|
||||||
const isContainerGroup = item => {
|
const isContainerGroup = item => {
|
||||||
return item.is_containerized;
|
return item.is_container_group;
|
||||||
};
|
};
|
||||||
|
|
||||||
function usedCapacity(item) {
|
function usedCapacity(item) {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ describe('<InstanceGroupListItem/>', () => {
|
|||||||
policy_instance_minimum: 10,
|
policy_instance_minimum: 10,
|
||||||
policy_instance_percentage: 50,
|
policy_instance_percentage: 50,
|
||||||
percent_capacity_remaining: 60,
|
percent_capacity_remaining: 60,
|
||||||
is_containerized: false,
|
is_container_group: false,
|
||||||
summary_fields: {
|
summary_fields: {
|
||||||
user_capabilities: {
|
user_capabilities: {
|
||||||
edit: true,
|
edit: true,
|
||||||
@@ -34,7 +34,7 @@ describe('<InstanceGroupListItem/>', () => {
|
|||||||
policy_instance_minimum: 0,
|
policy_instance_minimum: 0,
|
||||||
policy_instance_percentage: 0,
|
policy_instance_percentage: 0,
|
||||||
percent_capacity_remaining: 0,
|
percent_capacity_remaining: 0,
|
||||||
is_containerized: true,
|
is_container_group: true,
|
||||||
summary_fields: {
|
summary_fields: {
|
||||||
user_capabilities: {
|
user_capabilities: {
|
||||||
edit: false,
|
edit: false,
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ const instanceGroup = {
|
|||||||
controller: null,
|
controller: null,
|
||||||
is_controller: false,
|
is_controller: false,
|
||||||
is_isolated: false,
|
is_isolated: false,
|
||||||
is_containerized: false,
|
is_container_group: false,
|
||||||
credential: 3,
|
credential: 3,
|
||||||
policy_instance_percentage: 46,
|
policy_instance_percentage: 46,
|
||||||
policy_instance_minimum: 12,
|
policy_instance_minimum: 12,
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ const instanceGroup = {
|
|||||||
controller: null,
|
controller: null,
|
||||||
is_controller: false,
|
is_controller: false,
|
||||||
is_isolated: false,
|
is_isolated: false,
|
||||||
is_containerized: false,
|
is_container_group: false,
|
||||||
credential: null,
|
credential: null,
|
||||||
policy_instance_percentage: 46,
|
policy_instance_percentage: 46,
|
||||||
policy_instance_minimum: 12,
|
policy_instance_minimum: 12,
|
||||||
|
|||||||
Reference in New Issue
Block a user