Richt een op MinIO gebaseerde S3-service in een lokale ontwikkelomgeving in en test deze met behulp van Ansible-plays om buckets aan te maken, bestanden te uploaden en te downloaden.
Deze handleiding laat zien hoe je een eenvoudige S3-compatibele service
kunt opzetten met MinIO in de PHX
ontwikkelomgeving. Het omvat twee
Ansible-plays: een om de S3-service op een node genaamd pxd-s3 in te richten,
en een andere om deze te testen door een bucket aan te maken, een bestand te uploaden en te downloaden.
Dit verifieert de compatibiliteit met de amazon.awsAnsible-collecties
voor het beheren van S3-resources.
De opzet draait lokaal met
Vagrant en
LXD, en simuleert een S3-service
die als startpunt kan dienen voor het ontwikkelen van
Ansible-rollen, zoals
die voor geautomatiseerde binaire downloads in lifecycle management (LCM)-taken.
Het uitvoeren van vagrant up pxd-s3 creëert een LXD-node met Ubuntu 22.04 en
rolt een MinIO-container uit. De container exposeert poort 9000 voor de S3-API
(compatibel met tools zoals AWS CLI of Ansible’s amazon.aws-modules) en poort
9090 voor de MinIO Console webinterface.
Met de vereisten van de
ontwikkelomgeving voldaan, kun je de S3-service in ongeveer 5 minuten inrichten en direct daarna tests uitvoeren.
Om de S3-node pxd-s3 aan te maken, die een S3-compatibele service biedt op basis
van MinIO, voer je de volgende opdracht uit vanuit de root van je lokale kloon van het
PHX
Ansible-inventarisproject:
vagrant up pxd-s3
Toon mij
Bringing machine 'pxd-s3' up with 'lxd' provider...
==> pxd-s3: Machine has not been created yet, starting...
==> pxd-s3: Importing LXC image...
==> pxd-s3: Mounting shared folders...
pxd-s3: /vagrant => /home/onknows/git/gitlab/c2/ansible-phx
pxd-s3: /home/vagrant/.marker => /home/onknows/.marker
pxd-s3: /home/vagrant/.local/share/marker => /home/onknows/.local/share/marker
pxd-s3: /root/.marker => /home/onknows/.marker
pxd-s3: /root/.local/share/marker => /home/onknows/.local/share/marker
pxd-s3: /software => /software/projects/phx
pxd-s3: /software-cache => /software/projects/phx/cache
pxd-s3: /ansible-dev-collections => /home/onknows/git/gitlab/c2/ansible-dev-collections
==> pxd-s3: Waiting for machine to boot. This may take a few minutes...
pxd-s3: SSH address: 10.190.101.188:22
pxd-s3: SSH username: vagrant
pxd-s3: SSH auth method: private key
==> pxd-s3: Machine booted and ready!
==> pxd-s3: Setting hostname...
==> pxd-s3: Running provisioner: shell...
pxd-s3: Running: inline script
==> pxd-s3: Running provisioner: ansible...
pxd-s3: Running ansible-playbook...
[DEPRECATION WARNING]: community.general.yaml has been deprecated. The plugin
has been superseded by the the option `result_format=yaml` in callback plugin
ansible.builtin.default from ansible-core 2.13 onwards. This feature will be
removed from community.general in version 13.0.0. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
PLAY [S3] **********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [pxd-s3]
TASK [Include Linux roles] *****************************************************
TASK [c2platform.core.server_update : include_tasks] ***************************
included: /home/onknows/git/gitlab/c2/ansible-dev-collections/ansible_collections/c2platform/core/roles/server_update/tasks/update_cache.yml for pxd-s3
TASK [c2platform.core.server_update : Apt update cache] ************************
changed: [pxd-s3]
TASK [c2platform.core.server_update : include_tasks] ***************************
included: /home/onknows/git/gitlab/c2/ansible-dev-collections/ansible_collections/c2platform/core/roles/server_update/tasks/update.yml for pxd-s3
TASK [c2platform.core.server_update : include_tasks] ***************************
included: /home/onknows/git/gitlab/c2/ansible-dev-collections/ansible_collections/c2platform/core/roles/server_update/tasks/debian.yml for pxd-s3
TASK [c2platform.core.server_update : Upgrade all packages] ********************
changed: [pxd-s3]
TASK [c2platform.core.server_update : Check reboot] ****************************
ok: [pxd-s3]
TASK [c2platform.core.server_update : Fact server_update_reboot] ***************
ok: [pxd-s3]
TASK [c2platform.core.bootstrap : Include package tasks] ***********************
included: /home/onknows/git/gitlab/c2/ansible-dev-collections/ansible_collections/c2platform/core/roles/bootstrap/tasks/os.yml for pxd-s3 => (item=['nano', 'wget', 'tree', 'unzip', 'zip', 'jq', 'build-essential', 'python3-dev', 'python3-wheel', 'libsasl2-dev', 'libldap2-dev', 'libssl-dev', 'git', 'git-lfs', 'nfs-common', 'net-tools', 'telnet', 'curl', 'dnsutils', 'python2'])
included: /home/onknows/git/gitlab/c2/ansible-dev-collections/ansible_collections/c2platform/core/roles/bootstrap/tasks/os.yml for pxd-s3 => (item=python3-pip)
included: /home/onknows/git/gitlab/c2/ansible-dev-collections/ansible_collections/c2platform/core/roles/bootstrap/tasks/pip.yml for pxd-s3 => (item=['docker', 'requests==2.28.1'])
included: /home/onknows/git/gitlab/c2/ansible-dev-collections/ansible_collections/c2platform/core/roles/bootstrap/tasks/pip.yml for pxd-s3 => (item=['botocore', 'boto3'])
included: /home/onknows/git/gitlab/c2/ansible-dev-collections/ansible_collections/c2platform/core/roles/bootstrap/tasks/os.yml for pxd-s3 => (item=['realmd', 'sssd', 'sssd-ad', 'sssd-krb5', 'krb5-user', 'adcli', 'policykit-1', 'sssd-tools', 'libnss-sss', 'libpam-sss', 'bind9-utils', 'samba-common-bin'])
TASK [c2platform.core.bootstrap : OS package] **********************************
changed: [pxd-s3] => (item=['nano', 'wget', 'tree', 'unzip', 'zip', 'jq', 'build-essential', 'python3-dev', 'python3-wheel', 'libsasl2-dev', 'libldap2-dev', 'libssl-dev', 'git', 'git-lfs', 'nfs-common', 'net-tools', 'telnet', 'curl', 'dnsutils', 'python2'])
TASK [c2platform.core.bootstrap : OS package] **********************************
ok: [pxd-s3] => (item=python3-pip)
TASK [c2platform.core.bootstrap : PIP package] *********************************
changed: [pxd-s3] => (item=['docker', 'requests==2.28.1'])
TASK [c2platform.core.bootstrap : PIP package] *********************************
changed: [pxd-s3] => (item=['botocore', 'boto3'])
TASK [c2platform.core.bootstrap : OS package] **********************************
changed: [pxd-s3] => (item=['realmd', 'sssd', 'sssd-ad', 'sssd-krb5', 'krb5-user', 'adcli', 'policykit-1', 'sssd-tools', 'libnss-sss', 'libpam-sss', 'bind9-utils', 'samba-common-bin'])
TASK [c2platform.core.os_trusts : CA distribute ( Debian )] ********************
changed: [pxd-s3] => (item=https://letsencrypt.org/certs/isrgrootx1.pem)
changed: [pxd-s3] => (item=file:///vagrant/.ca/c2/c2.crt)
TASK [c2platform.core.os_trusts : Execute update-ca-certificates ( Debian )] ***
changed: [pxd-s3] => (item=https://letsencrypt.org/certs/isrgrootx1.pem)
changed: [pxd-s3] => (item=file:///vagrant/.ca/c2/c2.crt)
TASK [c2platform.core.secrets : Stat secret dir] *******************************
ok: [pxd-s3 -> localhost] => (item=/home/onknows/git/gitlab/c2/ansible-phx/secret_vars/development)
ok: [pxd-s3 -> localhost] => (item=/runner/project/secret_vars/development)
TASK [c2platform.core.secrets : Include secrets] *******************************
ok: [pxd-s3] => (item=/home/onknows/git/gitlab/c2/ansible-phx/secret_vars/development)
TASK [c2platform.core.linux : Include linux_resources] *************************
included: /home/onknows/git/gitlab/c2/ansible-dev-collections/ansible_collections/c2platform/core/roles/linux/tasks/fail.yml for pxd-s3 => (item=0_bootstrap Environment pxd-s3 → development)
included: /home/onknows/git/gitlab/c2/ansible-dev-collections/ansible_collections/c2platform/core/roles/linux/tasks/lineinfile.yml for pxd-s3 => (item=marker Marker)
included: /home/onknows/git/gitlab/c2/ansible-dev-collections/ansible_collections/c2platform/core/roles/linux/tasks/file.yml for pxd-s3 => (item=marker Python link for marker)
TASK [c2platform.core.linux : Manage lines in text files] **********************
changed: [pxd-s3] => (item=/home/vagrant/.bashrc)
changed: [pxd-s3] => (item=/root/.bashrc)
TASK [c2platform.core.linux : Manage files and file properties] ****************
changed: [pxd-s3] => (item=/usr/bin/python → link)
TASK [geerlingguy.docker : include_tasks] **************************************
included: /home/onknows/git/gitlab/c2/ansible-phx/roles/external/geerlingguy.docker/tasks/setup-Debian.yml for pxd-s3
TASK [geerlingguy.docker : Ensure old versions of Docker are not installed.] ***
ok: [pxd-s3]
TASK [geerlingguy.docker : Ensure dependencies are installed.] *****************
ok: [pxd-s3]
TASK [geerlingguy.docker : Ensure additional dependencies are installed (on Ubuntu >= 20.04).] ***
ok: [pxd-s3]
TASK [geerlingguy.docker : Add Docker apt key.] ********************************
changed: [pxd-s3]
TASK [geerlingguy.docker : Add Docker repository.] *****************************
changed: [pxd-s3]
TASK [geerlingguy.docker : Install Docker (Ansible >=2.12).] *******************
changed: [pxd-s3]
TASK [geerlingguy.docker : Ensure Docker is started and enabled at boot.] ******
ok: [pxd-s3]
RUNNING HANDLER [geerlingguy.docker : restart docker] **************************
changed: [pxd-s3]
TASK [geerlingguy.docker : include_tasks] **************************************
included: /home/onknows/git/gitlab/c2/ansible-phx/roles/external/geerlingguy.docker/tasks/docker-compose.yml for pxd-s3
TASK [geerlingguy.docker : Check current docker-compose version.] **************
ok: [pxd-s3]
TASK [geerlingguy.docker : set_fact] *******************************************
ok: [pxd-s3]
TASK [geerlingguy.docker : Delete existing docker-compose version if it's different.] ***
ok: [pxd-s3]
TASK [geerlingguy.docker : Install Docker Compose (if configured).] ************
changed: [pxd-s3]
TASK [c2platform.mw.docker : Networks] *****************************************
changed: [pxd-s3] => (item=minio)
TASK [c2platform.mw.docker : Images] *******************************************
changed: [pxd-s3] => (item=quay.io/minio/minio)
TASK [c2platform.mw.docker : Volumes] ******************************************
changed: [pxd-s3] => (item=minio)
TASK [c2platform.mw.docker : Container] ****************************************
changed: [pxd-s3] => (item=minio)
TASK [c2platform.core.linux : Include linux_resources] *************************
included: /home/onknows/git/gitlab/c2/ansible-dev-collections/ansible_collections/c2platform/core/roles/linux/tasks/user.yml for pxd-s3 => (item=s3 vagrant)
TASK [c2platform.core.linux : Manage users on a system] ************************
changed: [pxd-s3] => (item=vagrant → present)
PLAY RECAP *********************************************************************
pxd-s3 : ok=47 changed=20 unreachable=0 failed=0 skipped=33 rescued=0 ignored=0
Deze opdracht gebruikt de Vagrantfile.yml-configuratie om de node in te richten. Het
past de
playbookplays/mgmt/s3.yml toe, die Docker installeert, de MinIO-image ophaalt
en de container start met standaard credentials (admin gebruiker:
admin, wachtwoord: Supersecret!).
Na het inrichten kun je de services bereiken op:
S3 API
MinIO Console
http://192.168.60.14:9000
http://192.168.60.14:9090
S3-testplay
Om de S3-service te testen, voer je de test
playbook uit op de pxd-s3-node. Deze
play maakt een S3-bucket genaamd ansible aan, downloadt een Tomcat-archief van het
internet, uploadt het naar de bucket en downloadt het vervolgens terug om het proces te verifiëren.
==> pxd-s3: Running provisioner: shell...
pxd-s3: Running: inline script
==> pxd-s3: Running provisioner: ansible...
pxd-s3: Running ansible-playbook...
[WARNING]: Collection amazon.aws does not support Ansible version 2.16.0
[DEPRECATION WARNING]: community.general.yaml has been deprecated. The plugin
has been superseded by the the option `result_format=yaml` in callback plugin
ansible.builtin.default from ansible-core 2.13 onwards. This feature will be
removed from community.general in version 13.0.0. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
PLAY [S3] **********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [pxd-s3]
TASK [Create "ansible" bucket] *************************************************
changed: [pxd-s3]
[WARNING]: packaging.version Python module not installed, unable to check AWS
SDK versions
[WARNING]: Failed to get bucket public access block settings (not supported by
cloud)
[WARNING]: Failed to get bucket ownership settings (not supported by cloud)
[WARNING]: Failed to get bucket inventory settings (not supported by cloud)
TASK [Download Tomcat from internet] *******************************************
changed: [pxd-s3]
TASK [Upload to S3] ************************************************************
changed: [pxd-s3]
TASK [Download from S3] ********************************************************
changed: [pxd-s3]
PLAY RECAP *********************************************************************
pxd-s3 : ok=5 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Dit gebruikt modules uit de amazon.awsAnsible-collecties om te interageren met het S3-endpoint.
Verificatie
Om de testresultaten handmatig te verifiëren, navigeer je naar de MinIO Console webinterface
http://192.168.60.14:9090/
.
Log in met gebruikersnaam admin en wachtwoord Supersecret!.
Na het inloggen zou je de bucket ansible moeten zien met het bestand
apache-tomcat-10.1.48.tar.gz.
De Vagrantfile.yml definieert de pxd-s3-node met de ubuntu22-lxd box,
wijst IP 192.168.60.14 toe en specificeert de
playbookmgmt/s3 voor
het inrichten.
Vagrant gebruikt dit om de node aan te maken en te configureren.
Het
inventarisbestandhosts.ini definieert Ansible-groepen s3 en
s3_download_server. In deze testopzet zit pxd-s3 in beide groepen, en fungeert als
zowel de S3-server als de testclient. In productielijke scenario’s zouden deze rollen gescheiden zijn.