From 59413e0a8ffb4faf47521d69125bf0dd210ead62 Mon Sep 17 00:00:00 2001 From: Shane McDonald Date: Fri, 27 Sep 2019 12:58:09 -0400 Subject: [PATCH] Change default pod spec in OPTIONS request to json --- awx/api/metadata.py | 3 +- .../edit-container-group.controller.js | 39 +++++++++++++++++-- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/awx/api/metadata.py b/awx/api/metadata.py index 09255d8d70..afdcdf57c0 100644 --- a/awx/api/metadata.py +++ b/awx/api/metadata.py @@ -2,7 +2,6 @@ # All Rights Reserved. from collections import OrderedDict -import yaml # Django from django.core.exceptions import PermissionDenied @@ -203,7 +202,7 @@ class Metadata(metadata.SimpleMetadata): continue if field == "pod_spec_override": - meta['default'] = yaml.dump(PodManager().pod_definition) + meta['default'] = PodManager().pod_definition # Add type choices if available from the serializer. if field == 'type' and hasattr(serializer, 'get_type_choices'): diff --git a/awx/ui/client/src/instance-groups/container-groups/edit-container-group.controller.js b/awx/ui/client/src/instance-groups/container-groups/edit-container-group.controller.js index d85bb9fe03..5f8064b9d6 100644 --- a/awx/ui/client/src/instance-groups/container-groups/edit-container-group.controller.js +++ b/awx/ui/client/src/instance-groups/container-groups/edit-container-group.controller.js @@ -57,9 +57,42 @@ function EditContainerGroupController($rootScope, $scope, $state, models, string toggleLabel: strings.get('container.POD_SPEC_TOGGLE') }; - const podSpecValue = EditContainerGroupDataset.data.pod_spec_override.trim(); - const defaultPodSpecValue = instanceGroup.model.OPTIONS.actions.PUT.pod_spec_override.default.trim(); - if (podSpecValue && podSpecValue !== defaultPodSpecValue) { + function sanitizeVars (str) { + // Quick function to test if the host vars are a json-object-string, + // by testing if they can be converted to a JSON object w/o error. + function IsJsonString (varStr) { + try { + JSON.parse(varStr); + } catch (e) { + return false; + } + return true; + } + + if (typeof str === 'undefined') { + return '---'; + } + if (typeof str !== 'string') { + const yamlStr = jsyaml.safeDump(str); + // jsyaml.safeDump doesn't process an empty object correctly + if (yamlStr === '{}\n') { + return '---'; + } + return yamlStr; + } + if (str === '' || str === '{}') { + return '---'; + } else if (IsJsonString(str)) { + str = JSON.parse(str); + return jsyaml.safeDump(str); + } + return str; + } + + const podSpecValue = sanitizeVars(EditContainerGroupDataset.data.pod_spec_override); + const defaultPodSpecValue = sanitizeVars(instanceGroup.model.OPTIONS.actions.PUT.pod_spec_override.default); + + if (podSpecValue && podSpecValue.trim() !== defaultPodSpecValue.trim()) { vm.form.extraVars.isOpen = true; } else { vm.form.extraVars.isOpen = false;