--- version: '3' tasks: bucket:create: deps: - :install:software:s5cmd summary: | # Create S3 Bucket This task creates an S3 bucket in the given account `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`, `AWS_REGION` and `BUCKET_NAME` are passed from the calling task. The first 3 variables are set as environment variables env: AWS_ACCESS_KEY_ID: '{{.AWS_ACCESS_KEY_ID}}' AWS_REGION: '{{.AWS_REGION}}' AWS_SECRET_ACCESS_KEY: '{{.AWS_SECRET_ACCESS_KEY}}' cmds: - s5cmd mb s3://'{{.BUCKET_NAME}}' bucket:jumpusb:populate: deps: - :install:software:axel summary: | # Populate an S3 Bucket with JumpUSB Assets This script first downloads the script from the JumpUSB repository: https://gitlab.com/megabyte-labs/jumpusb/-/blob/master/local/distros.json After that, it downloads all the operating systems and uploads them to an S3 bucket using the same path that is defined in each object's path key. For example, the following: ``` { "url": "https://mirrors.edge.kernel.org/zorinos-isos/16/Zorin-OS-16.1-Core-64-bit.iso", "url_axel": "https://{mirrors.edge.kernel.org/zorinos-isos,mirror2.sandyriver.net/pub/zorinos,mirror.clarkson.edu/zorinos/isos,distro.ibiblio.org/zorinos}/16/Zorin-OS-16.1-Core-64-bit.iso", "path": "/iso/zorin/zorin-16.1-amd64.iso", "persistence_base": "persistence_ext4_4GB_casper-rw.dat.7z", "persistence_file": "zorin.dat", "live": true } ``` 1. Downloads the ISO with Axel using the `url_axel` URL (and falls back to the `url` if `url_axel` is not present) 2. Then uploads the file into the `/iso/zorin` directory of the S3 bucket where the file is named `zorin-16.1-amd64.iso env: DISTROS_TMP: sh: mktemp cmds: - curl -sSL https://gitlab.com/megabyte-labs/jumpusb/-/raw/master/local/distros.json > "$DISTROS_TMP" bucket:synchronize: deps: - :install:software:s5cmd summary: | # Synchronize S3 Buckets Synchronize the contents of one S3 bucket with another using s5cmd. cmds: - s5cmd sync '{{.SOURCE_BUCKET}}' '{{.DEST_BUCKET}}'