drove-cli


Namedrove-cli JSON
Version 0.0.1 PyPI version JSON
download
home_pagehttps://github.com/PhonePe/drove-cli
SummaryDrove Command Line Interface
upload_time2024-04-05 11:52:19
maintainerSantanu Sinha
docs_urlNone
authorSantanu Sinha
requires_python<4.0,>=3.7
licenseApache-2.0
keywords container docker podman distributed-systems container-orchestrator
VCS
bugtrack_url
requirements Requests tabulate tenacity urllib3 urllib3
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Drove CLI

Command line interface for the Drove Container Orchestrator.

# Getting Started

## Installation

You can install the cli from from PyPI.

```bash
pip install drove-cli
```

Reactivate/deactivate virtual environment based on the need to utilize drove cli.

## Running using docker
The cli is pushed as a docker for easy access. This also elimintates the need for having python etc setup on your system.

1) Pull the image:
```shell
docker pull ghcr.io/PhonePe/drove-cli:latest
```

2) Create a shell script called `drove` with the following content:

```shell
#! /bin/sh
docker run \
    --rm --interactive --tty --network host \
    --name drove-cli -v ${HOME}/.drove:/root/.drove:ro  \
    ghcr.io/PhonePe/drove-cli:latest "$@"

```

3) Make the script executable
```shell
chmod a+x drove
```

4) Put the path to this script in your `~/.bashrc`.

```shell
export PATH="${PATH}:/path/to/your/script"
```

5) Logout/login or run `. ~/.bashrc` to load the new [path]


6) Run drove cli
```
drove -h
```

## Requirements
The CLI is written in Python 3x


## Accessing the Documentation
The arguments needed by the script are self documenting. Please use `-h` or `--help` in different sections and sub-sections of the CLI to get descriptions of commands, sub-commands, their arguments and options.

To see basic help:
```

$ drove -h

usage: drove [-h] [--file FILE] [--cluster CLUSTER] [--endpoint ENDPOINT] [--auth-header AUTH_HEADER] [--insecure INSECURE] [--username USERNAME] [--password PASSWORD] [--debug]
             {executor,cluster,apps,appinstances,tasks} ...

positional arguments:
  {executor,cluster,apps,appinstances,tasks}
                        Available plugins
    executor            Drove cluster executor related commands
    cluster             Drove cluster related commands
    apps                Drove application related commands
    appinstances        Drove application instance related commands
    tasks               Drove task related commands

options:
  -h, --help            show this help message and exit
  --file FILE, -f FILE  Configuration file for drove client
  --cluster CLUSTER, -c CLUSTER
                        Cluster name as specified in config file
  --endpoint ENDPOINT, -e ENDPOINT
                        Drove endpoint. (For example: https://drove.test.com)
  --auth-header AUTH_HEADER, -t AUTH_HEADER
                        Authorization header value for the provided drove endpoint
  --insecure INSECURE, -i INSECURE
                        Do not verify SSL cert for server
  --username USERNAME, -u USERNAME
                        Drove cluster username
  --password PASSWORD, -p PASSWORD
                        Drove cluster password
  --debug, -d           Print details of errors

```

To see documentation for a command/section:
```
$ drove cluster -h
usage: drove cluster [-h] {ping,summary,leader,endpoints,events} ...

positional arguments:
  {ping,summary,leader,endpoints,events}
                        Available commands for cluster management
    ping                Ping the cluster
    summary             Show cluster summary
    leader              Show leader for cluster
    endpoints           Show all exposed endpoints
    events              Events on the cluster

optional arguments:
  -h, --help            show this help message and exit
```

To further drill down into options for a sub-command/subsection:
```
$ drove cluster events -h
usage: drove cluster events [-h] [--follow] [--type TYPE] [--count COUNT] [--textfmt TEXTFMT]

optional arguments:
  -h, --help            show this help message and exit
  --follow, -f          Follow events (Press CTRL-C to kill)
  --type TYPE, -t TYPE  Output events of only the matching type
  --count COUNT, -c COUNT
                        Fetch <count> events at a time.
  --textfmt TEXTFMT, -s TEXTFMT
                        Use the format string to print message
```

# Connecting to the Drove cluster

In order to use the CLI, we need to provide coordinates to the cluster to connect to. This can be done in the following manner:

## Drove CLI config file
The config file can be located in the following paths:
* `.drove` file in your home directory (Typically used for the default cluster you frequently connect to)
*  A file in any path that can be passed as a parameter to the CLI with the `-f FILE` option

### Config File format
This file is in ini format and is arranged in sections.

```ini
[DEFAULT]
...
stage_token = <token1>
prod_token = <token2>

[local]
endpoint = http://localhost:10000
username = admin
password = admin

[stage]
endpoint = https://stage.testdrove.io
auth_header = %(stage_token)s

[production]
endpoint = https://prod.testdrove.io
auth_header = %(prod_token)s

..
```

The `DEFAULT` section can be used to define common variables like Insecure etc. The `local`, `stage`, `production` etc are names for inidividual clusters and these sections can be used to define configuration for individual clusters. Cluster name is referred to in the command line by using the `-c` command line option.\
*Interpolation* of values is supported and can be acieved by using `%(variable_name)s` references.

> * Note: The `DEFAULT` section is mandatory
> * Note: The `s` at the end of `%(var)s` is mandatory for interpolation

### Contents of a Section
```
endpoint = https://yourcluster.yourdomain.com # Endpoint for cluster
insecure = true
username = <your_username>
password = <your_password>
auth_header= <Authorization value here if using header based auth>
```

Authentication priority:
* If both `username` and `password` are provided, basic auth is used.
* If a value is provided in the `auth_header` parameter, it is passed as the value for the `Authorization` header in the upstream HTTP calls to the Drove server verbatim.
* If neither, no auth is set

> NOTE: Use the `insecure` option to skip certificate checks on the server endpoint (comes in handy for internal domains)

To use a custom config file, invoke drove in the following form:

```
$ drove -f custom.conf ...
```

This will connect to the cluster if an endpoint is mentioned in the `DEFAULT` section.

```
$ drove -f custom.conf -c stage ...
```

This will connect to the cluster whose config is mentioned in the `[stage]` config section.

```
$ drove -c stage ...
```

This will connect to the cluster whose config is mentioned in the `[stage]` config section in `$HOME/.drove` config file.


## Command line options
Pass the endpoint and other options using `--endpoint|-e` etc etc. Options can be obtained using `-h` as mentioned above. Invocation will be in the form:

```
$ drove -e http://localhost:10000 -u guest -p guest ...
```

## CLI format
The following cli format is followed:

```
usage: drove [-h] [--file FILE] [--cluster CLUSTER] [--endpoint ENDPOINT] [--auth-header AUTH_HEADER] [--insecure INSECURE] [--username USERNAME] [--password PASSWORD] [--debug]
             {executor,cluster,apps,appinstances,tasks} ...
```
### Basic Arguments
```
  -h, --help            show this help message and exit
  --file FILE, -f FILE  Configuration file for drove client
  --cluster CLUSTER, -c CLUSTER
                        Cluster name as specified in config file
  --endpoint ENDPOINT, -e ENDPOINT
                        Drove endpoint. (For example: https://drove.test.com)
  --auth-header AUTH_HEADER, -t AUTH_HEADER
                        Authorization header value for the provided drove endpoint
  --insecure INSECURE, -i INSECURE
                        Do not verify SSL cert for server
  --username USERNAME, -u USERNAME
                        Drove cluster username
  --password PASSWORD, -p PASSWORD
                        Drove cluster password
  --debug, -d           Print details of errors

```

## Commands
Commands in drove are meant to address specific functionality. They can be summarized as follows:
```
    executor            Drove cluster executor related commands
    cluster             Drove cluster related commands
    apps                Drove application related commands
    appinstances        Drove application instance related commands
    tasks               Drove task related commands
```
### executor
---
Drove cluster executor related commands

```
drove executor [-h] {list,info,appinstances,tasks} ...
```

#### Sub-commands

##### list

List all executors

```
drove executor list [-h]
```

##### info

Show details about executor

```
drove executor info [-h] executor-id
```

###### Positional Arguments

`executor-id` - Executor id for which info is to be shown

##### appinstances

Show app instances running on this executor

```
drove executor appinstances [-h] [--sort {0,1,2,3,4,5}] [--reverse] executor-id
```
###### Positional Arguments

`executor-id` - Executor id for which info is to be shown

###### Arguments

```
  --sort {0,1,2,3,4,5}, -s {0,1,2,3,4,5}
                        Sort output by column
  --reverse, -r         Sort in reverse order
```

##### tasks

Show tasks running on this executor

```
drove executor tasks [-h] [--sort {0,1,2,3,4,5}] [--reverse] executor-id
```

###### Positional Arguments

`executor-id` - Executor id for which info is to be shown

###### Named Arguments
```
  --sort {0,1,2,3,4,5}, -s {0,1,2,3,4,5}
                        Sort output by column
  --reverse, -r         Sort in reverse order
```


### cluster
---
Drove cluster related commands

```
drove cluster [-h] {ping,summary,leader,endpoints,events} ...
```

#### Sub-commands

##### ping

Ping the cluster

```
drove cluster ping [-h]
```

##### summary

Show cluster summary

```
drove cluster summary [-h]
```

##### leader

Show leader for cluster
```
drove cluster leader [-h]
```
##### endpoints

Show all exposed endpoints
```
drove cluster endpoints [-h] [--vhost VHOST]
```

###### Named Arguments

```
  --vhost VHOST, -v VHOST
                        Show details only for the specific vhost
```

##### events

Events on the cluster

```
drove cluster events [-h] [--follow] [--type TYPE] [--count COUNT] [--textfmt TEXTFMT]
```

###### Named Arguments

```
  --follow, -f          Follow events (Press CTRL-C to kill)
  --type TYPE, -t TYPE  Output events of only the matching type
  --count COUNT, -c COUNT
                        Fetch <count> events at a time.
  --textfmt TEXTFMT, -s TEXTFMT
                        Use the format string to print message
                        Default: “{type: <25} | {id: <36} | {time: <20} | {metadata}”
```

### apps
---
Drove application related commands

```
drove apps [-h] {list,summary,spec,create,destroy,deploy,scale,suspend,restart,cancelop} ...
```
#### Sub-commands

##### list

List all applications

```
drove apps list [-h] [--sort {0,1,2,3,4,5,6,7,8}] [--reverse]
```

###### Named Arguments

```
  --sort {0,1,2,3,4,5,6,7,8}, -s {0,1,2,3,4,5,6,7,8}
                        Sort output by column
  --reverse, -r         Sort in reverse order
```

##### summary

Show a summary for an application
```
drove apps summary [-h] app-id
```
###### Positional Arguments

`app-id` - Application ID

##### spec

Print the raw json spec for an application
```
drove apps spec [-h] app-id
```
###### Positional Arguments

`app-id` - Application ID

##### create

Create application on cluster
```
drove apps create [-h] spec-file
```
###### Positional Arguments

`spec-file` - JSON spec file for the application

##### destroy

Destroy an app with zero instances
```
drove apps destroy [-h] app-id
```
###### Positional Arguments

`app-id` - Application ID

##### deploy

Deploy new app instances.
```
drove apps deploy [-h] [--parallelism PARALLELISM] [--timeout TIMEOUT] app-id instances
```
###### Positional Arguments

`app-id` - Application ID\
`instances` - Number of new instances to be created

###### Named Arguments

```
  --parallelism PARALLELISM, -p PARALLELISM
                        Number of parallel threads to be used to execute operation (default: 1)
  --timeout TIMEOUT, -t TIMEOUT
                        Timeout for the operation on the cluster (default: 5 minutes)
  --wait, -w            Wait to ensure instance count is reached
```
##### scale

Scale app to required instances. Will increase or decrease instances on the cluster to match this number

```
drove apps scale [-h] [--parallelism PARALLELISM] [--timeout TIMEOUT] app-id instances
```
###### Positional Arguments

`app-id` - Application ID\
`instances` - Number of instances. Setting this to 0 will suspend the app

###### Named Arguments

```
  --parallelism PARALLELISM, -p PARALLELISM
                        Number of parallel threads to be used to execute operation (default: 1)
  --timeout TIMEOUT, -t TIMEOUT
                        Timeout for the operation on the cluster (default: 5 minutes)
  --wait, -w            Wait to ensure instance count is reached
```

##### suspend

Suspend the app
```
drove apps suspend [-h] [--parallelism PARALLELISM] [--timeout TIMEOUT] app-id
```
###### Positional Arguments[¶](#Positional%20Arguments_repeat9 "Link to this heading")

`app-id` - Application ID

###### Named Arguments

```
  --parallelism PARALLELISM, -p PARALLELISM
                        Number of parallel threads to be used to execute operation (default: 1)
  --timeout TIMEOUT, -t TIMEOUT
                        Timeout for the operation on the cluster (default: 5 minutes)
  --wait, -w            Wait to ensure all instances are suspended
```

##### restart

Restart am existing app instances.

```
drove apps restart [-h] [--parallelism PARALLELISM] [--timeout TIMEOUT] app-id
```

###### Positional Arguments

`app-id` - Application ID

###### Named Arguments
```
  --parallelism PARALLELISM, -p PARALLELISM
                        Number of parallel threads to be used to execute operation (default: 1)
  --timeout TIMEOUT, -t TIMEOUT
                        Timeout for the operation on the cluster (default: 5 minutes)
  --wait, -w            Wait to ensure all instances are replaced
```
##### cancelop

Cancel current operation
```
drove apps cancelop [-h] app-id
```
###### Positional Arguments
`app-id` - Application ID

### appinstances
---
Drove application instance related commands
```
drove appinstances [-h] {list,info,logs,tail,download,replace,kill} ...
```
#### Sub-commands

##### list

List all application instances
```
drove appinstances list [-h] [--old] [--sort {0,1,2,3,4,5}] [--reverse] app-id
```
###### Positional Arguments
`app-id` - Application ID

###### Named Arguments

```
  --parallelism PARALLELISM, -p PARALLELISM
                        Number of parallel threads to be used to execute operation (default: 1)
  --timeout TIMEOUT, -t TIMEOUT
                        Timeout for the operation on the cluster (default: 5 minutes)
```
##### info

Print details for an application instance
```
drove appinstances info [-h] app-id instance-id
```
###### Positional Arguments
`app-id` - Application ID\
`instance-id` - Application Instance ID

##### logs

Print list of logs for application instance
```
drove appinstances logs [-h] app-id instance-id
```
###### Positional Arguments

`app-id` - Application ID\
`instance-id` - Application Instance ID

##### tail

Tail log for application instance
```
drove appinstances tail [-h] [--file FILE] app-id instance-id
```
###### Positional Arguments

`app-id` - Application ID\
`instance-id` - Application Instance ID

###### Named Arguments

```
  --log LOG, -l LOG  Log filename to tail. Default is to tail output.log
```

##### download

Download log for application instance
```
drove appinstances download [-h] [--out OUT] app-id instance-id file
```
###### Positional Arguments

`app-id` - Application ID\
`instance-id` - Application Instance ID\
`file` - Log filename to download

###### Named Arguments
```
--out, -o Filename to download to. Default is the same filename as provided.
```
##### replace

Replace specific app instances with fresh instances
```
drove appinstances replace [-h] [--parallelism PARALLELISM] [--timeout TIMEOUT] app-id instance-id [instance-id ...]
```
###### Positional Arguments
`app-id` - Application ID\
`instance-id` - Application Instance IDs

###### Named Arguments
```
  --parallelism PARALLELISM, -p PARALLELISM
                        Number of parallel threads to be used to execute operation (default: 1)
  --timeout TIMEOUT, -t TIMEOUT
                        Timeout for the operation on the cluster (default: 5 minutes)
  --wait, -w            Wait to ensure all instances are replaced
```

##### kill

Kill specific app instances
```
drove appinstances kill [-h] [--parallelism PARALLELISM] [--timeout TIMEOUT] app-id instance-id [instance-id ...]
```
###### Positional Arguments
`app-id` - Application ID\
`instance-id` - Application Instance IDs

###### Named Arguments

```
  --parallelism PARALLELISM, -p PARALLELISM
                        Number of parallel threads to be used to execute operation
  --timeout TIMEOUT, -t TIMEOUT
                        Timeout for the operation on the cluster (default: 5 minutes)
  --wait, -w            Wait to ensure all instances are killed
```
### tasks
---
Drove task related commands
```
drove tasks [-h] {create,kill,list,show,logs,tail,download} ...
```
#### Sub-commands

##### create

Create a task on cluster
```
drove tasks create [-h] spec-file
```
###### Positional Arguments

`spec-file` - JSON spec file for the task

##### kill

Kill a running task
```
drove tasks kill [-h] source-app-name task-id
```
###### Positional Arguments

`source-app-name` - Source app name as specified in spec\
`task-id` - ID of the task as specified in the spec

##### list

List all active tasks
```
drove tasks list [-h] [--app APP] [--sort {0,1,2,3,4,5,6,7,8}] [--reverse]
```
###### Named Arguments
```
  --app APP, -a APP     Show tasks only for the given source app
  --sort {0,1,2,3,4,5,6,7,8}, -s {0,1,2,3,4,5,6,7,8}
                        Sort output by column
  --reverse, -r         Sort in reverse order
```
##### show

Shows details about a task
```
drove tasks show [-h] source-app task-id
```
###### Positional Arguments
`source-app` - Name of the Drove application that started the task\
`task-id` - Task ID

##### logs

Print list of logs for task
```
drove tasks logs [-h] source-app task-id
```
###### Positional Arguments
`source-app` - Name of the Drove application that started the task\
`task-id` - Task ID

##### tail

Tail log for task
```
drove tasks tail [-h] [--file FILE] source-app task-id
```
###### Positional Arguments
`source-app` - Name of the Drove application that started the task\
`task-id` - Task ID

###### Named Arguments

```
  --file FILE, -f FILE  Log filename to tail. Default is to tail output.log
```
##### download

Download log for task

```
drove tasks download [-h] [--out OUT] source-app task-id file
```
###### Positional Arguments
`source-app` - Name of the Drove application that started the task\
`task-id` - Task ID\
`file` - Log filename to download

###### Named Arguments

```
  --out OUT, -o OUT  Filename to download to. Default is the same filename as provided.
```

©2024, Santanu Sinha.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/PhonePe/drove-cli",
    "name": "drove-cli",
    "maintainer": "Santanu Sinha",
    "docs_url": null,
    "requires_python": "<4.0,>=3.7",
    "maintainer_email": "santanu.sinha@gmail.com",
    "keywords": "container, docker, podman, distributed-systems, container-orchestrator",
    "author": "Santanu Sinha",
    "author_email": "santanu.sinha@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/32/38/89ee74084bfd67c6d8a5411b0ed23e74c5d9aa7d3d7ade40c4a392f85084/drove_cli-0.0.1.tar.gz",
    "platform": null,
    "description": "# Drove CLI\n\nCommand line interface for the Drove Container Orchestrator.\n\n# Getting Started\n\n## Installation\n\nYou can install the cli from from PyPI.\n\n```bash\npip install drove-cli\n```\n\nReactivate/deactivate virtual environment based on the need to utilize drove cli.\n\n## Running using docker\nThe cli is pushed as a docker for easy access. This also elimintates the need for having python etc setup on your system.\n\n1) Pull the image:\n```shell\ndocker pull ghcr.io/PhonePe/drove-cli:latest\n```\n\n2) Create a shell script called `drove` with the following content:\n\n```shell\n#! /bin/sh\ndocker run \\\n    --rm --interactive --tty --network host \\\n    --name drove-cli -v ${HOME}/.drove:/root/.drove:ro  \\\n    ghcr.io/PhonePe/drove-cli:latest \"$@\"\n\n```\n\n3) Make the script executable\n```shell\nchmod a+x drove\n```\n\n4) Put the path to this script in your `~/.bashrc`.\n\n```shell\nexport PATH=\"${PATH}:/path/to/your/script\"\n```\n\n5) Logout/login or run `. ~/.bashrc` to load the new [path]\n\n\n6) Run drove cli\n```\ndrove -h\n```\n\n## Requirements\nThe CLI is written in Python 3x\n\n\n## Accessing the Documentation\nThe arguments needed by the script are self documenting. Please use `-h` or `--help` in different sections and sub-sections of the CLI to get descriptions of commands, sub-commands, their arguments and options.\n\nTo see basic help:\n```\n\n$ drove -h\n\nusage: drove [-h] [--file FILE] [--cluster CLUSTER] [--endpoint ENDPOINT] [--auth-header AUTH_HEADER] [--insecure INSECURE] [--username USERNAME] [--password PASSWORD] [--debug]\n             {executor,cluster,apps,appinstances,tasks} ...\n\npositional arguments:\n  {executor,cluster,apps,appinstances,tasks}\n                        Available plugins\n    executor            Drove cluster executor related commands\n    cluster             Drove cluster related commands\n    apps                Drove application related commands\n    appinstances        Drove application instance related commands\n    tasks               Drove task related commands\n\noptions:\n  -h, --help            show this help message and exit\n  --file FILE, -f FILE  Configuration file for drove client\n  --cluster CLUSTER, -c CLUSTER\n                        Cluster name as specified in config file\n  --endpoint ENDPOINT, -e ENDPOINT\n                        Drove endpoint. (For example: https://drove.test.com)\n  --auth-header AUTH_HEADER, -t AUTH_HEADER\n                        Authorization header value for the provided drove endpoint\n  --insecure INSECURE, -i INSECURE\n                        Do not verify SSL cert for server\n  --username USERNAME, -u USERNAME\n                        Drove cluster username\n  --password PASSWORD, -p PASSWORD\n                        Drove cluster password\n  --debug, -d           Print details of errors\n\n```\n\nTo see documentation for a command/section:\n```\n$ drove cluster -h\nusage: drove cluster [-h] {ping,summary,leader,endpoints,events} ...\n\npositional arguments:\n  {ping,summary,leader,endpoints,events}\n                        Available commands for cluster management\n    ping                Ping the cluster\n    summary             Show cluster summary\n    leader              Show leader for cluster\n    endpoints           Show all exposed endpoints\n    events              Events on the cluster\n\noptional arguments:\n  -h, --help            show this help message and exit\n```\n\nTo further drill down into options for a sub-command/subsection:\n```\n$ drove cluster events -h\nusage: drove cluster events [-h] [--follow] [--type TYPE] [--count COUNT] [--textfmt TEXTFMT]\n\noptional arguments:\n  -h, --help            show this help message and exit\n  --follow, -f          Follow events (Press CTRL-C to kill)\n  --type TYPE, -t TYPE  Output events of only the matching type\n  --count COUNT, -c COUNT\n                        Fetch <count> events at a time.\n  --textfmt TEXTFMT, -s TEXTFMT\n                        Use the format string to print message\n```\n\n# Connecting to the Drove cluster\n\nIn order to use the CLI, we need to provide coordinates to the cluster to connect to. This can be done in the following manner:\n\n## Drove CLI config file\nThe config file can be located in the following paths:\n* `.drove` file in your home directory (Typically used for the default cluster you frequently connect to)\n*  A file in any path that can be passed as a parameter to the CLI with the `-f FILE` option\n\n### Config File format\nThis file is in ini format and is arranged in sections.\n\n```ini\n[DEFAULT]\n...\nstage_token = <token1>\nprod_token = <token2>\n\n[local]\nendpoint = http://localhost:10000\nusername = admin\npassword = admin\n\n[stage]\nendpoint = https://stage.testdrove.io\nauth_header = %(stage_token)s\n\n[production]\nendpoint = https://prod.testdrove.io\nauth_header = %(prod_token)s\n\n..\n```\n\nThe `DEFAULT` section can be used to define common variables like Insecure etc. The `local`, `stage`, `production` etc are names for inidividual clusters and these sections can be used to define configuration for individual clusters. Cluster name is referred to in the command line by using the `-c` command line option.\\\n*Interpolation* of values is supported and can be acieved by using `%(variable_name)s` references.\n\n> * Note: The `DEFAULT` section is mandatory\n> * Note: The `s` at the end of `%(var)s` is mandatory for interpolation\n\n### Contents of a Section\n```\nendpoint = https://yourcluster.yourdomain.com # Endpoint for cluster\ninsecure = true\nusername = <your_username>\npassword = <your_password>\nauth_header= <Authorization value here if using header based auth>\n```\n\nAuthentication priority:\n* If both `username` and `password` are provided, basic auth is used.\n* If a value is provided in the `auth_header` parameter, it is passed as the value for the `Authorization` header in the upstream HTTP calls to the Drove server verbatim.\n* If neither, no auth is set\n\n> NOTE: Use the `insecure` option to skip certificate checks on the server endpoint (comes in handy for internal domains)\n\nTo use a custom config file, invoke drove in the following form:\n\n```\n$ drove -f custom.conf ...\n```\n\nThis will connect to the cluster if an endpoint is mentioned in the `DEFAULT` section.\n\n```\n$ drove -f custom.conf -c stage ...\n```\n\nThis will connect to the cluster whose config is mentioned in the `[stage]` config section.\n\n```\n$ drove -c stage ...\n```\n\nThis will connect to the cluster whose config is mentioned in the `[stage]` config section in `$HOME/.drove` config file.\n\n\n## Command line options\nPass the endpoint and other options using `--endpoint|-e` etc etc. Options can be obtained using `-h` as mentioned above. Invocation will be in the form:\n\n```\n$ drove -e http://localhost:10000 -u guest -p guest ...\n```\n\n## CLI format\nThe following cli format is followed:\n\n```\nusage: drove [-h] [--file FILE] [--cluster CLUSTER] [--endpoint ENDPOINT] [--auth-header AUTH_HEADER] [--insecure INSECURE] [--username USERNAME] [--password PASSWORD] [--debug]\n             {executor,cluster,apps,appinstances,tasks} ...\n```\n### Basic Arguments\n```\n  -h, --help            show this help message and exit\n  --file FILE, -f FILE  Configuration file for drove client\n  --cluster CLUSTER, -c CLUSTER\n                        Cluster name as specified in config file\n  --endpoint ENDPOINT, -e ENDPOINT\n                        Drove endpoint. (For example: https://drove.test.com)\n  --auth-header AUTH_HEADER, -t AUTH_HEADER\n                        Authorization header value for the provided drove endpoint\n  --insecure INSECURE, -i INSECURE\n                        Do not verify SSL cert for server\n  --username USERNAME, -u USERNAME\n                        Drove cluster username\n  --password PASSWORD, -p PASSWORD\n                        Drove cluster password\n  --debug, -d           Print details of errors\n\n```\n\n## Commands\nCommands in drove are meant to address specific functionality. They can be summarized as follows:\n```\n    executor            Drove cluster executor related commands\n    cluster             Drove cluster related commands\n    apps                Drove application related commands\n    appinstances        Drove application instance related commands\n    tasks               Drove task related commands\n```\n### executor\n---\nDrove cluster executor related commands\n\n```\ndrove executor [-h] {list,info,appinstances,tasks} ...\n```\n\n#### Sub-commands\n\n##### list\n\nList all executors\n\n```\ndrove executor list [-h]\n```\n\n##### info\n\nShow details about executor\n\n```\ndrove executor info [-h] executor-id\n```\n\n###### Positional Arguments\n\n`executor-id` - Executor id for which info is to be shown\n\n##### appinstances\n\nShow app instances running on this executor\n\n```\ndrove executor appinstances [-h] [--sort {0,1,2,3,4,5}] [--reverse] executor-id\n```\n###### Positional Arguments\n\n`executor-id` - Executor id for which info is to be shown\n\n###### Arguments\n\n```\n  --sort {0,1,2,3,4,5}, -s {0,1,2,3,4,5}\n                        Sort output by column\n  --reverse, -r         Sort in reverse order\n```\n\n##### tasks\n\nShow tasks running on this executor\n\n```\ndrove executor tasks [-h] [--sort {0,1,2,3,4,5}] [--reverse] executor-id\n```\n\n###### Positional Arguments\n\n`executor-id` - Executor id for which info is to be shown\n\n###### Named Arguments\n```\n  --sort {0,1,2,3,4,5}, -s {0,1,2,3,4,5}\n                        Sort output by column\n  --reverse, -r         Sort in reverse order\n```\n\n\n### cluster\n---\nDrove cluster related commands\n\n```\ndrove cluster [-h] {ping,summary,leader,endpoints,events} ...\n```\n\n#### Sub-commands\n\n##### ping\n\nPing the cluster\n\n```\ndrove cluster ping [-h]\n```\n\n##### summary\n\nShow cluster summary\n\n```\ndrove cluster summary [-h]\n```\n\n##### leader\n\nShow leader for cluster\n```\ndrove cluster leader [-h]\n```\n##### endpoints\n\nShow all exposed endpoints\n```\ndrove cluster endpoints [-h] [--vhost VHOST]\n```\n\n###### Named Arguments\n\n```\n  --vhost VHOST, -v VHOST\n                        Show details only for the specific vhost\n```\n\n##### events\n\nEvents on the cluster\n\n```\ndrove cluster events [-h] [--follow] [--type TYPE] [--count COUNT] [--textfmt TEXTFMT]\n```\n\n###### Named Arguments\n\n```\n  --follow, -f          Follow events (Press CTRL-C to kill)\n  --type TYPE, -t TYPE  Output events of only the matching type\n  --count COUNT, -c COUNT\n                        Fetch <count> events at a time.\n  --textfmt TEXTFMT, -s TEXTFMT\n                        Use the format string to print message\n                        Default: \u201c{type: <25} | {id: <36} | {time: <20} | {metadata}\u201d\n```\n\n### apps\n---\nDrove application related commands\n\n```\ndrove apps [-h] {list,summary,spec,create,destroy,deploy,scale,suspend,restart,cancelop} ...\n```\n#### Sub-commands\n\n##### list\n\nList all applications\n\n```\ndrove apps list [-h] [--sort {0,1,2,3,4,5,6,7,8}] [--reverse]\n```\n\n###### Named Arguments\n\n```\n  --sort {0,1,2,3,4,5,6,7,8}, -s {0,1,2,3,4,5,6,7,8}\n                        Sort output by column\n  --reverse, -r         Sort in reverse order\n```\n\n##### summary\n\nShow a summary for an application\n```\ndrove apps summary [-h] app-id\n```\n###### Positional Arguments\n\n`app-id` - Application ID\n\n##### spec\n\nPrint the raw json spec for an application\n```\ndrove apps spec [-h] app-id\n```\n###### Positional Arguments\n\n`app-id` - Application ID\n\n##### create\n\nCreate application on cluster\n```\ndrove apps create [-h] spec-file\n```\n###### Positional Arguments\n\n`spec-file` - JSON spec file for the application\n\n##### destroy\n\nDestroy an app with zero instances\n```\ndrove apps destroy [-h] app-id\n```\n###### Positional Arguments\n\n`app-id` - Application ID\n\n##### deploy\n\nDeploy new app instances.\n```\ndrove apps deploy [-h] [--parallelism PARALLELISM] [--timeout TIMEOUT] app-id instances\n```\n###### Positional Arguments\n\n`app-id` - Application ID\\\n`instances` - Number of new instances to be created\n\n###### Named Arguments\n\n```\n  --parallelism PARALLELISM, -p PARALLELISM\n                        Number of parallel threads to be used to execute operation (default: 1)\n  --timeout TIMEOUT, -t TIMEOUT\n                        Timeout for the operation on the cluster (default: 5 minutes)\n  --wait, -w            Wait to ensure instance count is reached\n```\n##### scale\n\nScale app to required instances. Will increase or decrease instances on the cluster to match this number\n\n```\ndrove apps scale [-h] [--parallelism PARALLELISM] [--timeout TIMEOUT] app-id instances\n```\n###### Positional Arguments\n\n`app-id` - Application ID\\\n`instances` - Number of instances. Setting this to 0 will suspend the app\n\n###### Named Arguments\n\n```\n  --parallelism PARALLELISM, -p PARALLELISM\n                        Number of parallel threads to be used to execute operation (default: 1)\n  --timeout TIMEOUT, -t TIMEOUT\n                        Timeout for the operation on the cluster (default: 5 minutes)\n  --wait, -w            Wait to ensure instance count is reached\n```\n\n##### suspend\n\nSuspend the app\n```\ndrove apps suspend [-h] [--parallelism PARALLELISM] [--timeout TIMEOUT] app-id\n```\n###### Positional Arguments[\u00b6](#Positional%20Arguments_repeat9 \"Link to this heading\")\n\n`app-id` - Application ID\n\n###### Named Arguments\n\n```\n  --parallelism PARALLELISM, -p PARALLELISM\n                        Number of parallel threads to be used to execute operation (default: 1)\n  --timeout TIMEOUT, -t TIMEOUT\n                        Timeout for the operation on the cluster (default: 5 minutes)\n  --wait, -w            Wait to ensure all instances are suspended\n```\n\n##### restart\n\nRestart am existing app instances.\n\n```\ndrove apps restart [-h] [--parallelism PARALLELISM] [--timeout TIMEOUT] app-id\n```\n\n###### Positional Arguments\n\n`app-id` - Application ID\n\n###### Named Arguments\n```\n  --parallelism PARALLELISM, -p PARALLELISM\n                        Number of parallel threads to be used to execute operation (default: 1)\n  --timeout TIMEOUT, -t TIMEOUT\n                        Timeout for the operation on the cluster (default: 5 minutes)\n  --wait, -w            Wait to ensure all instances are replaced\n```\n##### cancelop\n\nCancel current operation\n```\ndrove apps cancelop [-h] app-id\n```\n###### Positional Arguments\n`app-id` - Application ID\n\n### appinstances\n---\nDrove application instance related commands\n```\ndrove appinstances [-h] {list,info,logs,tail,download,replace,kill} ...\n```\n#### Sub-commands\n\n##### list\n\nList all application instances\n```\ndrove appinstances list [-h] [--old] [--sort {0,1,2,3,4,5}] [--reverse] app-id\n```\n###### Positional Arguments\n`app-id` - Application ID\n\n###### Named Arguments\n\n```\n  --parallelism PARALLELISM, -p PARALLELISM\n                        Number of parallel threads to be used to execute operation (default: 1)\n  --timeout TIMEOUT, -t TIMEOUT\n                        Timeout for the operation on the cluster (default: 5 minutes)\n```\n##### info\n\nPrint details for an application instance\n```\ndrove appinstances info [-h] app-id instance-id\n```\n###### Positional Arguments\n`app-id` - Application ID\\\n`instance-id` - Application Instance ID\n\n##### logs\n\nPrint list of logs for application instance\n```\ndrove appinstances logs [-h] app-id instance-id\n```\n###### Positional Arguments\n\n`app-id` - Application ID\\\n`instance-id` - Application Instance ID\n\n##### tail\n\nTail log for application instance\n```\ndrove appinstances tail [-h] [--file FILE] app-id instance-id\n```\n###### Positional Arguments\n\n`app-id` - Application ID\\\n`instance-id` - Application Instance ID\n\n###### Named Arguments\n\n```\n  --log LOG, -l LOG  Log filename to tail. Default is to tail output.log\n```\n\n##### download\n\nDownload log for application instance\n```\ndrove appinstances download [-h] [--out OUT] app-id instance-id file\n```\n###### Positional Arguments\n\n`app-id` - Application ID\\\n`instance-id` - Application Instance ID\\\n`file` - Log filename to download\n\n###### Named Arguments\n```\n--out, -o Filename to download to. Default is the same filename as provided.\n```\n##### replace\n\nReplace specific app instances with fresh instances\n```\ndrove appinstances replace [-h] [--parallelism PARALLELISM] [--timeout TIMEOUT] app-id instance-id [instance-id ...]\n```\n###### Positional Arguments\n`app-id` - Application ID\\\n`instance-id` - Application Instance IDs\n\n###### Named Arguments\n```\n  --parallelism PARALLELISM, -p PARALLELISM\n                        Number of parallel threads to be used to execute operation (default: 1)\n  --timeout TIMEOUT, -t TIMEOUT\n                        Timeout for the operation on the cluster (default: 5 minutes)\n  --wait, -w            Wait to ensure all instances are replaced\n```\n\n##### kill\n\nKill specific app instances\n```\ndrove appinstances kill [-h] [--parallelism PARALLELISM] [--timeout TIMEOUT] app-id instance-id [instance-id ...]\n```\n###### Positional Arguments\n`app-id` - Application ID\\\n`instance-id` - Application Instance IDs\n\n###### Named Arguments\n\n```\n  --parallelism PARALLELISM, -p PARALLELISM\n                        Number of parallel threads to be used to execute operation\n  --timeout TIMEOUT, -t TIMEOUT\n                        Timeout for the operation on the cluster (default: 5 minutes)\n  --wait, -w            Wait to ensure all instances are killed\n```\n### tasks\n---\nDrove task related commands\n```\ndrove tasks [-h] {create,kill,list,show,logs,tail,download} ...\n```\n#### Sub-commands\n\n##### create\n\nCreate a task on cluster\n```\ndrove tasks create [-h] spec-file\n```\n###### Positional Arguments\n\n`spec-file` - JSON spec file for the task\n\n##### kill\n\nKill a running task\n```\ndrove tasks kill [-h] source-app-name task-id\n```\n###### Positional Arguments\n\n`source-app-name` - Source app name as specified in spec\\\n`task-id` - ID of the task as specified in the spec\n\n##### list\n\nList all active tasks\n```\ndrove tasks list [-h] [--app APP] [--sort {0,1,2,3,4,5,6,7,8}] [--reverse]\n```\n###### Named Arguments\n```\n  --app APP, -a APP     Show tasks only for the given source app\n  --sort {0,1,2,3,4,5,6,7,8}, -s {0,1,2,3,4,5,6,7,8}\n                        Sort output by column\n  --reverse, -r         Sort in reverse order\n```\n##### show\n\nShows details about a task\n```\ndrove tasks show [-h] source-app task-id\n```\n###### Positional Arguments\n`source-app` - Name of the Drove application that started the task\\\n`task-id` - Task ID\n\n##### logs\n\nPrint list of logs for task\n```\ndrove tasks logs [-h] source-app task-id\n```\n###### Positional Arguments\n`source-app` - Name of the Drove application that started the task\\\n`task-id` - Task ID\n\n##### tail\n\nTail log for task\n```\ndrove tasks tail [-h] [--file FILE] source-app task-id\n```\n###### Positional Arguments\n`source-app` - Name of the Drove application that started the task\\\n`task-id` - Task ID\n\n###### Named Arguments\n\n```\n  --file FILE, -f FILE  Log filename to tail. Default is to tail output.log\n```\n##### download\n\nDownload log for task\n\n```\ndrove tasks download [-h] [--out OUT] source-app task-id file\n```\n###### Positional Arguments\n`source-app` - Name of the Drove application that started the task\\\n`task-id` - Task ID\\\n`file` - Log filename to download\n\n###### Named Arguments\n\n```\n  --out OUT, -o OUT  Filename to download to. Default is the same filename as provided.\n```\n\n\u00a92024, Santanu Sinha.\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Drove Command Line Interface",
    "version": "0.0.1",
    "project_urls": {
        "Homepage": "https://github.com/PhonePe/drove-cli",
        "Repository": "https://github.com/PhonePe/drove-cli"
    },
    "split_keywords": [
        "container",
        " docker",
        " podman",
        " distributed-systems",
        " container-orchestrator"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0f23b19e7011a8558bd139bdffb1b32d1551a187935bcffdad6c9ac9c63f8c8d",
                "md5": "1a3147b72fc34e1367e933bc8f1d81fa",
                "sha256": "933119504a288556122cb7d04d8b84d29581ebeff52215c304a8e296e644fb55"
            },
            "downloads": -1,
            "filename": "drove_cli-0.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1a3147b72fc34e1367e933bc8f1d81fa",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.7",
            "size": 21971,
            "upload_time": "2024-04-05T11:52:18",
            "upload_time_iso_8601": "2024-04-05T11:52:18.203339Z",
            "url": "https://files.pythonhosted.org/packages/0f/23/b19e7011a8558bd139bdffb1b32d1551a187935bcffdad6c9ac9c63f8c8d/drove_cli-0.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "323889ee74084bfd67c6d8a5411b0ed23e74c5d9aa7d3d7ade40c4a392f85084",
                "md5": "150a5ce83104fd4c27a748c3445fbb24",
                "sha256": "4275fe6881861b85e0d05c928eb5c6791ca21543119d0faadcf45e06b1221b1e"
            },
            "downloads": -1,
            "filename": "drove_cli-0.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "150a5ce83104fd4c27a748c3445fbb24",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.7",
            "size": 19850,
            "upload_time": "2024-04-05T11:52:19",
            "upload_time_iso_8601": "2024-04-05T11:52:19.573757Z",
            "url": "https://files.pythonhosted.org/packages/32/38/89ee74084bfd67c6d8a5411b0ed23e74c5d9aa7d3d7ade40c4a392f85084/drove_cli-0.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-05 11:52:19",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "PhonePe",
    "github_project": "drove-cli",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "Requests",
            "specs": [
                [
                    "==",
                    "2.31.0"
                ]
            ]
        },
        {
            "name": "tabulate",
            "specs": [
                [
                    "==",
                    "0.9.0"
                ]
            ]
        },
        {
            "name": "tenacity",
            "specs": [
                [
                    "==",
                    "8.2.3"
                ]
            ]
        },
        {
            "name": "urllib3",
            "specs": [
                [
                    "==",
                    "1.25.8"
                ]
            ]
        },
        {
            "name": "urllib3",
            "specs": [
                [
                    "==",
                    "1.26.5"
                ]
            ]
        }
    ],
    "lcname": "drove-cli"
}
        
Elapsed time: 0.25670s