Metadata-Version: 2.1
Name: one-cli
Version: 0.5.1
Summary: Python CLI to manage stacks from DNX.
Home-page: https://github.com/DNXLabs/one-cli
Author: DNX Solutions
Author-email: contact@dnx.solutions
License: Apache License 2.0
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: Natural Language :: English
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Requires-Dist: altgraph (==0.17)
Requires-Dist: certifi (==2020.4.5.1)
Requires-Dist: chardet (==3.0.4)
Requires-Dist: click (==7.1.2)
Requires-Dist: docker-py (==1.10.6)
Requires-Dist: docker-pycreds (==0.4.0)
Requires-Dist: dockerpty (==0.4.1)
Requires-Dist: idna (==2.9)
Requires-Dist: prompt-toolkit (==1.0.14)
Requires-Dist: Pygments (==2.6.1)
Requires-Dist: PyInquirer (==1.0.3)
Requires-Dist: PyInstaller (==3.6)
Requires-Dist: python-dotenv (==0.13.0)
Requires-Dist: PyYAML (==5.3.1)
Requires-Dist: regex (==2020.5.7)
Requires-Dist: requests (==2.23.0)
Requires-Dist: six (==1.14.0)
Requires-Dist: urllib3 (==1.25.9)
Requires-Dist: wcwidth (==0.1.9)
Requires-Dist: websocket-client (==0.57.0)

# one-cli

CLI to manage all stacks from DNX.

![Build](https://github.com/DNXLabs/one-cli/workflows/Build/badge.svg)
[![PyPI](https://badge.fury.io/py/one-cli.svg)](https://pypi.python.org/pypi/one-cli/)
[![LICENSE](https://img.shields.io/github/license/DNXLabs/one-cli)](https://github.com/DNXLabs/one-cli/blob/master/LICENSE)

## Quick start

1. Download the latest release with the command.
```
curl -sSL https://raw.githubusercontent.com/DNXLabs/one-cli/master/get_one.sh | bash
```

2. Test to ensure the version you installed is up-to-date.
```
one --version
```

3. Install shell completion (Optional)
```
curl -sSL https://raw.githubusercontent.com/DNXLabs/one-cli/master/shell_completion.py | python3
```

#### Install specific version
```bash
export ONE_VERSION=<version>

# Linux
sudo curl -L https://github.com/DNXLabs/one-cli/releases/download/$ONE_VERSION/one_linux_amd64 -o /usr/local/bin/one
# Macos
sudo curl -L https://github.com/DNXLabs/one-cli/releases/download/$ONE_VERSION/one_macos_amd64 -o /usr/local/bin/one

sudo chmod +x /usr/local/bin/one
```

#### Install with PyPi
[PyPI Project](https://pypi.org/project/one-cli)
```bash
pip3 install one-cli

# or setting a version

pip3 install one-cli==<version>
```

##  CI/CD pipelines with Docker
To use the CLI within any CI/CD pipeline we encourage to use our docker image:

[dnxsolutions/one-cli](https://hub.docker.com/repository/docker/dnxsolutions/one-cli)

> WARNING: This docker image should only be used inside CI/CD pipelines and it can generate error if used as an alias.



## Usage
```
Usage: cli.py [OPTIONS] COMMAND [ARGS]...

  CLI to manage all stacks from DNX.

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  app        Group of app commands wrapped inside docker.
  auth       Authentication using SSO provider or AWS IAM user.
  idp        Manage the IDP configuration in your local.
  init       Create config file for CLI in current directory.
  terraform  Group of terraform commands wrapped inside docker.
  update     Update CLI moving to latest stable version.
  workspace  Manage workspaces.
```

## Configuration Example
one.yaml
```yaml
images:
  terraform: dnxsolutions/terraform:0.12.24-dnx1
  gsuite: dnxsolutions/aws-google-auth:latest
  azure: dnxsolutions/docker-aws-azure-ad:latest
  aws: dnxsolutions/aws:1.18.44-dnx2
  ecs-deploy: dnxsolutions/ecs-deploy:1.2.0

app:
  name: copacabana
  port: 80
  docker:
    file: Dockerfile
    image-name: copacabana
    registry-type: ecr
    registry-options:
      ecr-aws-account-id: <redact>
      ecr-aws-region: ap-southeast-2
      ecr-aws-assume-role: true
      ecr-aws-role: <redact>
  ecs-task-definition-file: task-definition.tpl.json

workspaces:
  mgmt-app:
    type: ecs
    aws-account-id: <redact>
    aws-role: <redact>
    aws-assume-role: true|false
    aws-region: ap-southeast-2
    ecs-cluster-name: cluster-01
  mgmt:
    aws-account-id:
    aws-role:
  nonprod:
    aws-account-id:
    aws-role:
  prod:
    aws-account-id:
    aws-role:
  default:
    aws-account-id:
    aws-role:
    aws-assume-role: true|false
```

## Setup

#### Dependencies
- Python 3

#### Python Virtual Environment
```bash
# Create environment
python3 -m venv env

# To activate the environment
source env/bin/activate

# When you finish you can exit typing
deactivate
```

#### Install dependencies

```bash
pip3 install --editable .
```

#### Manualy generate binary
```bash
pyinstaller --clean --hidden-import one.__main__ cli.py --onefile --noconsole -n one
```

## Plugin System
To give better support for customization inside the CLI we created a `plugin system` that you can extend code, creating new commands and groups and even modify the existing ones.

All plugins need to be created inside ` ~/.one/plugins/*`

#### Folder Structure
```bash
└── plugins
    ├── __init__.py (empty file)
    └── my_plugin.py
```

#### Plugin Example
`~/.one/plugins/my_plugin.py`
```python
import click
from one.one import cli


def __init__():
    cli.add_command(my_plugin)


@click.command(name='my_plugin', help='My plugin command')
def my_plugin():
    click.echo('It works!')
```

#### Running
```bash
$ one my_plugin
It works!
```

## Author
Managed by DNX Solutions.

## License
Apache 2 Licensed. See [LICENSE](https://github.com/DNXLabs/one-cli/blob/master/LICENSE) for full details.

