Metadata-Version: 2.1
Name: cloudview
Version: 0.2.15
Summary: View instance information on all supported cloud providers
Home-page: https://github.com/ricardobranco777/cloudview
Author: Ricardo Branco
Author-email: rbranco@suse.de
License: MIT License
Keywords: cloudview
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: Topic :: System :: Monitoring
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: Unix
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3 :: Only
Requires-Python: >=3.5
Description-Content-Type: text/markdown
Requires-Dist: Jinja2 (==2.10.1)
Requires-Dist: MarkupSafe (==1.1.1)
Requires-Dist: PasteDeploy (==2.0.1)
Requires-Dist: PyJWT (==1.7.1)
Requires-Dist: PyYAML (==5.1.1)
Requires-Dist: WebOb (==1.8.5)
Requires-Dist: adal (==1.2.1)
Requires-Dist: appdirs (==1.4.3)
Requires-Dist: asn1crypto (==0.24.0)
Requires-Dist: azure-common (==1.1.21)
Requires-Dist: azure-mgmt-compute (==5.0.0)
Requires-Dist: boto3 (==1.9.161)
Requires-Dist: botocore (==1.12.161)
Requires-Dist: cachetools (==3.1.1)
Requires-Dist: certifi (==2019.3.9)
Requires-Dist: cffi (==1.12.3)
Requires-Dist: chardet (==3.0.4)
Requires-Dist: cryptography (==2.7)
Requires-Dist: decorator (==4.4.0)
Requires-Dist: docutils (==0.14)
Requires-Dist: dogpile.cache (==0.7.1)
Requires-Dist: google-api-core (==1.11.1)
Requires-Dist: google-api-python-client (==1.7.9)
Requires-Dist: google-auth-httplib2 (==0.0.3)
Requires-Dist: google-auth (==1.6.3)
Requires-Dist: google-cloud-core (==1.0.1)
Requires-Dist: google-cloud-resource-manager (==0.29.1)
Requires-Dist: googleapis-common-protos (==1.6.0)
Requires-Dist: httplib2 (==0.12.3)
Requires-Dist: hupper (==1.7)
Requires-Dist: idna (==2.8)
Requires-Dist: iso8601 (==0.1.12)
Requires-Dist: isodate (==0.6.0)
Requires-Dist: jmespath (==0.9.4)
Requires-Dist: jsonpatch (==1.23)
Requires-Dist: jsonpointer (==2.0)
Requires-Dist: keystoneauth1 (==3.14.0)
Requires-Dist: msrest (==0.6.6)
Requires-Dist: msrestazure (==0.6.0)
Requires-Dist: munch (==2.3.2)
Requires-Dist: netifaces (==0.10.9)
Requires-Dist: oauth2client (==4.1.3)
Requires-Dist: oauthlib (==3.0.1)
Requires-Dist: openstacksdk (==0.29.0)
Requires-Dist: os-service-types (==1.7.0)
Requires-Dist: pbr (==5.2.1)
Requires-Dist: plaster-pastedeploy (==0.7)
Requires-Dist: plaster (==1.0)
Requires-Dist: protobuf (==3.8.0)
Requires-Dist: pyasn1-modules (==0.2.5)
Requires-Dist: pyasn1 (==0.4.5)
Requires-Dist: pycparser (==2.19)
Requires-Dist: pyramid (==1.10.4)
Requires-Dist: python-dateutil (==2.8.0)
Requires-Dist: pytz (==2019.1)
Requires-Dist: requests-oauthlib (==1.2.0)
Requires-Dist: requests (==2.22.0)
Requires-Dist: requestsexceptions (==1.4.0)
Requires-Dist: rsa (==4.0)
Requires-Dist: s3transfer (==0.2.1)
Requires-Dist: six (==1.12.0)
Requires-Dist: stevedore (==1.30.1)
Requires-Dist: timeago (==1.0.10)
Requires-Dist: translationstring (==1.3)
Requires-Dist: uritemplate (==3.0.0)
Requires-Dist: urllib3 (==1.25.3)
Requires-Dist: venusian (==1.2.0)
Requires-Dist: zope.deprecation (==4.4.0)
Requires-Dist: zope.interface (==4.6.0)

# cloudview
View instance information on all supported cloud providers: Amazon Web Services, Azure, Google Compute Platform & OpenStack.

[![Build Status](https://travis-ci.org/ricardobranco777/cloudview.svg?branch=master)](https://travis-ci.org/ricardobranco777/cloudview)

## Usage

```
Usage: cloudview [OPTIONS]
Options:
    -h, --help                          show this help message and exit
    -l, --log debug|info|warning|error|critical
    -o, --output text|html|json|JSON    output type
    -p, --port PORT                     run a web server on port PORT
    -r, --reverse                       reverse sort
    -s, --sort name|time|status         sort type
    -S, --status stopped|running|all    filter by instance status
    -T, --time TIME_FORMAT              time format as used by strftime(3)
    -v, --verbose                       be verbose
    -V, --version                       show version and exit
Filter options:
    --filter-aws NAME VALUE             may be specified multiple times
    --filter-azure FILTER               Filter for Azure
    --filter-gcp FILTER                 Filter for GCP
    --filter-openstack NAME VALUE       may be specified multiple times
```

**NOTES**:
  - Use `--output JSON` to dump _all_ available information received from each provider.

This script is best run with Docker to have all dependencies in just one package, but it may be run stand-alone on systems with Python 3.5+

## Environment variables

    - `AWS_ACCESS_KEY_ID`
    - `AWS_DEFAULT_REGION`
    - `AWS_SECRET_ACCESS_KEY`
    - `AZURE_TENANT_ID`
    - `AZURE_SUBSCRIPTION_ID`
    - `AZURE_CLIENT_SECRET`
    - `AZURE_CLIENT_ID`
    - `GOOGLE_APPLICATION_CREDENTIALS`
    - `OS_USERNAME`
    - `OS_PASSWORD`
    - `OS_PROJECT_ID`
    - `OS_AUTH_URL`
    - `OS_USER_DOMAIN_NAME`
    - `OS_CACERT`

**NOTES**:
  - The `AWS_*` environment variables are optional.  If not set, the AWS SDK will grab the information from `~/.aws/credentials` and `~/.aws/config`.  For Docker it's safer to set these variables so we can unset them after initialization and avoid mounting `~/aws/`.  So, if you don't set them, you must add `-v ~/.aws:/root/aws:ro` to `docker run` and edit [docker-compose.yml](docker-compose.yml) accordingly.
  - The `GOOGLE_APPLICATION_CREDENTIALS` environment variable must contain the path to the JSON file downloaded from the GCP web console after creating a personal key for the service account of your project.
  - The `AZURE_*` environment variables are mandatory if you want Azure output.  For `AZURE_TENANT_ID` & `AZURE_SUBSCRIPTION_ID` check the output of `az account show --query "{subscriptionId:id, tenantId:tenantId}"`.  For the client id and secret, an Azure AD Service Principal is required and can be created, with the proper permissions, with this command: `az ad sp create-for-rbac --name MY-AD-SP --role=Contributor --scopes=/subscriptions/<SUBSCRIPTION ID>`.  These variables are the same as the `ARM_*` variables used by the Terraform Azure provider.  More information in the [official Microsoft documentation](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/terraform-install-configure)
  - The `OS_*` variables are optional.  You may set them by sourcing the OpenStack RC v2.0 or v3 scripts that you may download from the web UI at [https://OPENSTACK_SERVER/project/access_and_security/api_access/openrc/](https://OPENSTACK_SERVER/project/access_and_security/api_access/openrc/).  Alternatively, you may use the `clouds.yaml` file described at the [OpenstackSDK documentation](https://docs.openstack.org/openstacksdk/latest/user/guides/connect_from_config.html)

## To run stand-alone:

```
pip3 install --user cloudview
```

## To run with Docker (or Podman):

If you want to use Podman instead of Docker:
```
alias docker=podman
```

Build image with:
```
docker build -t cloud --pull .
```

Export the variables listed in the [.dockerenv](.dockerenv) file and run with:

```
docker run --rm -v "$GOOGLE_APPLICATION_CREDENTIALS:$GOOGLE_APPLICATION_CREDENTIALS:ro" -v "$OS_CACERT:$OS_CACERT:ro" -v ~/.config/openstack:/etc/openstack:ro --env-file .dockerenv cloudview --status all
```

NOTES:
  - To use `podman` in rootless mode, make sure to add your user to the /etc/subuid & /etc/subgid files as described in the [manual page](https://github.com/containers/libpod/blob/master/docs/podman.1.md#rootless-mode)

## Run the web server with [Docker Compose](https://docs.docker.com/compose/install/):

If you have a TLS key pair, rename the certificate to `cert.pem`, the private key to `key.pem` and the file containing the passphrase to the private key to `key.txt`.  Then edit the [docker-compose.yml](docker-compose.yml) file to mount them to `/etc/nginx/ssl` in read-only mode like this: `- "/path/to/tls:/etc/nginx/ssl:ro"`.  Set and export the `NGINX_HOST` environment variable with the DNS of your host.

If you don't have a TLS key pair, a self-signed certificate will be generated.  Be aware of the typical problems with time resolution related to TLS certificates.

For HTTP Basic Authentication, create a file named `auth.htpasswd` in the same directory with the TLS certs.  Use the `htpasswd` utility for this.  This file is generated if a self-signed certificate is generated too.  In this case you must look up the generated password with `docker-compose logs`.  The user is `test`.

This command creates 2 read-only containers for security, one with the Python app and another using Nginx as reverse-proxy:

```
docker-compose up -d
```

Now browse to [https://localhost:8443](https://localhost:8443)

To stop the web server:
```
docker-compose down
```

To rebuild the images:
```
docker-compose build --pull
```

### Filter options (AWS)

Usage: `--filter-aws NAME VALUE`

May be specified multiple times.

Complete list of filters:

[https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html)

Example: `--filter-aws tag-key production`

Note: If `instance-state-name` is present in the filter name, the `--status` option is ignored.

### Filter options (Azure)

Usage: `--filter-azure FILTER`

Note: This filtering is done in the client SDK using [JMESPath](http://jmespath.org/) to filter the JSON response.  You can view the JSON output using `--output JSON` or following the instance link in the HTML table.

Complete list of filters:

https://github.com/MicrosoftDocs/azure-docs-cli/blob/master/docs-ref-conceptual/query-azure-cli.md#filter-arrays

Example: `--filter-azure "location == 'westeurope' && !(name == 'admin')"`

Note: If `instance_view.statuses` is present in the filter, the `--status` option is ignored.

### Filter options (GCP)

Usage: `--filter-gcp FILTER`

Note: You may filter the resources listed in the API response.

Complete list of resources:

[https://cloud.google.com/compute/docs/reference/rest/v1/instances/list](https://cloud.google.com/compute/docs/reference/rest/v1/instances/list)

Example: `--filter-gcp 'name: instance-1 AND canIpForward: false'`

Note: If `status` is present in the filter, the `--status` option is ignored.

### Filter options (Openstack)

Usage: `--filter-openstack NAME VALUE`

May be specified multiple times.

Complete list of filters:

https://developer.openstack.org/api-ref/compute/?expanded=list-servers-detail#listServers

Example: `--filter-openstack name admin`

Note: If `status` is present in the filter, the `--status` option is ignored.

## TODO
  - Search by tag (this can be done with the `filter-*` options)
  - Sort by instance type (very tricky to get right ATM for all providers).
  - Use apache-libcloud? (slow for some providers)


