From 4bec46a910f01dc5dea15f54cab9c6681d6dd284 Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Thu, 19 Mar 2020 13:50:30 -0400 Subject: [PATCH] add facts views to host and inv host detail views and update enable fact storage checkbox option and detail language --- awx/ui_next/src/api/models/Hosts.js | 4 + .../CodeMirrorInput/CodeMirrorInput.jsx | 8 +- .../CodeMirrorInput/VariablesDetail.jsx | 3 +- awx/ui_next/src/screens/Host/Host.jsx | 2 +- .../src/screens/Host/HostFacts/HostFacts.jsx | 49 +- .../screens/Host/HostFacts/HostFacts.test.jsx | 56 + .../src/screens/Host/data.hostFacts.json | 1249 +++++++++++++++++ .../Inventory/InventoryHost/InventoryHost.jsx | 7 + .../InventoryHostFacts/InventoryHostFacts.jsx | 49 + .../InventoryHostFacts.test.jsx | 56 + .../Inventory/InventoryHostFacts/index.js | 1 + .../Inventory/shared/data.hostFacts.json | 1249 +++++++++++++++++ .../JobTemplateDetail/JobTemplateDetail.jsx | 2 +- .../Template/shared/JobTemplateForm.jsx | 7 +- 14 files changed, 2730 insertions(+), 12 deletions(-) create mode 100644 awx/ui_next/src/screens/Host/HostFacts/HostFacts.test.jsx create mode 100644 awx/ui_next/src/screens/Host/data.hostFacts.json create mode 100644 awx/ui_next/src/screens/Inventory/InventoryHostFacts/InventoryHostFacts.jsx create mode 100644 awx/ui_next/src/screens/Inventory/InventoryHostFacts/InventoryHostFacts.test.jsx create mode 100644 awx/ui_next/src/screens/Inventory/InventoryHostFacts/index.js create mode 100644 awx/ui_next/src/screens/Inventory/shared/data.hostFacts.json diff --git a/awx/ui_next/src/api/models/Hosts.js b/awx/ui_next/src/api/models/Hosts.js index d36b5f15a3..3d938fe1f3 100644 --- a/awx/ui_next/src/api/models/Hosts.js +++ b/awx/ui_next/src/api/models/Hosts.js @@ -5,6 +5,10 @@ class Hosts extends Base { super(http); this.baseUrl = '/api/v2/hosts/'; } + + readFacts(id) { + return this.http.get(`${this.baseUrl}${id}/ansible_facts/`); + } } export default Hosts; diff --git a/awx/ui_next/src/components/CodeMirrorInput/CodeMirrorInput.jsx b/awx/ui_next/src/components/CodeMirrorInput/CodeMirrorInput.jsx index c84ff0ba84..2ce36f9a7d 100644 --- a/awx/ui_next/src/components/CodeMirrorInput/CodeMirrorInput.jsx +++ b/awx/ui_next/src/components/CodeMirrorInput/CodeMirrorInput.jsx @@ -17,7 +17,8 @@ const CodeMirror = styled(ReactCodeMirror)` } & > .CodeMirror { - height: ${props => props.rows * LINE_HEIGHT + PADDING}px; + height: ${props => + props.fullHeight ? 'auto' : `${props.rows * LINE_HEIGHT + PADDING}px`}; font-family: var(--pf-global--FontFamily--monospace); } @@ -63,6 +64,7 @@ function CodeMirrorInput({ readOnly, hasErrors, rows, + fullHeight, className, }) { return ( @@ -75,8 +77,10 @@ function CodeMirrorInput({ options={{ smartIndent: false, lineNumbers: true, + lineWrapping: true, readOnly, }} + fullHeight={fullHeight} rows={rows} /> ); @@ -87,12 +91,14 @@ CodeMirrorInput.propTypes = { mode: oneOf(['javascript', 'yaml', 'jinja2']).isRequired, readOnly: bool, hasErrors: bool, + fullHeight: bool, rows: number, }; CodeMirrorInput.defaultProps = { readOnly: false, onChange: () => {}, rows: 6, + fullHeight: false, hasErrors: false, }; diff --git a/awx/ui_next/src/components/CodeMirrorInput/VariablesDetail.jsx b/awx/ui_next/src/components/CodeMirrorInput/VariablesDetail.jsx index f561a6f74e..e7c2b00742 100644 --- a/awx/ui_next/src/components/CodeMirrorInput/VariablesDetail.jsx +++ b/awx/ui_next/src/components/CodeMirrorInput/VariablesDetail.jsx @@ -21,7 +21,7 @@ function getValueAsMode(value, mode) { return mode === YAML_MODE ? jsonToYaml(value) : yamlToJson(value); } -function VariablesDetail({ value, label, rows }) { +function VariablesDetail({ value, label, rows, fullHeight }) { const [mode, setMode] = useState(isJson(value) ? JSON_MODE : YAML_MODE); const [currentValue, setCurrentValue] = useState(value || '---'); const [error, setError] = useState(null); @@ -75,6 +75,7 @@ function VariablesDetail({ value, label, rows }) { value={currentValue} readOnly rows={rows} + fullHeight={fullHeight} css="margin-top: 10px" /> {error && ( diff --git a/awx/ui_next/src/screens/Host/Host.jsx b/awx/ui_next/src/screens/Host/Host.jsx index 173f3540e8..eccbc42d34 100644 --- a/awx/ui_next/src/screens/Host/Host.jsx +++ b/awx/ui_next/src/screens/Host/Host.jsx @@ -116,7 +116,7 @@ function Host({ i18n, setBreadcrumb }) { , - + , diff --git a/awx/ui_next/src/screens/Host/HostFacts/HostFacts.jsx b/awx/ui_next/src/screens/Host/HostFacts/HostFacts.jsx index 62499c4b40..ff336a4165 100644 --- a/awx/ui_next/src/screens/Host/HostFacts/HostFacts.jsx +++ b/awx/ui_next/src/screens/Host/HostFacts/HostFacts.jsx @@ -1,10 +1,49 @@ -import React, { Component } from 'react'; +import React, { useCallback, useEffect } from 'react'; +import { withI18n } from '@lingui/react'; +import { t } from '@lingui/macro'; +import { Host } from '@types'; import { CardBody } from '@components/Card'; +import { DetailList } from '@components/DetailList'; +import { VariablesDetail } from '@components/CodeMirrorInput'; +import ContentError from '@components/ContentError'; +import ContentLoading from '@components/ContentLoading'; +import useRequest from '@util/useRequest'; +import { HostsAPI } from '@api'; -class HostFacts extends Component { - render() { - return Coming soon :); +function HostFacts({ i18n, host }) { + const { result: facts, isLoading, error, request: fetchFacts } = useRequest( + useCallback(async () => { + const [{ data: factsObj }] = await Promise.all([ + HostsAPI.readFacts(host.id), + ]); + return JSON.stringify(factsObj, null, 4); + }, [host]), + '{}' + ); + + useEffect(() => { + fetchFacts(); + }, [fetchFacts]); + + if (isLoading) { + return ; } + + if (error) { + return ; + } + + return ( + + + + + + ); } -export default HostFacts; +HostFacts.propTypes = { + host: Host.isRequired, +}; + +export default withI18n()(HostFacts); diff --git a/awx/ui_next/src/screens/Host/HostFacts/HostFacts.test.jsx b/awx/ui_next/src/screens/Host/HostFacts/HostFacts.test.jsx new file mode 100644 index 0000000000..3288c0cb93 --- /dev/null +++ b/awx/ui_next/src/screens/Host/HostFacts/HostFacts.test.jsx @@ -0,0 +1,56 @@ +import React from 'react'; +import { act } from 'react-dom/test-utils'; +import { mountWithContexts, waitForElement } from '@testUtils/enzymeHelpers'; +import HostFacts from './HostFacts'; +import { HostsAPI } from '@api'; +import mockHost from '../data.host.json'; +import mockHostFacts from '../data.hostFacts.json'; + +jest.mock('@api/models/Hosts'); +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useParams: () => ({ + id: 1, + hostId: 1, + }), +})); + +describe('', () => { + let wrapper; + + beforeEach(async () => { + HostsAPI.readFacts.mockResolvedValue({ data: mockHostFacts }); + await act(async () => { + wrapper = mountWithContexts(); + }); + await waitForElement(wrapper, 'ContentLoading', el => el.length === 0); + }); + + afterEach(() => { + jest.clearAllMocks(); + wrapper.unmount(); + }); + + test('initially renders successfully ', () => { + expect(wrapper.find('HostFacts').length).toBe(1); + }); + + test('renders ContentError when facts GET fails', async () => { + HostsAPI.readFacts.mockRejectedValueOnce( + new Error({ + response: { + config: { + method: 'get', + url: '/api/v2/hosts/1/ansible_facts', + }, + data: 'An error occurred', + status: 500, + }, + }) + ); + await act(async () => { + wrapper = mountWithContexts(); + }); + await waitForElement(wrapper, 'ContentError', el => el.length === 1); + }); +}); diff --git a/awx/ui_next/src/screens/Host/data.hostFacts.json b/awx/ui_next/src/screens/Host/data.hostFacts.json new file mode 100644 index 0000000000..6d80a8f6f5 --- /dev/null +++ b/awx/ui_next/src/screens/Host/data.hostFacts.json @@ -0,0 +1,1249 @@ +{ + "ansible_lo": { + "mtu": 65536, + "ipv4": { + "address": "127.0.0.1", + "netmask": "255.0.0.0", + "network": "127.0.0.0", + "broadcast": "host" + }, + "type": "loopback", + "active": true, + "device": "lo", + "promisc": false, + "features": { + "rx_all": "off [fixed]", + "rx_fcs": "off [fixed]", + "highdma": "on [fixed]", + "fcoe_mtu": "off [fixed]", + "loopback": "on [fixed]", + "busy_poll": "off [fixed]", + "netns_local": "on [fixed]", + "tx_lockless": "on [fixed]", + "hw_tc_offload": "off [fixed]", + "tx_gso_robust": "off [fixed]", + "l2_fwd_offload": "off [fixed]", + "ntuple_filters": "off [fixed]", + "rx_vlan_filter": "off [fixed]", + "scatter_gather": "on", + "tx_gso_partial": "off [fixed]", + "receive_hashing": "off [fixed]", + "rx_checksumming": "on [fixed]", + "rx_vlan_offload": "off [fixed]", + "tx_checksumming": "on", + "tx_nocache_copy": "off [fixed]", + "tx_vlan_offload": "off [fixed]", + "vlan_challenged": "on [fixed]", + "tx_checksum_ipv4": "off [fixed]", + "tx_checksum_ipv6": "off [fixed]", + "tx_checksum_sctp": "on [fixed]", + "tx_scatter_gather": "on [fixed]", + "rx_vlan_stag_filter": "off [fixed]", + "tx_gre_segmentation": "off [fixed]", + "tx_tcp_segmentation": "on", + "tx_checksum_fcoe_crc": "off [fixed]", + "tx_fcoe_segmentation": "off [fixed]", + "tx_sctp_segmentation": "on", + "tx_tcp6_segmentation": "on", + "large_receive_offload": "off [fixed]", + "rx_vlan_stag_hw_parse": "off [fixed]", + "tx_checksum_ip_generic": "on [fixed]", + "tx_ipxip4_segmentation": "off [fixed]", + "tx_ipxip6_segmentation": "off [fixed]", + "tx_vlan_stag_hw_insert": "off [fixed]", + "generic_receive_offload": "on", + "tx_tcp_ecn_segmentation": "on", + "tx_udp_tnl_segmentation": "off [fixed]", + "tcp_segmentation_offload": "on", + "tx_gre_csum_segmentation": "off [fixed]", + "udp_fragmentation_offload": "on", + "tx_scatter_gather_fraglist": "on [fixed]", + "generic_segmentation_offload": "on", + "tx_tcp_mangleid_segmentation": "on", + "tx_udp_tnl_csum_segmentation": "off [fixed]" + }, + "timestamping": [ + "rx_software", + "software" + ], + "hw_timestamp_filters": [] + }, + "ansible_dns": { + "options": { + "ndots": "0" + }, + "nameservers": [ + "127.0.0.11" + ] + }, + "ansible_env": { + "_": "/usr/libexec/platform-python", + "OS": " Operating System: Docker Desktop", + "TZ": "UTC", + "PWD": "/tmp/awx_13_r1ffeqze/project", + "HOME": "/var/lib/awx", + "LANG": "\"en-us\"", + "PATH": "/venv/ansible/bin:/venv/awx/bin:/venv/awx/bin:/usr/local/n/versions/node/10.15.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "SHLVL": "4", + "JOB_ID": "13", + "LC_ALL": "en_US.UTF-8", + "MFLAGS": "-w", + "OLDPWD": "/awx_devel", + "AWX_HOST": "https://towerhost", + "HOSTNAME": "awx", + "LANGUAGE": "en_US:en", + "SDB_HOST": "0.0.0.0", + "SDB_PORT": "7899", + "MAKEFLAGS": "w", + "MAKELEVEL": "2", + "PYTHONPATH": "/venv/ansible/lib/python3.6/site-packages:/awx_devel/awx/lib:/venv/awx/lib/python3.6/site-packages/ansible_runner/callbacks", + "CURRENT_UID": "501", + "VIRTUAL_ENV": "/venv/ansible", + "INVENTORY_ID": "1", + "MAX_EVENT_RES": "700000", + "PROOT_TMP_DIR": "/tmp", + "RABBITMQ_HOST": "rabbitmq", + "RABBITMQ_PASS": "guest", + "RABBITMQ_USER": "guest", + "RABBITMQ_VHOST": "/", + "ANSIBLE_LIBRARY": "/awx_devel/awx/plugins/library", + "SDB_NOTIFY_HOST": "docker.for.mac.host.internal", + "AWX_GROUP_QUEUES": "tower", + "PROJECT_REVISION": "9e2cd25bfb26ba82f40cf31276e1942bf38b3a30", + "ANSIBLE_VENV_PATH": "/venv/ansible", + "ANSIBLE_ROLES_PATH": "/tmp/awx_13_r1ffeqze/requirements_roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles", + "RUNNER_OMIT_EVENTS": "False", + "SUPERVISOR_ENABLED": "1", + "ANSIBLE_FORCE_COLOR": "True", + "ANSIBLE_CACHE_PLUGIN": "jsonfile", + "AWX_PRIVATE_DATA_DIR": "/tmp/awx_13_r1ffeqze", + "AWX_ISOLATED_DATA_DIR": "/tmp/awx_13_r1ffeqze/artifacts/13", + "SUPERVISOR_GROUP_NAME": "tower-processes", + "SUPERVISOR_SERVER_URL": "unix:///tmp/supervisor.sock", + "DJANGO_SETTINGS_MODULE": "awx.settings.development", + "ANSIBLE_STDOUT_CALLBACK": "awx_display", + "SUPERVISOR_PROCESS_NAME": "awx-dispatcher", + "ANSIBLE_CALLBACK_PLUGINS": "/awx_devel/awx/plugins/callback:/venv/awx/lib/python3.6/site-packages/ansible_runner/callbacks", + "ANSIBLE_COLLECTIONS_PATHS": "/tmp/awx_13_r1ffeqze/requirements_collections:~/.ansible/collections:/usr/share/ansible/collections", + "ANSIBLE_HOST_KEY_CHECKING": "False", + "RUNNER_ONLY_FAILED_EVENTS": "False", + "ANSIBLE_RETRY_FILES_ENABLED": "False", + "ANSIBLE_SSH_CONTROL_PATH_DIR": "/tmp/awx_13_r1ffeqze/cp", + "ANSIBLE_CACHE_PLUGIN_CONNECTION": "/tmp/awx_13_r1ffeqze/artifacts/13/fact_cache", + "DJANGO_LIVE_TEST_SERVER_ADDRESS": "localhost:9013-9199", + "ANSIBLE_INVENTORY_UNPARSED_FAILED": "True", + "ANSIBLE_PARAMIKO_RECORD_HOST_KEYS": "False" + }, + "ansible_lsb": {}, + "ansible_eth0": { + "mtu": 1500, + "ipv4": { + "address": "172.18.0.5", + "netmask": "255.255.0.0", + "network": "172.18.0.0", + "broadcast": "172.18.255.255" + }, + "type": "ether", + "speed": 10000, + "active": true, + "device": "eth0", + "promisc": false, + "features": { + "rx_all": "off [fixed]", + "rx_fcs": "off [fixed]", + "highdma": "on", + "fcoe_mtu": "off [fixed]", + "loopback": "off [fixed]", + "busy_poll": "off [fixed]", + "netns_local": "off [fixed]", + "tx_lockless": "on [fixed]", + "hw_tc_offload": "off [fixed]", + "tx_gso_robust": "off [fixed]", + "l2_fwd_offload": "off [fixed]", + "ntuple_filters": "off [fixed]", + "rx_vlan_filter": "off [fixed]", + "scatter_gather": "on", + "tx_gso_partial": "off [fixed]", + "receive_hashing": "off [fixed]", + "rx_checksumming": "on", + "rx_vlan_offload": "on", + "tx_checksumming": "on", + "tx_nocache_copy": "off", + "tx_vlan_offload": "on", + "vlan_challenged": "off [fixed]", + "tx_checksum_ipv4": "off [fixed]", + "tx_checksum_ipv6": "off [fixed]", + "tx_checksum_sctp": "on", + "tx_scatter_gather": "on", + "rx_vlan_stag_filter": "off [fixed]", + "tx_gre_segmentation": "on", + "tx_tcp_segmentation": "on", + "tx_checksum_fcoe_crc": "off [fixed]", + "tx_fcoe_segmentation": "off [fixed]", + "tx_sctp_segmentation": "on", + "tx_tcp6_segmentation": "on", + "large_receive_offload": "off [fixed]", + "rx_vlan_stag_hw_parse": "on", + "tx_checksum_ip_generic": "on", + "tx_ipxip4_segmentation": "on", + "tx_ipxip6_segmentation": "on", + "tx_vlan_stag_hw_insert": "on", + "generic_receive_offload": "on", + "tx_tcp_ecn_segmentation": "on", + "tx_udp_tnl_segmentation": "on", + "tcp_segmentation_offload": "on", + "tx_gre_csum_segmentation": "on", + "udp_fragmentation_offload": "on", + "tx_scatter_gather_fraglist": "on", + "generic_segmentation_offload": "on", + "tx_tcp_mangleid_segmentation": "on", + "tx_udp_tnl_csum_segmentation": "on" + }, + "macaddress": "02:42:ac:12:00:05", + "timestamping": [ + "rx_software", + "software" + ], + "hw_timestamp_filters": [] + }, + "ansible_fips": false, + "ansible_fqdn": "awx", + "module_setup": true, + "ansible_local": {}, + "ansible_tunl0": { + "mtu": 1480, + "type": "unknown", + "active": false, + "device": "tunl0", + "promisc": false, + "features": { + "rx_all": "off [fixed]", + "rx_fcs": "off [fixed]", + "highdma": "on", + "fcoe_mtu": "off [fixed]", + "loopback": "off [fixed]", + "busy_poll": "off [fixed]", + "netns_local": "on [fixed]", + "tx_lockless": "on [fixed]", + "hw_tc_offload": "off [fixed]", + "tx_gso_robust": "off [fixed]", + "l2_fwd_offload": "off [fixed]", + "ntuple_filters": "off [fixed]", + "rx_vlan_filter": "off [fixed]", + "scatter_gather": "on", + "tx_gso_partial": "off [fixed]", + "receive_hashing": "off [fixed]", + "rx_checksumming": "off [fixed]", + "rx_vlan_offload": "off [fixed]", + "tx_checksumming": "on", + "tx_nocache_copy": "off", + "tx_vlan_offload": "off [fixed]", + "vlan_challenged": "off [fixed]", + "tx_checksum_ipv4": "off [fixed]", + "tx_checksum_ipv6": "off [fixed]", + "tx_checksum_sctp": "off [fixed]", + "tx_scatter_gather": "on", + "rx_vlan_stag_filter": "off [fixed]", + "tx_gre_segmentation": "off [fixed]", + "tx_tcp_segmentation": "on", + "tx_checksum_fcoe_crc": "off [fixed]", + "tx_fcoe_segmentation": "off [fixed]", + "tx_sctp_segmentation": "on", + "tx_tcp6_segmentation": "on", + "large_receive_offload": "off [fixed]", + "rx_vlan_stag_hw_parse": "off [fixed]", + "tx_checksum_ip_generic": "on", + "tx_ipxip4_segmentation": "off [fixed]", + "tx_ipxip6_segmentation": "off [fixed]", + "tx_vlan_stag_hw_insert": "off [fixed]", + "generic_receive_offload": "on", + "tx_tcp_ecn_segmentation": "on", + "tx_udp_tnl_segmentation": "off [fixed]", + "tcp_segmentation_offload": "on", + "tx_gre_csum_segmentation": "off [fixed]", + "udp_fragmentation_offload": "on", + "tx_scatter_gather_fraglist": "on", + "generic_segmentation_offload": "on", + "tx_tcp_mangleid_segmentation": "on", + "tx_udp_tnl_csum_segmentation": "off [fixed]" + }, + "macaddress": "00:00:00:00", + "timestamping": [ + "rx_software", + "software" + ], + "hw_timestamp_filters": [] + }, + "gather_subset": [ + "all" + ], + "ansible_domain": "", + "ansible_kernel": "4.9.184-linuxkit", + "ansible_mounts": [ + { + "uuid": "N/A", + "mount": "/etc/resolv.conf", + "device": "/dev/sda1", + "fstype": "ext4", + "options": "rw,nosuid,relatime,data=ordered,bind", + "block_size": 4096, + "block_used": 3938899, + "inode_used": 479010, + "size_total": 62725623808, + "block_total": 15313873, + "inode_total": 3907584, + "size_available": 46591893504, + "block_available": 11374974, + "inode_available": 3428574 + }, + { + "uuid": "N/A", + "mount": "/etc/hostname", + "device": "/dev/sda1", + "fstype": "ext4", + "options": "rw,nosuid,relatime,data=ordered,bind", + "block_size": 4096, + "block_used": 3938899, + "inode_used": 479010, + "size_total": 62725623808, + "block_total": 15313873, + "inode_total": 3907584, + "size_available": 46591893504, + "block_available": 11374974, + "inode_available": 3428574 + }, + { + "uuid": "N/A", + "mount": "/etc/hosts", + "device": "/dev/sda1", + "fstype": "ext4", + "options": "rw,nosuid,relatime,data=ordered,bind", + "block_size": 4096, + "block_used": 3938899, + "inode_used": 479010, + "size_total": 62725623808, + "block_total": 15313873, + "inode_total": 3907584, + "size_available": 46591893504, + "block_available": 11374974, + "inode_available": 3428574 + } + ], + "ansible_python": { + "type": "cpython", + "version": { + "major": 3, + "micro": 8, + "minor": 6, + "serial": 0, + "releaselevel": "final" + }, + "executable": "/usr/libexec/platform-python", + "version_info": [ + 3, + 6, + 8, + "final", + 0 + ], + "has_sslcontext": true + }, + "ansible_system": "Linux", + "ansible_cmdline": { + "root": "/dev/sr0", + "text": true, + "panic": "1", + "console": "ttyS1", + "vsyscall": "emulate", + "BOOT_IMAGE": "/boot/kernel", + "page_poison": "1" + }, + "ansible_devices": { + "sda": { + "host": "", + "size": "59.60 GB", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": "BHYVE SATA DISK", + "vendor": "ATA", + "holders": [], + "sectors": "124999680", + "virtual": 1, + "removable": "0", + "partitions": { + "sda1": { + "size": "59.60 GB", + "uuid": null, + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "start": "2048", + "holders": [], + "sectors": "124997632", + "sectorsize": 512 + } + }, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "deadline", + "support_discard": "4096", + "sas_device_handle": null + }, + "sr0": { + "host": "", + "size": "453.38 MB", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": "BHYVE DVD-ROM", + "vendor": "BHYVE", + "holders": [], + "sectors": "928528", + "virtual": 1, + "removable": "1", + "partitions": {}, + "rotational": "1", + "sectorsize": "2048", + "sas_address": null, + "scheduler_mode": "deadline", + "support_discard": "0", + "sas_device_handle": null + }, + "sr1": { + "host": "", + "size": "86.00 KB", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": "BHYVE DVD-ROM", + "vendor": "BHYVE", + "holders": [], + "sectors": "172", + "virtual": 1, + "removable": "1", + "partitions": {}, + "rotational": "1", + "sectorsize": "2048", + "sas_address": null, + "scheduler_mode": "deadline", + "support_discard": "0", + "sas_device_handle": null + }, + "sr2": { + "host": "", + "size": "832.02 MB", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": "BHYVE DVD-ROM", + "vendor": "BHYVE", + "holders": [], + "sectors": "1703968", + "virtual": 1, + "removable": "1", + "partitions": {}, + "rotational": "1", + "sectorsize": "2048", + "sas_address": null, + "scheduler_mode": "deadline", + "support_discard": "0", + "sas_device_handle": null + }, + "nbd0": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd1": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd2": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd3": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd4": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd5": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd6": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd7": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd8": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd9": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "loop0": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop1": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop2": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop3": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop4": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop5": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop6": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop7": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "nbd10": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd11": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd12": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd13": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd14": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd15": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + } + }, + "ansible_hostnqn": "", + "ansible_ip6tnl0": { + "mtu": 1452, + "type": "unknown", + "active": false, + "device": "ip6tnl0", + "promisc": false, + "features": { + "rx_all": "off [fixed]", + "rx_fcs": "off [fixed]", + "highdma": "on", + "fcoe_mtu": "off [fixed]", + "loopback": "off [fixed]", + "busy_poll": "off [fixed]", + "netns_local": "on [fixed]", + "tx_lockless": "on [fixed]", + "hw_tc_offload": "off [fixed]", + "tx_gso_robust": "off [fixed]", + "l2_fwd_offload": "off [fixed]", + "ntuple_filters": "off [fixed]", + "rx_vlan_filter": "off [fixed]", + "scatter_gather": "on", + "tx_gso_partial": "off [fixed]", + "receive_hashing": "off [fixed]", + "rx_checksumming": "off [fixed]", + "rx_vlan_offload": "off [fixed]", + "tx_checksumming": "on", + "tx_nocache_copy": "off", + "tx_vlan_offload": "off [fixed]", + "vlan_challenged": "off [fixed]", + "tx_checksum_ipv4": "off [fixed]", + "tx_checksum_ipv6": "off [fixed]", + "tx_checksum_sctp": "off [fixed]", + "tx_scatter_gather": "on", + "rx_vlan_stag_filter": "off [fixed]", + "tx_gre_segmentation": "off [fixed]", + "tx_tcp_segmentation": "on", + "tx_checksum_fcoe_crc": "off [fixed]", + "tx_fcoe_segmentation": "off [fixed]", + "tx_sctp_segmentation": "on", + "tx_tcp6_segmentation": "on", + "large_receive_offload": "off [fixed]", + "rx_vlan_stag_hw_parse": "off [fixed]", + "tx_checksum_ip_generic": "on", + "tx_ipxip4_segmentation": "off [fixed]", + "tx_ipxip6_segmentation": "off [fixed]", + "tx_vlan_stag_hw_insert": "off [fixed]", + "generic_receive_offload": "on", + "tx_tcp_ecn_segmentation": "on", + "tx_udp_tnl_segmentation": "off [fixed]", + "tcp_segmentation_offload": "on", + "tx_gre_csum_segmentation": "off [fixed]", + "udp_fragmentation_offload": "on", + "tx_scatter_gather_fraglist": "on", + "generic_segmentation_offload": "on", + "tx_tcp_mangleid_segmentation": "on", + "tx_udp_tnl_csum_segmentation": "off [fixed]" + }, + "macaddress": "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00", + "timestamping": [ + "rx_software", + "software" + ], + "hw_timestamp_filters": [] + }, + "ansible_machine": "x86_64", + "ansible_pkg_mgr": "dnf", + "ansible_selinux": { + "status": "disabled" + }, + "ansible_user_id": "awx", + "ansible_apparmor": { + "status": "disabled" + }, + "ansible_hostname": "awx", + "ansible_nodename": "awx", + "ansible_user_dir": "/tmp", + "ansible_user_gid": 0, + "ansible_user_uid": 501, + "ansible_bios_date": "03/14/2014", + "ansible_date_time": { + "tz": "UTC", + "day": "11", + "date": "2020-03-11", + "hour": "18", + "time": "18:17:15", + "year": "2020", + "epoch": "1583950635", + "month": "03", + "minute": "17", + "second": "15", + "iso8601": "2020-03-11T18:17:15Z", + "weekday": "Wednesday", + "tz_offset": "+0000", + "weeknumber": "10", + "iso8601_basic": "20200311T181715335527", + "iso8601_micro": "2020-03-11T18:17:15.335587Z", + "weekday_number": "3", + "iso8601_basic_short": "20200311T181715" + }, + "ansible_is_chroot": false, + "ansible_iscsi_iqn": "", + "ansible_memory_mb": { + "real": { + "free": 268, + "used": 7705, + "total": 7973 + }, + "swap": { + "free": 1023, + "used": 0, + "total": 1023, + "cached": 0 + }, + "nocache": { + "free": 4740, + "used": 3233 + } + }, + "ansible_os_family": "RedHat", + "ansible_processor": [ + "0", + "GenuineIntel", + "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz", + "1", + "GenuineIntel", + "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz", + "2", + "GenuineIntel", + "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz", + "3", + "GenuineIntel", + "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz", + "4", + "GenuineIntel", + "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz", + "5", + "GenuineIntel", + "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz" + ], + "ansible_interfaces": [ + "ip6tnl0", + "eth0", + "lo", + "tunl0" + ], + "ansible_machine_id": "a76ef18c33e144f09ee5370f751184fa", + "ansible_memfree_mb": 268, + "ansible_user_gecos": ",,,", + "ansible_user_shell": "/bin/bash", + "ansible_form_factor": "Unknown", + "ansible_memtotal_mb": 7973, + "ansible_service_mgr": "bwrap", + "ansible_swapfree_mb": 1023, + "ansible_architecture": "x86_64", + "ansible_bios_version": "1.00", + "ansible_default_ipv4": { + "mtu": 1500, + "type": "ether", + "alias": "eth0", + "address": "172.18.0.5", + "gateway": "172.18.0.1", + "netmask": "255.255.0.0", + "network": "172.18.0.0", + "broadcast": "172.18.255.255", + "interface": "eth0", + "macaddress": "02:42:ac:12:00:05" + }, + "ansible_default_ipv6": {}, + "ansible_device_links": { + "ids": {}, + "uuids": {}, + "labels": {}, + "masters": {} + }, + "ansible_distribution": "CentOS", + "ansible_proc_cmdline": { + "root": "/dev/sr0", + "text": true, + "panic": "1", + "console": [ + "ttyS0", + "ttyS1" + ], + "vsyscall": "emulate", + "BOOT_IMAGE": "/boot/kernel", + "page_poison": "1" + }, + "ansible_product_name": "BHYVE", + "ansible_product_uuid": "NA", + "ansible_real_user_id": 501, + "ansible_swaptotal_mb": 1023, + "ansible_real_group_id": 0, + "ansible_system_vendor": "NA", + "ansible_kernel_version": "#1 SMP Tue Jul 2 22:58:16 UTC 2019", + "ansible_product_serial": "NA", + "ansible_python_version": "3.6.8", + "ansible_uptime_seconds": 1867065, + "ansible_userspace_bits": "64", + "_ansible_facts_gathered": true, + "ansible_processor_cores": 1, + "ansible_processor_count": 6, + "ansible_processor_vcpus": 6, + "ansible_product_version": "1.0", + "ansible_effective_user_id": 501, + "ansible_fibre_channel_wwn": [], + "ansible_all_ipv4_addresses": [ + "172.18.0.5" + ], + "ansible_all_ipv6_addresses": [], + "ansible_effective_group_id": 0, + "ansible_system_capabilities": [ + "" + ], + "ansible_virtualization_role": "guest", + "ansible_virtualization_type": "docker", + "ansible_distribution_release": "Core", + "ansible_distribution_version": "8.1", + "discovered_interpreter_python": "/usr/libexec/platform-python", + "ansible_distribution_file_path": "/etc/redhat-release", + "ansible_selinux_python_present": true, + "ansible_userspace_architecture": "x86_64", + "ansible_distribution_file_parsed": true, + "ansible_distribution_file_variety": "RedHat", + "ansible_distribution_major_version": "8", + "ansible_processor_threads_per_core": 1, + "ansible_system_capabilities_enforced": "True" +} diff --git a/awx/ui_next/src/screens/Inventory/InventoryHost/InventoryHost.jsx b/awx/ui_next/src/screens/Inventory/InventoryHost/InventoryHost.jsx index 3c07032096..f8db7e74cf 100644 --- a/awx/ui_next/src/screens/Inventory/InventoryHost/InventoryHost.jsx +++ b/awx/ui_next/src/screens/Inventory/InventoryHost/InventoryHost.jsx @@ -22,6 +22,7 @@ import RoutedTabs from '@components/RoutedTabs'; import JobList from '@components/JobList'; import InventoryHostDetail from '../InventoryHostDetail'; import InventoryHostEdit from '../InventoryHostEdit'; +import InventoryHostFacts from '../InventoryHostFacts'; function InventoryHost({ i18n, setBreadcrumb, inventory }) { const location = useLocation(); @@ -140,6 +141,12 @@ function InventoryHost({ i18n, setBreadcrumb, inventory }) { > + + + { + const [{ data: factsObj }] = await Promise.all([ + HostsAPI.readFacts(host.id), + ]); + return JSON.stringify(factsObj, null, 4); + }, [host]), + '{}' + ); + + useEffect(() => { + fetchFacts(); + }, [fetchFacts]); + + if (isLoading) { + return ; + } + + if (error) { + return ; + } + + return ( + + + + + + ); +} + +InventoryHostFacts.propTypes = { + host: Host.isRequired, +}; + +export default withI18n()(InventoryHostFacts); diff --git a/awx/ui_next/src/screens/Inventory/InventoryHostFacts/InventoryHostFacts.test.jsx b/awx/ui_next/src/screens/Inventory/InventoryHostFacts/InventoryHostFacts.test.jsx new file mode 100644 index 0000000000..96b4c8ec27 --- /dev/null +++ b/awx/ui_next/src/screens/Inventory/InventoryHostFacts/InventoryHostFacts.test.jsx @@ -0,0 +1,56 @@ +import React from 'react'; +import { act } from 'react-dom/test-utils'; +import { mountWithContexts, waitForElement } from '@testUtils/enzymeHelpers'; +import InventoryHostFacts from './InventoryHostFacts'; +import { HostsAPI } from '@api'; +import mockHost from '../shared/data.host.json'; +import mockHostFacts from '../shared/data.hostFacts.json'; + +jest.mock('@api/models/Hosts'); +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useParams: () => ({ + id: 1, + hostId: 1, + }), +})); + +describe('', () => { + let wrapper; + + beforeEach(async () => { + HostsAPI.readFacts.mockResolvedValue({ data: mockHostFacts }); + await act(async () => { + wrapper = mountWithContexts(); + }); + await waitForElement(wrapper, 'ContentLoading', el => el.length === 0); + }); + + afterEach(() => { + jest.clearAllMocks(); + wrapper.unmount(); + }); + + test('initially renders successfully ', () => { + expect(wrapper.find('InventoryHostFacts').length).toBe(1); + }); + + test('renders ContentError when facts GET fails', async () => { + HostsAPI.readFacts.mockRejectedValueOnce( + new Error({ + response: { + config: { + method: 'get', + url: '/api/v2/hosts/1/ansible_facts', + }, + data: 'An error occurred', + status: 500, + }, + }) + ); + await act(async () => { + wrapper = mountWithContexts(); + }); + await waitForElement(wrapper, 'ContentError', el => el.length === 1); + }); +}); diff --git a/awx/ui_next/src/screens/Inventory/InventoryHostFacts/index.js b/awx/ui_next/src/screens/Inventory/InventoryHostFacts/index.js new file mode 100644 index 0000000000..7d20ee2705 --- /dev/null +++ b/awx/ui_next/src/screens/Inventory/InventoryHostFacts/index.js @@ -0,0 +1 @@ +export { default } from './InventoryHostFacts'; diff --git a/awx/ui_next/src/screens/Inventory/shared/data.hostFacts.json b/awx/ui_next/src/screens/Inventory/shared/data.hostFacts.json new file mode 100644 index 0000000000..6d80a8f6f5 --- /dev/null +++ b/awx/ui_next/src/screens/Inventory/shared/data.hostFacts.json @@ -0,0 +1,1249 @@ +{ + "ansible_lo": { + "mtu": 65536, + "ipv4": { + "address": "127.0.0.1", + "netmask": "255.0.0.0", + "network": "127.0.0.0", + "broadcast": "host" + }, + "type": "loopback", + "active": true, + "device": "lo", + "promisc": false, + "features": { + "rx_all": "off [fixed]", + "rx_fcs": "off [fixed]", + "highdma": "on [fixed]", + "fcoe_mtu": "off [fixed]", + "loopback": "on [fixed]", + "busy_poll": "off [fixed]", + "netns_local": "on [fixed]", + "tx_lockless": "on [fixed]", + "hw_tc_offload": "off [fixed]", + "tx_gso_robust": "off [fixed]", + "l2_fwd_offload": "off [fixed]", + "ntuple_filters": "off [fixed]", + "rx_vlan_filter": "off [fixed]", + "scatter_gather": "on", + "tx_gso_partial": "off [fixed]", + "receive_hashing": "off [fixed]", + "rx_checksumming": "on [fixed]", + "rx_vlan_offload": "off [fixed]", + "tx_checksumming": "on", + "tx_nocache_copy": "off [fixed]", + "tx_vlan_offload": "off [fixed]", + "vlan_challenged": "on [fixed]", + "tx_checksum_ipv4": "off [fixed]", + "tx_checksum_ipv6": "off [fixed]", + "tx_checksum_sctp": "on [fixed]", + "tx_scatter_gather": "on [fixed]", + "rx_vlan_stag_filter": "off [fixed]", + "tx_gre_segmentation": "off [fixed]", + "tx_tcp_segmentation": "on", + "tx_checksum_fcoe_crc": "off [fixed]", + "tx_fcoe_segmentation": "off [fixed]", + "tx_sctp_segmentation": "on", + "tx_tcp6_segmentation": "on", + "large_receive_offload": "off [fixed]", + "rx_vlan_stag_hw_parse": "off [fixed]", + "tx_checksum_ip_generic": "on [fixed]", + "tx_ipxip4_segmentation": "off [fixed]", + "tx_ipxip6_segmentation": "off [fixed]", + "tx_vlan_stag_hw_insert": "off [fixed]", + "generic_receive_offload": "on", + "tx_tcp_ecn_segmentation": "on", + "tx_udp_tnl_segmentation": "off [fixed]", + "tcp_segmentation_offload": "on", + "tx_gre_csum_segmentation": "off [fixed]", + "udp_fragmentation_offload": "on", + "tx_scatter_gather_fraglist": "on [fixed]", + "generic_segmentation_offload": "on", + "tx_tcp_mangleid_segmentation": "on", + "tx_udp_tnl_csum_segmentation": "off [fixed]" + }, + "timestamping": [ + "rx_software", + "software" + ], + "hw_timestamp_filters": [] + }, + "ansible_dns": { + "options": { + "ndots": "0" + }, + "nameservers": [ + "127.0.0.11" + ] + }, + "ansible_env": { + "_": "/usr/libexec/platform-python", + "OS": " Operating System: Docker Desktop", + "TZ": "UTC", + "PWD": "/tmp/awx_13_r1ffeqze/project", + "HOME": "/var/lib/awx", + "LANG": "\"en-us\"", + "PATH": "/venv/ansible/bin:/venv/awx/bin:/venv/awx/bin:/usr/local/n/versions/node/10.15.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "SHLVL": "4", + "JOB_ID": "13", + "LC_ALL": "en_US.UTF-8", + "MFLAGS": "-w", + "OLDPWD": "/awx_devel", + "AWX_HOST": "https://towerhost", + "HOSTNAME": "awx", + "LANGUAGE": "en_US:en", + "SDB_HOST": "0.0.0.0", + "SDB_PORT": "7899", + "MAKEFLAGS": "w", + "MAKELEVEL": "2", + "PYTHONPATH": "/venv/ansible/lib/python3.6/site-packages:/awx_devel/awx/lib:/venv/awx/lib/python3.6/site-packages/ansible_runner/callbacks", + "CURRENT_UID": "501", + "VIRTUAL_ENV": "/venv/ansible", + "INVENTORY_ID": "1", + "MAX_EVENT_RES": "700000", + "PROOT_TMP_DIR": "/tmp", + "RABBITMQ_HOST": "rabbitmq", + "RABBITMQ_PASS": "guest", + "RABBITMQ_USER": "guest", + "RABBITMQ_VHOST": "/", + "ANSIBLE_LIBRARY": "/awx_devel/awx/plugins/library", + "SDB_NOTIFY_HOST": "docker.for.mac.host.internal", + "AWX_GROUP_QUEUES": "tower", + "PROJECT_REVISION": "9e2cd25bfb26ba82f40cf31276e1942bf38b3a30", + "ANSIBLE_VENV_PATH": "/venv/ansible", + "ANSIBLE_ROLES_PATH": "/tmp/awx_13_r1ffeqze/requirements_roles:~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles", + "RUNNER_OMIT_EVENTS": "False", + "SUPERVISOR_ENABLED": "1", + "ANSIBLE_FORCE_COLOR": "True", + "ANSIBLE_CACHE_PLUGIN": "jsonfile", + "AWX_PRIVATE_DATA_DIR": "/tmp/awx_13_r1ffeqze", + "AWX_ISOLATED_DATA_DIR": "/tmp/awx_13_r1ffeqze/artifacts/13", + "SUPERVISOR_GROUP_NAME": "tower-processes", + "SUPERVISOR_SERVER_URL": "unix:///tmp/supervisor.sock", + "DJANGO_SETTINGS_MODULE": "awx.settings.development", + "ANSIBLE_STDOUT_CALLBACK": "awx_display", + "SUPERVISOR_PROCESS_NAME": "awx-dispatcher", + "ANSIBLE_CALLBACK_PLUGINS": "/awx_devel/awx/plugins/callback:/venv/awx/lib/python3.6/site-packages/ansible_runner/callbacks", + "ANSIBLE_COLLECTIONS_PATHS": "/tmp/awx_13_r1ffeqze/requirements_collections:~/.ansible/collections:/usr/share/ansible/collections", + "ANSIBLE_HOST_KEY_CHECKING": "False", + "RUNNER_ONLY_FAILED_EVENTS": "False", + "ANSIBLE_RETRY_FILES_ENABLED": "False", + "ANSIBLE_SSH_CONTROL_PATH_DIR": "/tmp/awx_13_r1ffeqze/cp", + "ANSIBLE_CACHE_PLUGIN_CONNECTION": "/tmp/awx_13_r1ffeqze/artifacts/13/fact_cache", + "DJANGO_LIVE_TEST_SERVER_ADDRESS": "localhost:9013-9199", + "ANSIBLE_INVENTORY_UNPARSED_FAILED": "True", + "ANSIBLE_PARAMIKO_RECORD_HOST_KEYS": "False" + }, + "ansible_lsb": {}, + "ansible_eth0": { + "mtu": 1500, + "ipv4": { + "address": "172.18.0.5", + "netmask": "255.255.0.0", + "network": "172.18.0.0", + "broadcast": "172.18.255.255" + }, + "type": "ether", + "speed": 10000, + "active": true, + "device": "eth0", + "promisc": false, + "features": { + "rx_all": "off [fixed]", + "rx_fcs": "off [fixed]", + "highdma": "on", + "fcoe_mtu": "off [fixed]", + "loopback": "off [fixed]", + "busy_poll": "off [fixed]", + "netns_local": "off [fixed]", + "tx_lockless": "on [fixed]", + "hw_tc_offload": "off [fixed]", + "tx_gso_robust": "off [fixed]", + "l2_fwd_offload": "off [fixed]", + "ntuple_filters": "off [fixed]", + "rx_vlan_filter": "off [fixed]", + "scatter_gather": "on", + "tx_gso_partial": "off [fixed]", + "receive_hashing": "off [fixed]", + "rx_checksumming": "on", + "rx_vlan_offload": "on", + "tx_checksumming": "on", + "tx_nocache_copy": "off", + "tx_vlan_offload": "on", + "vlan_challenged": "off [fixed]", + "tx_checksum_ipv4": "off [fixed]", + "tx_checksum_ipv6": "off [fixed]", + "tx_checksum_sctp": "on", + "tx_scatter_gather": "on", + "rx_vlan_stag_filter": "off [fixed]", + "tx_gre_segmentation": "on", + "tx_tcp_segmentation": "on", + "tx_checksum_fcoe_crc": "off [fixed]", + "tx_fcoe_segmentation": "off [fixed]", + "tx_sctp_segmentation": "on", + "tx_tcp6_segmentation": "on", + "large_receive_offload": "off [fixed]", + "rx_vlan_stag_hw_parse": "on", + "tx_checksum_ip_generic": "on", + "tx_ipxip4_segmentation": "on", + "tx_ipxip6_segmentation": "on", + "tx_vlan_stag_hw_insert": "on", + "generic_receive_offload": "on", + "tx_tcp_ecn_segmentation": "on", + "tx_udp_tnl_segmentation": "on", + "tcp_segmentation_offload": "on", + "tx_gre_csum_segmentation": "on", + "udp_fragmentation_offload": "on", + "tx_scatter_gather_fraglist": "on", + "generic_segmentation_offload": "on", + "tx_tcp_mangleid_segmentation": "on", + "tx_udp_tnl_csum_segmentation": "on" + }, + "macaddress": "02:42:ac:12:00:05", + "timestamping": [ + "rx_software", + "software" + ], + "hw_timestamp_filters": [] + }, + "ansible_fips": false, + "ansible_fqdn": "awx", + "module_setup": true, + "ansible_local": {}, + "ansible_tunl0": { + "mtu": 1480, + "type": "unknown", + "active": false, + "device": "tunl0", + "promisc": false, + "features": { + "rx_all": "off [fixed]", + "rx_fcs": "off [fixed]", + "highdma": "on", + "fcoe_mtu": "off [fixed]", + "loopback": "off [fixed]", + "busy_poll": "off [fixed]", + "netns_local": "on [fixed]", + "tx_lockless": "on [fixed]", + "hw_tc_offload": "off [fixed]", + "tx_gso_robust": "off [fixed]", + "l2_fwd_offload": "off [fixed]", + "ntuple_filters": "off [fixed]", + "rx_vlan_filter": "off [fixed]", + "scatter_gather": "on", + "tx_gso_partial": "off [fixed]", + "receive_hashing": "off [fixed]", + "rx_checksumming": "off [fixed]", + "rx_vlan_offload": "off [fixed]", + "tx_checksumming": "on", + "tx_nocache_copy": "off", + "tx_vlan_offload": "off [fixed]", + "vlan_challenged": "off [fixed]", + "tx_checksum_ipv4": "off [fixed]", + "tx_checksum_ipv6": "off [fixed]", + "tx_checksum_sctp": "off [fixed]", + "tx_scatter_gather": "on", + "rx_vlan_stag_filter": "off [fixed]", + "tx_gre_segmentation": "off [fixed]", + "tx_tcp_segmentation": "on", + "tx_checksum_fcoe_crc": "off [fixed]", + "tx_fcoe_segmentation": "off [fixed]", + "tx_sctp_segmentation": "on", + "tx_tcp6_segmentation": "on", + "large_receive_offload": "off [fixed]", + "rx_vlan_stag_hw_parse": "off [fixed]", + "tx_checksum_ip_generic": "on", + "tx_ipxip4_segmentation": "off [fixed]", + "tx_ipxip6_segmentation": "off [fixed]", + "tx_vlan_stag_hw_insert": "off [fixed]", + "generic_receive_offload": "on", + "tx_tcp_ecn_segmentation": "on", + "tx_udp_tnl_segmentation": "off [fixed]", + "tcp_segmentation_offload": "on", + "tx_gre_csum_segmentation": "off [fixed]", + "udp_fragmentation_offload": "on", + "tx_scatter_gather_fraglist": "on", + "generic_segmentation_offload": "on", + "tx_tcp_mangleid_segmentation": "on", + "tx_udp_tnl_csum_segmentation": "off [fixed]" + }, + "macaddress": "00:00:00:00", + "timestamping": [ + "rx_software", + "software" + ], + "hw_timestamp_filters": [] + }, + "gather_subset": [ + "all" + ], + "ansible_domain": "", + "ansible_kernel": "4.9.184-linuxkit", + "ansible_mounts": [ + { + "uuid": "N/A", + "mount": "/etc/resolv.conf", + "device": "/dev/sda1", + "fstype": "ext4", + "options": "rw,nosuid,relatime,data=ordered,bind", + "block_size": 4096, + "block_used": 3938899, + "inode_used": 479010, + "size_total": 62725623808, + "block_total": 15313873, + "inode_total": 3907584, + "size_available": 46591893504, + "block_available": 11374974, + "inode_available": 3428574 + }, + { + "uuid": "N/A", + "mount": "/etc/hostname", + "device": "/dev/sda1", + "fstype": "ext4", + "options": "rw,nosuid,relatime,data=ordered,bind", + "block_size": 4096, + "block_used": 3938899, + "inode_used": 479010, + "size_total": 62725623808, + "block_total": 15313873, + "inode_total": 3907584, + "size_available": 46591893504, + "block_available": 11374974, + "inode_available": 3428574 + }, + { + "uuid": "N/A", + "mount": "/etc/hosts", + "device": "/dev/sda1", + "fstype": "ext4", + "options": "rw,nosuid,relatime,data=ordered,bind", + "block_size": 4096, + "block_used": 3938899, + "inode_used": 479010, + "size_total": 62725623808, + "block_total": 15313873, + "inode_total": 3907584, + "size_available": 46591893504, + "block_available": 11374974, + "inode_available": 3428574 + } + ], + "ansible_python": { + "type": "cpython", + "version": { + "major": 3, + "micro": 8, + "minor": 6, + "serial": 0, + "releaselevel": "final" + }, + "executable": "/usr/libexec/platform-python", + "version_info": [ + 3, + 6, + 8, + "final", + 0 + ], + "has_sslcontext": true + }, + "ansible_system": "Linux", + "ansible_cmdline": { + "root": "/dev/sr0", + "text": true, + "panic": "1", + "console": "ttyS1", + "vsyscall": "emulate", + "BOOT_IMAGE": "/boot/kernel", + "page_poison": "1" + }, + "ansible_devices": { + "sda": { + "host": "", + "size": "59.60 GB", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": "BHYVE SATA DISK", + "vendor": "ATA", + "holders": [], + "sectors": "124999680", + "virtual": 1, + "removable": "0", + "partitions": { + "sda1": { + "size": "59.60 GB", + "uuid": null, + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "start": "2048", + "holders": [], + "sectors": "124997632", + "sectorsize": 512 + } + }, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "deadline", + "support_discard": "4096", + "sas_device_handle": null + }, + "sr0": { + "host": "", + "size": "453.38 MB", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": "BHYVE DVD-ROM", + "vendor": "BHYVE", + "holders": [], + "sectors": "928528", + "virtual": 1, + "removable": "1", + "partitions": {}, + "rotational": "1", + "sectorsize": "2048", + "sas_address": null, + "scheduler_mode": "deadline", + "support_discard": "0", + "sas_device_handle": null + }, + "sr1": { + "host": "", + "size": "86.00 KB", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": "BHYVE DVD-ROM", + "vendor": "BHYVE", + "holders": [], + "sectors": "172", + "virtual": 1, + "removable": "1", + "partitions": {}, + "rotational": "1", + "sectorsize": "2048", + "sas_address": null, + "scheduler_mode": "deadline", + "support_discard": "0", + "sas_device_handle": null + }, + "sr2": { + "host": "", + "size": "832.02 MB", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": "BHYVE DVD-ROM", + "vendor": "BHYVE", + "holders": [], + "sectors": "1703968", + "virtual": 1, + "removable": "1", + "partitions": {}, + "rotational": "1", + "sectorsize": "2048", + "sas_address": null, + "scheduler_mode": "deadline", + "support_discard": "0", + "sas_device_handle": null + }, + "nbd0": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd1": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd2": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd3": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd4": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd5": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd6": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd7": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd8": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd9": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "loop0": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop1": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop2": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop3": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop4": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop5": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop6": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "loop7": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "1", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "0", + "sas_device_handle": null + }, + "nbd10": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd11": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd12": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd13": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd14": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + }, + "nbd15": { + "host": "", + "size": "0.00 Bytes", + "links": { + "ids": [], + "uuids": [], + "labels": [], + "masters": [] + }, + "model": null, + "vendor": null, + "holders": [], + "sectors": "0", + "virtual": 1, + "removable": "0", + "partitions": {}, + "rotational": "0", + "sectorsize": "512", + "sas_address": null, + "scheduler_mode": "", + "support_discard": "512", + "sas_device_handle": null + } + }, + "ansible_hostnqn": "", + "ansible_ip6tnl0": { + "mtu": 1452, + "type": "unknown", + "active": false, + "device": "ip6tnl0", + "promisc": false, + "features": { + "rx_all": "off [fixed]", + "rx_fcs": "off [fixed]", + "highdma": "on", + "fcoe_mtu": "off [fixed]", + "loopback": "off [fixed]", + "busy_poll": "off [fixed]", + "netns_local": "on [fixed]", + "tx_lockless": "on [fixed]", + "hw_tc_offload": "off [fixed]", + "tx_gso_robust": "off [fixed]", + "l2_fwd_offload": "off [fixed]", + "ntuple_filters": "off [fixed]", + "rx_vlan_filter": "off [fixed]", + "scatter_gather": "on", + "tx_gso_partial": "off [fixed]", + "receive_hashing": "off [fixed]", + "rx_checksumming": "off [fixed]", + "rx_vlan_offload": "off [fixed]", + "tx_checksumming": "on", + "tx_nocache_copy": "off", + "tx_vlan_offload": "off [fixed]", + "vlan_challenged": "off [fixed]", + "tx_checksum_ipv4": "off [fixed]", + "tx_checksum_ipv6": "off [fixed]", + "tx_checksum_sctp": "off [fixed]", + "tx_scatter_gather": "on", + "rx_vlan_stag_filter": "off [fixed]", + "tx_gre_segmentation": "off [fixed]", + "tx_tcp_segmentation": "on", + "tx_checksum_fcoe_crc": "off [fixed]", + "tx_fcoe_segmentation": "off [fixed]", + "tx_sctp_segmentation": "on", + "tx_tcp6_segmentation": "on", + "large_receive_offload": "off [fixed]", + "rx_vlan_stag_hw_parse": "off [fixed]", + "tx_checksum_ip_generic": "on", + "tx_ipxip4_segmentation": "off [fixed]", + "tx_ipxip6_segmentation": "off [fixed]", + "tx_vlan_stag_hw_insert": "off [fixed]", + "generic_receive_offload": "on", + "tx_tcp_ecn_segmentation": "on", + "tx_udp_tnl_segmentation": "off [fixed]", + "tcp_segmentation_offload": "on", + "tx_gre_csum_segmentation": "off [fixed]", + "udp_fragmentation_offload": "on", + "tx_scatter_gather_fraglist": "on", + "generic_segmentation_offload": "on", + "tx_tcp_mangleid_segmentation": "on", + "tx_udp_tnl_csum_segmentation": "off [fixed]" + }, + "macaddress": "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00", + "timestamping": [ + "rx_software", + "software" + ], + "hw_timestamp_filters": [] + }, + "ansible_machine": "x86_64", + "ansible_pkg_mgr": "dnf", + "ansible_selinux": { + "status": "disabled" + }, + "ansible_user_id": "awx", + "ansible_apparmor": { + "status": "disabled" + }, + "ansible_hostname": "awx", + "ansible_nodename": "awx", + "ansible_user_dir": "/tmp", + "ansible_user_gid": 0, + "ansible_user_uid": 501, + "ansible_bios_date": "03/14/2014", + "ansible_date_time": { + "tz": "UTC", + "day": "11", + "date": "2020-03-11", + "hour": "18", + "time": "18:17:15", + "year": "2020", + "epoch": "1583950635", + "month": "03", + "minute": "17", + "second": "15", + "iso8601": "2020-03-11T18:17:15Z", + "weekday": "Wednesday", + "tz_offset": "+0000", + "weeknumber": "10", + "iso8601_basic": "20200311T181715335527", + "iso8601_micro": "2020-03-11T18:17:15.335587Z", + "weekday_number": "3", + "iso8601_basic_short": "20200311T181715" + }, + "ansible_is_chroot": false, + "ansible_iscsi_iqn": "", + "ansible_memory_mb": { + "real": { + "free": 268, + "used": 7705, + "total": 7973 + }, + "swap": { + "free": 1023, + "used": 0, + "total": 1023, + "cached": 0 + }, + "nocache": { + "free": 4740, + "used": 3233 + } + }, + "ansible_os_family": "RedHat", + "ansible_processor": [ + "0", + "GenuineIntel", + "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz", + "1", + "GenuineIntel", + "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz", + "2", + "GenuineIntel", + "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz", + "3", + "GenuineIntel", + "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz", + "4", + "GenuineIntel", + "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz", + "5", + "GenuineIntel", + "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz" + ], + "ansible_interfaces": [ + "ip6tnl0", + "eth0", + "lo", + "tunl0" + ], + "ansible_machine_id": "a76ef18c33e144f09ee5370f751184fa", + "ansible_memfree_mb": 268, + "ansible_user_gecos": ",,,", + "ansible_user_shell": "/bin/bash", + "ansible_form_factor": "Unknown", + "ansible_memtotal_mb": 7973, + "ansible_service_mgr": "bwrap", + "ansible_swapfree_mb": 1023, + "ansible_architecture": "x86_64", + "ansible_bios_version": "1.00", + "ansible_default_ipv4": { + "mtu": 1500, + "type": "ether", + "alias": "eth0", + "address": "172.18.0.5", + "gateway": "172.18.0.1", + "netmask": "255.255.0.0", + "network": "172.18.0.0", + "broadcast": "172.18.255.255", + "interface": "eth0", + "macaddress": "02:42:ac:12:00:05" + }, + "ansible_default_ipv6": {}, + "ansible_device_links": { + "ids": {}, + "uuids": {}, + "labels": {}, + "masters": {} + }, + "ansible_distribution": "CentOS", + "ansible_proc_cmdline": { + "root": "/dev/sr0", + "text": true, + "panic": "1", + "console": [ + "ttyS0", + "ttyS1" + ], + "vsyscall": "emulate", + "BOOT_IMAGE": "/boot/kernel", + "page_poison": "1" + }, + "ansible_product_name": "BHYVE", + "ansible_product_uuid": "NA", + "ansible_real_user_id": 501, + "ansible_swaptotal_mb": 1023, + "ansible_real_group_id": 0, + "ansible_system_vendor": "NA", + "ansible_kernel_version": "#1 SMP Tue Jul 2 22:58:16 UTC 2019", + "ansible_product_serial": "NA", + "ansible_python_version": "3.6.8", + "ansible_uptime_seconds": 1867065, + "ansible_userspace_bits": "64", + "_ansible_facts_gathered": true, + "ansible_processor_cores": 1, + "ansible_processor_count": 6, + "ansible_processor_vcpus": 6, + "ansible_product_version": "1.0", + "ansible_effective_user_id": 501, + "ansible_fibre_channel_wwn": [], + "ansible_all_ipv4_addresses": [ + "172.18.0.5" + ], + "ansible_all_ipv6_addresses": [], + "ansible_effective_group_id": 0, + "ansible_system_capabilities": [ + "" + ], + "ansible_virtualization_role": "guest", + "ansible_virtualization_type": "docker", + "ansible_distribution_release": "Core", + "ansible_distribution_version": "8.1", + "discovered_interpreter_python": "/usr/libexec/platform-python", + "ansible_distribution_file_path": "/etc/redhat-release", + "ansible_selinux_python_present": true, + "ansible_userspace_architecture": "x86_64", + "ansible_distribution_file_parsed": true, + "ansible_distribution_file_variety": "RedHat", + "ansible_distribution_major_version": "8", + "ansible_processor_threads_per_core": 1, + "ansible_system_capabilities_enforced": "True" +} diff --git a/awx/ui_next/src/screens/Template/JobTemplateDetail/JobTemplateDetail.jsx b/awx/ui_next/src/screens/Template/JobTemplateDetail/JobTemplateDetail.jsx index d5a14bce6f..627dacb9d7 100644 --- a/awx/ui_next/src/screens/Template/JobTemplateDetail/JobTemplateDetail.jsx +++ b/awx/ui_next/src/screens/Template/JobTemplateDetail/JobTemplateDetail.jsx @@ -127,7 +127,7 @@ function JobTemplateDetail({ i18n, template }) { )} {use_fact_cache && ( - {i18n._(t`Use Fact Cache`)} + {i18n._(t`Use Fact Storage`)} )} diff --git a/awx/ui_next/src/screens/Template/shared/JobTemplateForm.jsx b/awx/ui_next/src/screens/Template/shared/JobTemplateForm.jsx index 0640dab906..1e114811a4 100644 --- a/awx/ui_next/src/screens/Template/shared/JobTemplateForm.jsx +++ b/awx/ui_next/src/screens/Template/shared/JobTemplateForm.jsx @@ -561,9 +561,10 @@ function JobTemplateForm({