diff --git a/awx/ui/client/src/inventory-scripts/inventory-scripts.list.js b/awx/ui/client/src/inventory-scripts/inventory-scripts.list.js index d81977d49d..9cfb3ba3c0 100644 --- a/awx/ui/client/src/inventory-scripts/inventory-scripts.list.js +++ b/awx/ui/client/src/inventory-scripts/inventory-scripts.list.js @@ -57,6 +57,15 @@ export default ['i18n', function(i18n){ dataPlacement: 'top', ngShow: 'inventory_script.summary_fields.user_capabilities.edit' }, + copy: { + label: i18n._('Copy'), + ngClick: 'copyCustomInv(inventory_script)', + "class": 'btn-danger btn-xs', + awToolTip: i18n._('Copy inventory scruot'), + dataPlacement: 'top', + // requires future api rbac changes + //ngShow: 'inventory_script.summary_fields.user_capabilities.copy' + }, view: { ngClick: "editCustomInv(inventory_script.id)", label: i18n._('View'), diff --git a/awx/ui/client/src/inventory-scripts/list/list.controller.js b/awx/ui/client/src/inventory-scripts/list/list.controller.js index a9d1140fb0..b4307b54c8 100644 --- a/awx/ui/client/src/inventory-scripts/list/list.controller.js +++ b/awx/ui/client/src/inventory-scripts/list/list.controller.js @@ -47,6 +47,21 @@ export default ['$rootScope', '$scope', 'Wait', 'InventoryScriptsList', }); }; + $scope.copyCustomInv = inventoryScript => { + Wait('start'); + new InventoryScript('get', inventoryScript.id) + .then(model => model.copy()) + .then(({ id }) => { + const params = { inventory_script_id: id }; + $state.go('inventoryScripts.edit', params, { reload: true }); + }) + .catch(({ data, status }) => { + const params = { hdr: 'Error!', msg: `Call to copy failed. Return status: ${status}` }; + ProcessErrors($scope, data, status, null, params); + }) + .finally(() => Wait('stop')); + }; + $scope.deleteCustomInv = function(id, name) { var action = function() {