Skip to content

Commit

Permalink
Merge pull request #25 from Knappek/enable-bucket-versioning
Browse files Browse the repository at this point in the history
add support for bucket versioning
  • Loading branch information
ricsanfre authored Jan 19, 2025
2 parents 70fd438 + 2567562 commit 5eb2497
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 0 deletions.
16 changes: 16 additions & 0 deletions library/minio_bucket.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@
description:
- Policies to bind to the s3 bucket.
required: false
versioning:
description:
- Bucket Versioning.
required: false
validate_certs:
description:
- When set to "no", SSL certificates will not be validated for
Expand All @@ -59,10 +63,13 @@
secret_key: my_secret_key
policy:
- *:read-only
versioning: enabled
state: present
"""

from ansible.module_utils.basic import AnsibleModule
from minio.commonconfig import ENABLED
from minio.versioningconfig import VersioningConfig, SUSPENDED

import re
import urllib3
Expand Down Expand Up @@ -175,6 +182,12 @@ def get_rw_statements(bucket_name):
}
]

def set_bucket_versioning(client, bucket_name, bucket_versioning):
if bucket_versioning == "enabled":
client.set_bucket_versioning(bucket_name, VersioningConfig(ENABLED))
if bucket_versioning == "suspended":
client.set_bucket_versioning(bucket_name, VersioningConfig(SUSPENDED))

def main():
exit_message = dict(failed=False)

Expand All @@ -187,6 +200,7 @@ def main():
secret_key=dict(required=True, type="str"),
state=dict(required=False, type="str", default="present", choices=["absent","present"]),
policy=dict(required=False, type="str", choices=["read-only","write-only","read-write"]),
versioning=dict(required=False, type="str", choices=["suspended","enabled"]),
validate_certs=dict(required=False, type="bool", default=True),
object_lock=dict(required=False, type="bool", default=False)
),
Expand All @@ -196,6 +210,7 @@ def main():

bucket_name = module.params["name"]
policy = module.params["policy"]
bucket_versioning = module.params["versioning"]
m = REMatcher(module.params["s3_url"])

if m.match(r"^http://([\w./:-]+)"):
Expand Down Expand Up @@ -264,6 +279,7 @@ def main():
exit_message = dict(failed=False, changed=True)
else:
exit_message = dict(failed=False, changed=False)
set_bucket_versioning(client, bucket_name, bucket_versioning)

except urllib3.exceptions.MaxRetryError:
exit_message = dict(
Expand Down
8 changes: 8 additions & 0 deletions molecule/cluster/converge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
minio_url: "https://{{ server_hostname }}:{{ minio_server_port }}"
minio_validate_certificate: false
minio_prometheus_bearer_token: true
minio_pip_environment_vars:
PIP_BREAK_SYSTEM_PACKAGES: "1"
minio_server_datadirs:
- '/mnt/disk/minio'
minio_server_cluster_nodes:
Expand All @@ -45,6 +47,12 @@
policy: private
- name: bucket4
policy: private
- name: bucket5
policy: read-write
versioning: enabled
- name: bucket6
policy: read-write
versioning: suspended
minio_users:
- name: user1
password: supers1cret0
Expand Down
6 changes: 6 additions & 0 deletions molecule/site-replication/converge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,12 @@
- name: bucket3
policy: private
object_lock: true
- name: bucket5
policy: read-write
versioning: enabled
- name: bucket6
policy: read-write
versioning: suspended
replication_sites:
- name: minio1
url: "http://minio1.ricsanfre.com:9091"
Expand Down
6 changes: 6 additions & 0 deletions molecule/tls/converge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,12 @@
policy: private
- name: bucket4
policy: private
- name: bucket5
policy: read-write
versioning: enabled
- name: bucket6
policy: read-write
versioning: suspended
minio_users:
- name: user1
password: supers1cret0
Expand Down
1 change: 1 addition & 0 deletions tasks/create_minio_buckets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
secret_key: "{{ minio_root_password }}"
state: present
policy: "{{ omit if bucket.policy == 'private' else bucket.policy }}"
versioning: "{{ bucket.versioning | default(omit) }}"
validate_certs: false
object_lock: "{{ bucket.object_lock | default(false) }}"
vars:
Expand Down

0 comments on commit 5eb2497

Please sign in to comment.