2018-11-21 19:23:18 +00:00
# Portainer Stack Utils
2018-11-21 20:01:20 +00:00
[![Docker Automated build ](https://img.shields.io/docker/automated/greenled/portainer-stack-utils.svg )](https://hub.docker.com/r/greenled/portainer-stack-utils/)
[![Docker Pulls ](https://img.shields.io/docker/pulls/greenled/portainer-stack-utils.svg )](https://hub.docker.com/r/greenled/portainer-stack-utils/)
[![Microbadger ](https://images.microbadger.com/badges/image/greenled/portainer-stack-utils.svg )](http://microbadger.com/images/greenled/portainer-stack-utils "Image size")
2018-11-24 19:12:47 +00:00
Bash script to deploy/undeploy stacks in a [Portainer ](https://portainer.io/ ) instance from a [docker-compose ](https://docs.docker.com/compose ) [yaml file ](https://docs.docker.com/compose/compose-file ). Based on previous work by [@vladbabii ](https://github.com/vladbabii ) on [docker-how-to/portainer-bash-scripts ](https://github.com/docker-how-to/portainer-bash-scripts ).
2018-11-21 19:23:18 +00:00
2018-11-21 20:37:05 +00:00
## Supported Portainer API
2018-11-24 19:12:47 +00:00
Script was created for the latest Portainer API, which at the time of writing is [1.9.2 ](https://app.swaggerhub.com/apis/deviantony/Portainer/1.19.2 ).
2018-11-21 20:37:05 +00:00
2018-11-21 19:23:18 +00:00
## Requirements
- [bash ](https://www.gnu.org/software/bash/ )
- [httpie ](https://httpie.org/ )
- [jq ](https://stedolan.github.io/jq/ )
## How to use
2018-11-24 20:54:10 +00:00
The provided `psu` script allows to deploy/update/undeploy portainer stacks. Settings can be passed through envvars and/or flags. Both envvars and flags can be mixed but flags will always overwrite envvar values. When deploying a stack, if it doesn't exist a new one is created, otherwise it's updated.
2018-11-21 19:23:18 +00:00
2018-11-24 19:12:47 +00:00
### With envvars
2018-11-21 19:23:18 +00:00
2018-11-24 19:12:47 +00:00
This is particularly useful for CI/CD pipelines.
2018-11-21 19:23:18 +00:00
2018-11-25 01:51:16 +00:00
- `ACTION` ("deploy" or "undeploy", required): Whether to deploy or undeploy the stack
2018-11-24 19:12:47 +00:00
- `PORTAINER_USER` (string, required): Username
- `PORTAINER_PASSWORD` (string, required): Password
- `PORTAINER_URL` (string, required): URL to Portainer
- `PORTAINER_STACK_NAME` (string, required): Stack name
- `DOCKER_COMPOSE_FILE` (string, required if action=deploy): Path to doker-compose file
- `PORTAINER_PRUNE` ("true" or "false", optional): Whether to prune unused containers or not. Defaults to `"false"` .
- `PORTAINER_ENDPOINT` (int, optional): Which endpoint to use. Defaults to `1` .
- `HTTPIE_VERIFY_SSL` ("yes" or "no", optional): Whether to verify SSL certificate or not. Defaults to `"yes"` .
2018-11-24 19:29:10 +00:00
- `VERBOSE_MODE` ("true" or "false", optional): Whether to activate verbose output mode or not. Defaults to `"false"` .
2018-11-24 20:09:14 +00:00
- `DEBUG_MODE` ("true" or "false", optional): Whether to activate debug output mode or not. Defaults to `"false"` . See [debug mode warning ](#debug-mode ) below.
2018-11-24 19:12:47 +00:00
#### Examples
2018-11-21 19:23:18 +00:00
```bash
2018-11-24 19:12:47 +00:00
export ACTION="deploy"
export PORTAINER_USER="admin"
export PORTAINER_PASSWORD="password"
export PORTAINER_URL="http://portainer.local"
export PORTAINER_STACK_NAME="mystack"
export DOCKER_COMPOSE_FILE="/path/to/docker-compose.yml"
./psu
```
```bash
export ACTION="undeploy"
export PORTAINER_USER="admin"
export PORTAINER_PASSWORD="password"
export PORTAINER_URL="http://portainer.local"
export PORTAINER_STACK_NAME="mystack"
./psu
2018-11-21 19:23:18 +00:00
```
2018-11-24 19:12:47 +00:00
### With flags
2018-11-21 19:23:18 +00:00
2018-11-24 19:12:47 +00:00
This is more suitable for standalone script usage.
2018-11-25 01:51:16 +00:00
- `-a` ("deploy" or "undeploy", required): Whether to deploy or undeploy the stack
2018-11-24 19:12:47 +00:00
- `-u` (string, required): Username
- `-p` (string, required): Password
- `-l` (string, required): URL to Portainer
- `-n` (string, required): Stack name
- `-c` (string, required if action=deploy): Path to doker-compose file
- `-r` ("true" or "false", optional): Whether to prune unused containers or not. Defaults to `"false"` .
- `-e` (int, optional): Which endpoint to use. Defaults to `1` .
- `-s` ("yes" or "no", optional): Whether to verify SSL certificate or not. Defaults to `"yes"` .
2018-11-24 19:29:10 +00:00
- `-v` ("true" or "false", optional): Whether to activate verbose output mode or not. Defaults to `"false"` .
2018-11-24 20:09:14 +00:00
- `-d` ("true" or "false", optional): Whether to activate debug output mode or not. Defaults to `"false"` . See [debug mode warning ](#debug-mode ) below.
2018-11-24 19:12:47 +00:00
#### Examples
```bash
./psu -a deploy -u admin -p password -l http://portainer.local -n mystack -c /path/to/docker-compose.yml
```
2018-11-21 19:23:18 +00:00
```bash
2018-11-24 19:12:47 +00:00
./psu -a undeploy -u admin -p password -l http://portainer.local -n mystack
2018-11-21 19:23:18 +00:00
```
2018-11-21 20:33:32 +00:00
2018-11-24 20:09:14 +00:00
### Debug mode
**WARNING**: In debug mode the script prints as much information as possible, including configuration values (with portainer credentials) and Portainer API responses (with sensitive information like authentication token and stacks environment variables). Avoid using debug mode in CI/CD pipelines, as pipeline logs are usually recorded.
2018-11-21 20:33:32 +00:00
## License
Source code contained by this project is licensed under the [GNU General Public License version 3 ](https://www.gnu.org/licenses/gpl-3.0.en.html ). See [LICENSE ](LICENSE ) file for reference.