# 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"
}