Giter Club home page Giter Club logo

ara-web's Introduction

THIS PROJECT IS ARCHIVED

ara-web was meant to be a react+patternfly javascript interface to the ara <https://github.com/ansible-community/ara-web> API.

It used to work but due to lack of time, interest, traction and contributors, ara-web has not kept up with the API changes and the features provided by the built-in ara reporting interface.

ara-web is now retired to avoid confusing users and contributors alike.

For more information, see this issue: #45

ara-web

ARA Records Ansible playbooks and makes them easier to understand and troubleshoot.

ara-web is a standalone and stateless web client interface to the API provided by ARA.

Documentation is available at ara.readthedocs.io.

Requirements

Running the web interface

git clone https://github.com/ansible-community/ara-web
cd ara-web
npm install
npm start

Running tests

npm test

Contributors

See contributors on GitHub.

Copyright

Copyright (c) 2019 Red Hat, Inc.

ARA is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

ARA is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with ARA.  If not, see <http://www.gnu.org/licenses/>.

ara-web's People

Contributors

dmsimard avatar rh-gvincent avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ara-web's Issues

Error in docking ara-web with ara API interface

My os

CentOS Linux release 7.6.1810 (Core) 3.10.0-957.el7.x86_64

version of npm

[root@server-ara public]# npm --version
5.6.0

Some configure file

ara-web/public/config.json  
{
  "apiURL": "http://192.168.6.141:8000"
}   

The status of ara api and ara-web

image
image

My problem

The ara-web shows an error:
image

So how to deal with this problem?

Mark as deprecated

Since the webinterface in ansible-community/ara is now usable and no progress is visible here I would suggest to deprecate this project. This would help to avoid ambiguity.

Implement detailed result view

When browsing a list of results, it should be possible to click on it to view details about a specific result.
Doing a query on a result provides useful context in addition to the content of the results which are not available in list view.

Example:

{
    "id": 1,
    "playbook": {
        "id": 1,
        "duration": "38.40244",
        "started": "2019-04-17T13:17:18.334437",
        "ended": "2019-04-17T13:17:56.736877",
        "name": null,
        "status": "failed",
        "path": "/home/dmsimard/dev/sandbox/update-packages.yaml"
    },
    "play": {
        "id": 1,
        "duration": "35.40684",
        "started": "2019-04-17T13:17:18.568601",
        "ended": "2019-04-17T13:17:53.975441",
        "name": "Update packages on all servers",
        "status": "completed",
        "playbook": 1
    },
    "task": {
        "id": 1,
        "duration": "6.309328",
        "started": "2019-04-17T13:17:18.791752",
        "ended": "2019-04-17T13:17:25.101080",
        "name": "Gathering Facts",
        "action": "setup",
        "lineno": 1,
        "handler": false,
        "status": "completed",
        "play": 1,
        "file": 1,
        "playbook": 1
    },
    "host": {
        "id": 2,
        "name": "live-demo-17",
        "alias": null,
        "changed": 0,
        "failed": 0,
        "ok": 0,
        "skipped": 0,
        "unreachable": 1,
        "playbook": 1
    },
    "content": {
        "changed": false,
        "msg": "SSH Error: data could not be sent to remote host \"172.29.239.7\". Make sure this host can be reached over ssh",
        "unreachable": true
    },
    "created": "2019-04-17T13:17:19.720117",
    "updated": "2019-04-17T13:17:19.720153",
    "started": "2019-04-17T13:17:18.791752",
    "ended": "2019-04-17T13:17:19.706423",
    "status": "unreachable"
}

CORS I'm struggling

I installed ara-web from source page shows correctly other than the CORS section

The error in the browser console is

Access to XMLHttpRequest at 'http://ara.domain.com.au:8000/api/v1/' from origin 'http://ara.domain.com.au:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

The error on the ara-manage server is

Exception happened during processing of request from ('ip address', 38304)
Traceback (most recent call last):
  File "/usr/lib64/python3.6/socketserver.py", line 654, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/lib64/python3.6/socketserver.py", line 364, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib64/python3.6/socketserver.py", line 724, in __init__
    self.handle()
  File "/usr/local/lib/python3.6/site-packages/django/core/servers/basehttp.py", line 171, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.6/site-packages/django/core/servers/basehttp.py", line 179, in handle_one_request
    self.raw_requestline = self.rfile.readline(65537)
  File "/usr/lib64/python3.6/socket.py", line 586, in readinto
    return self._sock.recv_into(b)
  ConnectionResetError: [Errno 104] Connection reset by peer

To get to that error I need to start ara-manage in the following manner

export ARA_CORS_ORIGIN_WHITELIST="['https://ara.domain.com.au', 'https://server.domain.com.au']"
export ARA_ALLOWED_HOSTS="['.domain.com.au', '<server ip>','<client ip>']"

/usr/local/bin/ara-manage runserver <server ip>:8000 --settings ara.server.settings 

I gave up on trying to setup the settings.yaml file for allowed host it just seemed to always ignore them

This is running on CentOS 8
If I use the CLI from the same host as the browser I get information

Playbooks with the --check argument enabled should be highlighted as such

When running an ansible-playbook command with the --check argument, it is essentially a dry run and should probably be identified as such in the web client.

I don't have a strong opinion on whether it should be a different color, a different icon or something else at this time.

We can tell if --check was enabled under playbook["arguments"]["check"], for example:

{
    "id": 1,
    "arguments": {
        "verbosity": 3,
        "inventory": [
            "/etc/ansible/hosts"
        ],
        "listhosts": null,
        "subset": null,
        "module_path": null,
        "extra_vars": "Not saved by ARA as configured by 'ignored_arguments'",
        "forks": 5,
        "ask_vault_pass": false,
        "vault_password_files": [],
        "vault_ids": [],
        "tags": [
            "all"
        ],
        "skip_tags": [],
        "ask_pass": false,
        "private_key_file": null,
        "remote_user": null,
        "connection": "smart",
        "timeout": 10,
        "ssh_common_args": "",
        "sftp_extra_args": "",
        "scp_extra_args": "",
        "ssh_extra_args": "",
        "sudo": false,
        "sudo_user": null,
        "su": false,
        "su_user": null,
        "become": false,
        "become_method": "sudo",
        "become_user": "root",
        "ask_sudo_pass": false,
        "ask_su_pass": false,
        "become_ask_pass": false,
        "check": false,      <--- Here
        "syntax": null,
        "diff": false,
        "force_handlers": false,
        "flush_cache": null,
        "listtasks": null,
        "listtags": null,
        "step": null,
        "start_at_task": null
    },
}

Table dropdown body missing output for `ara_record` actions.

Would like to see a component added to the ara_record action showing the output from the API call on the records endpoint. Ideally, when the ara_record action is used in a play, one should be able to visualize the value that is recorded through the web UI under the table dropdown.

referring to this block:

<table
className="pf-c-table pf-m-compact pf-m-no-border-rows"
role="grid"
>
<caption>Task results</caption>
<thead>
<tr>
<th className="pf-u-text-align-center">Status</th>
<th className="pf-u-text-align-center">Host</th>
<th className="pf-u-text-align-center">Started</th>
<th className="pf-u-text-align-center">Ended</th>
<th className="pf-u-text-align-center">Duration</th>
</tr>
</thead>
<tbody>
{task.results.map(result => (
<tr>
<td
data-label="Status"
className="pf-u-text-align-center"
>
<Status status={result.status}>{result.status}</Status>
</td>
<td data-label="Host" className="pf-u-text-align-center">
{result.host.name}
</td>
<td
data-label="Started"
className="pf-u-text-align-center"
>
{new Date(result.started).toUTCString()}
</td>
<td data-label="Ended" className="pf-u-text-align-center">
{new Date(result.ended).toUTCString()}
</td>
<td
data-label="Duration"
className="pf-u-text-align-center"
>
{result.duration} sec
</td>
</tr>
))}
</tbody>
</table>

feature: search by playbook name

Please add the ability to search by playbook name that ran. We run soo many playbooks its hard to scroll through pages and pages to find the right one.

Could the API endpoint be defined at runtime ?

It is probably a good thing to have a default API server out of the configuration but not unlike we have the ability to store the credentials locally, could there be something optional for specifying the endpoint ?

The use case is that we are working on porting the sqlite middleware from 0.x to 1.x (here) which will allow the API backend to serve different databases.

This would allow a single API server instance to host multiple endpoints, for example:

/var/www/logs/
โ”œโ”€โ”€ 1
โ”‚ย ย  โ”œโ”€โ”€ ara-api
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ ansible.sqlite
โ”‚ย ย  โ””โ”€โ”€ console.txt
โ”œโ”€โ”€ 2
โ”‚ย ย  โ”œโ”€โ”€ logs.tar.gz
โ”‚ย ย  โ””โ”€โ”€ some
โ”‚ย ย      โ””โ”€โ”€ path
โ”‚ย ย          โ””โ”€โ”€ ara-api
โ”‚ย ย              โ””โ”€โ”€ ansible.sqlite
โ””โ”€โ”€ 3
    โ”œโ”€โ”€ builds.txt
    โ”œโ”€โ”€ dev
    โ”‚ย ย  โ””โ”€โ”€ ara-api
    โ”‚ย ย      โ””โ”€โ”€ ansible.sqlite
    โ””โ”€โ”€ prod
        โ””โ”€โ”€ ara-api
            โ””โ”€โ”€ ansible.sqlite

Would allow endpoints to exist at:

Being able to change the API server at runtime would allow ara-web to connect to any of the above endpoints from a single instance.

This, in turn, would allow us to compile a static version of the web UI and run it from anywhere (including artifacts/logs) and attach it to any API server.

Implement file content view

Files are displayed as paths in list view and their contents are available in the detailed view of the file.
When clicking on a file, we should be able to see the file's contents.

Example:

{
    "id": 1,
    "sha1": "52a93d5d88c96d0aefe53f70c0b1de0402f2b885",
    "playbook": {
        "id": 1,
        "duration": "38.40244",
        "started": "2019-04-17T13:17:18.334437",
        "ended": "2019-04-17T13:17:56.736877",
        "name": null,
        "status": "failed",
        "path": "/home/dmsimard/dev/sandbox/update-packages.yaml"
    },
    "content": "- name: Update packages on all servers\n  hosts: all\n  gather_facts: yes\n  tasks:\n    - name: Update packages\n      become: yes\n      package:\n        name: \"*\"\n        state: latest\n      register: updates\n\n    - name: Send an email if there are updates\n      mail:\n        to: [email protected]\n        subject: \"Package updates: {{ ansible_hostname }}\"\n        body: \"{{ updates.results }}\"\n      when: updates is changed\n",
    "created": "2019-04-17T13:17:18.354348",
    "updated": "2019-04-17T13:17:18.354367",
    "path": "/home/dmsimard/dev/sandbox/update-packages.yaml"
}

Implement API client basic authentication

The API can require authentication for reads and writes: https://ara.readthedocs.io/en/feature-1.0/api-security.html

We're using axios (example) to query the API and it supports basic authentication: https://stackoverflow.com/questions/44072750/how-to-send-basic-auth-with-axios

How should the user supply the necessary credentials ? It would probably need to be some sort of login screen ? I'm not knowledgeable about the best practices for authentication in javascript apps.

For what it's worth, CORS is already working between the API and ara-web.
The whitelist can be provided through ARA_CORS_ORIGIN_WHITELIST.

Implement playbook filtering (search) for name and status

The API supports searching playbooks by (at time of writing) name and status and the web client should be able to query the API with a name or a status provided by a user.

Worth noting that I expect that the API will eventually support searching for at least labels, different dates (i.e, search playbooks where ended > date) but these can come later.

allow sorting by column headings

Feature Request: Can you add sorting the columns in the playbook output.

For example - I sort on "status" column to quickly find any failures (failures show in red).

Retiring ara-web

The project last worked with ara 1.4.3 which was released in August 2020 -- it was broken by API changes in 1.5.0 as explained in this issue: #29

It's been more than two years since 1.4.3 and there's been a lot of changes since then:

1.4.3.mp4

Nowadays, it isn't uncommon for ara-web to be confusing for users and contributors to the project because it doesn't work with the latest release of ara and there's a built-in UI with django.

I am proposing removing the ara_web role from the ara collection, retiring the ara-web project and setting it as archived on GitHub.

Being an open source project, of course anyone is free to fork ara-web per the terms of the license.
I would just rather stop being on the hook for the project, lift the confusion and let my efforts be focused elsewhere.

Add support full static generation

In ARA 0.x, there is a ara generate html command that wraps around
Frozen-Flask which takes care of crawling all the pages known by the web application and generate the static HTML/JS/CSS files as a result.

It is a useful feature since it allows users to generate a report and render it without requiring a database or an API server -- regardless of the tooling or platform they run Ansible with.

At this time, ara-web can be built to static html/js/css but still expects an API server to query in order to retrieve the data it needs to render the report pages.

We would need a way to generate a static version of the web application that doesn't call out to the API.

CORS Issues - can't resolve

I have ara-web running in a container, ara-api in another container and I'm using a third container for proxying with nginx.

See the attached image. It seems that nothing that I do will resolve this issue.

I've even set CORS_ORIGIN_ALLOW_ALL: true and yet I still get the same message.

I have shelled into the ara-web container and I can telnet to ara-api on port 8000.

I intended for it to not proxy the api commands, since that would be a pain, but to send them directly to the api server. http://ara-api:8000, however, I have not been able to successfully connect, as show in the attached image.

I would appreciate any suggestions on how to resolve this issue.

image

Group Playbook Task results ... per task

As a user, I would expect to have a more consise output like:

Task Name Action Elasped Duration Status
Task 1 x AVG 0s AVG 1s 11 / OK
Task 2 y AVG 1m AVG 1m 11 / CHANGED
Task 3 z AVG 1.5m AVG 1.5m 10 / CHANGED, 1 FAILED
Task 4 a AVG 0s AVG 1s 11 / SKIPPED

which could then, expand and/or track per host what has happened

e.g. 10 hosts * 28 tasks is not fun to go through

Dark theme

Would it be possible to put a different theme in ARA which is a bit easier on the eyes?

I now use Dark Reader, but for some reason it doesn't always work first try, besides the automatically detected color usage isn't the best in the world :)

Implement host facts view

Host facts should be available when clicking on a host. They are available in the detailed view of a host, for example:

{
    "id": 4,
    "playbook": {
        "id": 1,
        "duration": "38.40244",
        "started": "2019-04-17T13:17:18.334437",
        "ended": "2019-04-17T13:17:56.736877",
        "name": null,
        "status": "failed",
        "path": "/home/dmsimard/dev/sandbox/update-packages.yaml"
    },
    "facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.200.14"
        ],
        "ansible_all_ipv6_addresses": [
            "fe80::f816:3eff:febc:2978"
        ],
        "ansible_apparmor": {
            "status": "disabled"
        },
        "ansible_architecture": "x86_64",
        "ansible_bios_date": "04/01/2014",
        "ansible_bios_version": "1.11.0-2.el7",
        "ansible_cmdline": {
            "BOOT_IMAGE": "/boot/vmlinuz-3.10.0-957.1.3.el7.x86_64",
            "LANG": "en_US.UTF-8",
            "console": "ttyS0,115200",
            "crashkernel": "auto",
            "ro": true,
            "root": "UUID=f41e390f-835b-4223-a9bb-9b45984ddf8d"
        },
        "ansible_date_time": {
            "date": "2019-04-17",
            "day": "17",
            "epoch": "1555521440",
            "hour": "17",
            "iso8601": "2019-04-17T17:17:20Z",
            "iso8601_basic": "20190417T171720675558",
            "iso8601_basic_short": "20190417T171720",
            "iso8601_micro": "2019-04-17T17:17:20.675764Z",
            "minute": "17",
            "month": "04",
            "second": "20",
            "time": "17:17:20",
            "tz": "UTC",
            "tz_offset": "+0000",
            "weekday": "Wednesday",
            "weekday_number": "3",
            "weeknumber": "15",
            "year": "2019"
        },
        "ansible_default_ipv4": {
            "address": "192.168.200.14",
            "alias": "eth0",
            "broadcast": "192.168.200.255",
            "gateway": "192.168.200.1",
            "interface": "eth0",
            "macaddress": "fa:16:3e:bc:29:78",
            "mtu": 1450,
            "netmask": "255.255.255.0",
            "network": "192.168.200.0",
            "type": "ether"
        },
        "ansible_default_ipv6": {},
        "ansible_device_links": {
            "ids": {},
            "labels": {},
            "masters": {},
            "uuids": {
                "vda1": [
                    "f41e390f-835b-4223-a9bb-9b45984ddf8d"
                ]
            }
        },
        "ansible_devices": {
            "vda": {
                "holders": [],
                "host": "",
                "links": {
                    "ids": [],
                    "labels": [],
                    "masters": [],
                    "uuids": []
                },
                "model": null,
                "partitions": {
                    "vda1": {
                        "holders": [],
                        "links": {
                            "ids": [],
                            "labels": [],
                            "masters": [],
                            "uuids": [
                                "f41e390f-835b-4223-a9bb-9b45984ddf8d"
                            ]
                        },
                        "sectors": "20969439",
                        "sectorsize": 512,
                        "size": "10.00 GB",
                        "start": "2048",
                        "uuid": "f41e390f-835b-4223-a9bb-9b45984ddf8d"
                    }
                },
                "removable": "0",
                "rotational": "1",
                "sas_address": null,
                "sas_device_handle": null,
                "scheduler_mode": "mq-deadline",
                "sectors": "20971520",
                "sectorsize": "512",
                "size": "10.00 GB",
                "support_discard": "0",
                "vendor": "0x1af4",
                "virtual": 1
            }
        },
        "ansible_distribution": "CentOS",
        "ansible_distribution_file_parsed": true,
        "ansible_distribution_file_path": "/etc/redhat-release",
        "ansible_distribution_file_variety": "RedHat",
        "ansible_distribution_major_version": "7",
        "ansible_distribution_release": "Core",
        "ansible_distribution_version": "7.6.1810",
        "ansible_dns": {
            "nameservers": [
                "1.1.1.1",
                "8.8.8.8"
            ],
            "search": [
                "openstacklocal"
            ]
        },
        "ansible_domain": "novalocal",
        "ansible_effective_group_id": 1000,
        "ansible_effective_user_id": 1000,
        "ansible_env": "Not saved by ARA as configured by 'ignored_facts'",
        "ansible_eth0": {
            "active": true,
            "device": "eth0",
            "features": {
                "busy_poll": "off [fixed]",
                "fcoe_mtu": "off [fixed]",
                "generic_receive_offload": "on",
                "generic_segmentation_offload": "on",
                "highdma": "on [fixed]",
                "hw_tc_offload": "off [fixed]",
                "l2_fwd_offload": "off [fixed]",
                "large_receive_offload": "off [fixed]",
                "loopback": "off [fixed]",
                "netns_local": "off [fixed]",
                "ntuple_filters": "off [fixed]",
                "receive_hashing": "off [fixed]",
                "rx_all": "off [fixed]",
                "rx_checksumming": "on [fixed]",
                "rx_fcs": "off [fixed]",
                "rx_gro_hw": "off [fixed]",
                "rx_udp_tunnel_port_offload": "off [fixed]",
                "rx_vlan_filter": "on [fixed]",
                "rx_vlan_offload": "off [fixed]",
                "rx_vlan_stag_filter": "off [fixed]",
                "rx_vlan_stag_hw_parse": "off [fixed]",
                "scatter_gather": "on",
                "tcp_segmentation_offload": "on",
                "tx_checksum_fcoe_crc": "off [fixed]",
                "tx_checksum_ip_generic": "on",
                "tx_checksum_ipv4": "off [fixed]",
                "tx_checksum_ipv6": "off [fixed]",
                "tx_checksum_sctp": "off [fixed]",
                "tx_checksumming": "on",
                "tx_fcoe_segmentation": "off [fixed]",
                "tx_gre_csum_segmentation": "off [fixed]",
                "tx_gre_segmentation": "off [fixed]",
                "tx_gso_partial": "off [fixed]",
                "tx_gso_robust": "off [fixed]",
                "tx_ipip_segmentation": "off [fixed]",
                "tx_lockless": "off [fixed]",
                "tx_nocache_copy": "off",
                "tx_scatter_gather": "on",
                "tx_scatter_gather_fraglist": "off [fixed]",
                "tx_sctp_segmentation": "off [fixed]",
                "tx_sit_segmentation": "off [fixed]",
                "tx_tcp6_segmentation": "on",
                "tx_tcp_ecn_segmentation": "on",
                "tx_tcp_mangleid_segmentation": "off",
                "tx_tcp_segmentation": "on",
                "tx_udp_tnl_csum_segmentation": "off [fixed]",
                "tx_udp_tnl_segmentation": "off [fixed]",
                "tx_vlan_offload": "off [fixed]",
                "tx_vlan_stag_hw_insert": "off [fixed]",
                "udp_fragmentation_offload": "on",
                "vlan_challenged": "off [fixed]"
            },
            "hw_timestamp_filters": [],
            "ipv4": {
                "address": "192.168.200.14",
                "broadcast": "192.168.200.255",
                "netmask": "255.255.255.0",
                "network": "192.168.200.0"
            },
            "ipv6": [
                {
                    "address": "fe80::f816:3eff:febc:2978",
                    "prefix": "64",
                    "scope": "link"
                }
            ],
            "macaddress": "fa:16:3e:bc:29:78",
            "module": "virtio_net",
            "mtu": 1450,
            "pciid": "virtio0",
            "promisc": false,
            "timestamping": [
                "rx_software",
                "software"
            ],
            "type": "ether"
        },
        "ansible_fips": false,
        "ansible_form_factor": "Other",
        "ansible_fqdn": "live-demo-10.novalocal",
        "ansible_hostname": "live-demo-10",
        "ansible_interfaces": [
            "lo",
            "eth0"
        ],
        "ansible_is_chroot": true,
        "ansible_iscsi_iqn": "",
        "ansible_kernel": "3.10.0-957.1.3.el7.x86_64",
        "ansible_lo": {
            "active": true,
            "device": "lo",
            "features": {
                "busy_poll": "off [fixed]",
                "fcoe_mtu": "off [fixed]",
                "generic_receive_offload": "on",
                "generic_segmentation_offload": "on",
                "highdma": "on [fixed]",
                "hw_tc_offload": "off [fixed]",
                "l2_fwd_offload": "off [fixed]",
                "large_receive_offload": "off [fixed]",
                "loopback": "on [fixed]",
                "netns_local": "on [fixed]",
                "ntuple_filters": "off [fixed]",
                "receive_hashing": "off [fixed]",
                "rx_all": "off [fixed]",
                "rx_checksumming": "on [fixed]",
                "rx_fcs": "off [fixed]",
                "rx_gro_hw": "off [fixed]",
                "rx_udp_tunnel_port_offload": "off [fixed]",
                "rx_vlan_filter": "off [fixed]",
                "rx_vlan_offload": "off [fixed]",
                "rx_vlan_stag_filter": "off [fixed]",
                "rx_vlan_stag_hw_parse": "off [fixed]",
                "scatter_gather": "on",
                "tcp_segmentation_offload": "on",
                "tx_checksum_fcoe_crc": "off [fixed]",
                "tx_checksum_ip_generic": "on [fixed]",
                "tx_checksum_ipv4": "off [fixed]",
                "tx_checksum_ipv6": "off [fixed]",
                "tx_checksum_sctp": "on [fixed]",
                "tx_checksumming": "on",
                "tx_fcoe_segmentation": "off [fixed]",
                "tx_gre_csum_segmentation": "off [fixed]",
                "tx_gre_segmentation": "off [fixed]",
                "tx_gso_partial": "off [fixed]",
                "tx_gso_robust": "off [fixed]",
                "tx_ipip_segmentation": "off [fixed]",
                "tx_lockless": "on [fixed]",
                "tx_nocache_copy": "off [fixed]",
                "tx_scatter_gather": "on [fixed]",
                "tx_scatter_gather_fraglist": "on [fixed]",
                "tx_sctp_segmentation": "on",
                "tx_sit_segmentation": "off [fixed]",
                "tx_tcp6_segmentation": "on",
                "tx_tcp_ecn_segmentation": "on",
                "tx_tcp_mangleid_segmentation": "on",
                "tx_tcp_segmentation": "on",
                "tx_udp_tnl_csum_segmentation": "off [fixed]",
                "tx_udp_tnl_segmentation": "off [fixed]",
                "tx_vlan_offload": "off [fixed]",
                "tx_vlan_stag_hw_insert": "off [fixed]",
                "udp_fragmentation_offload": "on",
                "vlan_challenged": "on [fixed]"
            },
            "hw_timestamp_filters": [],
            "ipv4": {
                "address": "127.0.0.1",
                "broadcast": "host",
                "netmask": "255.0.0.0",
                "network": "127.0.0.0"
            },
            "ipv6": [
                {
                    "address": "::1",
                    "prefix": "128",
                    "scope": "host"
                }
            ],
            "mtu": 65536,
            "promisc": false,
            "timestamping": [
                "rx_software",
                "software"
            ],
            "type": "loopback"
        },
        "ansible_local": {},
        "ansible_lsb": {},
        "ansible_machine": "x86_64",
        "ansible_machine_id": "05cb8c7b39fe0f70e3ce97e5beab809d",
        "ansible_memfree_mb": 427,
        "ansible_memory_mb": {
            "nocache": {
                "free": 819,
                "used": 172
            },
            "real": {
                "free": 427,
                "total": 991,
                "used": 564
            },
            "swap": {
                "cached": 0,
                "free": 0,
                "total": 0,
                "used": 0
            }
        },
        "ansible_memtotal_mb": 991,
        "ansible_mounts": [
            {
                "block_available": 2268995,
                "block_size": 4096,
                "block_total": 2618560,
                "block_used": 349565,
                "device": "/dev/vda1",
                "fstype": "xfs",
                "inode_available": 5211455,
                "inode_total": 5242240,
                "inode_used": 30785,
                "mount": "/",
                "options": "rw,seclabel,relatime,attr2,inode64,noquota",
                "size_available": 9293803520,
                "size_total": 10725621760,
                "uuid": "f41e390f-835b-4223-a9bb-9b45984ddf8d"
            }
        ],
        "ansible_nodename": "live-demo-10.novalocal",
        "ansible_os_family": "RedHat",
        "ansible_pkg_mgr": "yum",
        "ansible_processor": [
            "0",
            "GenuineIntel",
            "Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz"
        ],
        "ansible_processor_cores": 1,
        "ansible_processor_count": 1,
        "ansible_processor_threads_per_core": 1,
        "ansible_processor_vcpus": 1,
        "ansible_product_name": "OpenStack Compute",
        "ansible_product_serial": "NA",
        "ansible_product_uuid": "NA",
        "ansible_product_version": "18.1.0-1.el7",
        "ansible_python": {
            "executable": "/usr/bin/python",
            "has_sslcontext": true,
            "type": "CPython",
            "version": {
                "major": 2,
                "micro": 5,
                "minor": 7,
                "releaselevel": "final",
                "serial": 0
            },
            "version_info": [
                2,
                7,
                5,
                "final",
                0
            ]
        },
        "ansible_python_version": "2.7.5",
        "ansible_real_group_id": 1000,
        "ansible_real_user_id": 1000,
        "ansible_selinux": {
            "config_mode": "enforcing",
            "mode": "enforcing",
            "policyvers": 31,
            "status": "enabled",
            "type": "targeted"
        },
        "ansible_selinux_python_present": true,
        "ansible_service_mgr": "systemd",
        "ansible_ssh_host_key_ecdsa_public": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJbu1863a+rbIrlNQ9DWIZ4DMw7mhnKi/c1GbMEpi/0XSQj0nSmhxyZKuy9PSAObn/a5b+R1FJiuAj7QW7SB1Dc=",
        "ansible_ssh_host_key_ed25519_public": "AAAAC3NzaC1lZDI1NTE5AAAAIKpCEU8pvrBKiRDw+8OEmOWEYsg29NpHWZW6JUS+GoWf",
        "ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAADAQABAAABAQC1Ab2tSEqE2R/1OCJC3EIdkuiMOlQ/OBeaN9KKFfxlUs/VKJJnP1I+mnbx/BufQznceVR6pV+RlVjTT/B2C5iFTPv91V0rTIMs1YQUQoB8GyYrE9mvE3gGn87WFJusVkFXIRSpgk4kPydAydVV3QFu0p8kusGSPlSNxHhvr/Mx5J7EEdj17snXz8A/Jar+FL5SeYiwsCUrFkZSBlqyjRWmf/dJmSBJ3mZztESKfb7fcTqyEtLxY5AbMBoF+wHP8SbAUOHl9muaeUtt7VyP4RMpZ6bgsqdT2X3gkPGEN2SolyHLZYH+hR25ovMup5vf8fg1w7M1BfyP1+GeQsv3UMgz",
        "ansible_swapfree_mb": 0,
        "ansible_swaptotal_mb": 0,
        "ansible_system": "Linux",
        "ansible_system_capabilities": [
            ""
        ],
        "ansible_system_capabilities_enforced": "True",
        "ansible_system_vendor": "RDO",
        "ansible_uptime_seconds": 9084,
        "ansible_user_dir": "/home/centos",
        "ansible_user_gecos": "Cloud User",
        "ansible_user_gid": 1000,
        "ansible_user_id": "centos",
        "ansible_user_shell": "/bin/bash",
        "ansible_user_uid": 1000,
        "ansible_userspace_architecture": "x86_64",
        "ansible_userspace_bits": "64",
        "ansible_virtualization_role": "guest",
        "ansible_virtualization_type": "openstack",
        "gather_subset": [
            "all"
        ],
        "module_setup": true
    },
    "created": "2019-04-17T13:17:20.945787",
    "updated": "2019-04-17T13:17:54.243384",
    "name": "live-demo-10",
    "alias": null,
    "changed": 1,
    "failed": 0,
    "ok": 3,
    "skipped": 0,
    "unreachable": 0
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.