---
# tasks file for test_s3
# ============================================================
- name: test create bucket
  s3:
    bucket: "{{ bucket_name }}"
    mode: create
    aws_access_key: "{{ ec2_access_key }}"
    aws_secret_key: "{{ ec2_secret_key }}"
    security_token: "{{security_token}}"
  register: result
- name: assert changed is True
  assert:
    that:
      - result.changed == True
# ============================================================
- name: trying to create a bucket name that already exists
  s3:
    bucket: "{{ bucket_name }}"
    mode: create
    aws_access_key: "{{ ec2_access_key }}"
    aws_secret_key: "{{ ec2_secret_key }}"
    security_token: "{{security_token}}"
  register: result
- name: assert changed is False since the bucket already exists
  assert:
    that:
      - result.changed == False
# ============================================================
- name: create temporary file object to put in a bucket
  tempfile:
  register: tmp1
- name: make random contents
  set_fact:
      content: "{{ lookup('password', '/dev/null chars=ascii_letters,digits,hexdigits,punctuation') }}"

- name: give temporary file data
  copy:
    content: "{{ content }}"
    dest: "{{ tmp1.path }}"
- name: get the stat of the file
  stat:
    path: "{{ tmp1.path }}"
    get_checksum: yes
  register: file1stat
# ============================================================
- name: test putting an object in the bucket
  s3:
    bucket: "{{ bucket_name }}"
    mode: put
    src: "{{ tmp1.path }}"
    object: delete.txt
    aws_access_key: "{{ ec2_access_key }}"
    aws_secret_key: "{{ ec2_secret_key }}"
    security_token: "{{security_token}}"
  retries: 3
  delay: 3
  register: result
- name: assert object exists
  assert:
    that:
      - result.changed == True
      - result.msg == "PUT operation complete"
# ============================================================
- name: create a second temp file to download the object from the bucket
  tempfile:
  register: tmp2
- name: test get object
  s3:
    bucket: "{{ bucket_name }}"
    mode: get
    dest: "{{ tmp2.path }}"
    object: delete.txt
    security_token: "{{security_token}}"
    aws_access_key: "{{ ec2_access_key }}"
    aws_secret_key: "{{ ec2_secret_key }}"
  retries: 3
  delay: 3
  register: result
  until: "result.msg == 'GET operation complete'"
- name: get the stat of the file so we can compare the checksums
  stat:
    path: "{{ tmp2.path }}"
    get_checksum: yes
  register: file2stat
- name: assert checksums are the same
  assert:
    that:
      - file1stat.stat.checksum == file2stat.stat.checksum
# ============================================================
- name: test geturl of the object
  s3:
    bucket: "{{ bucket_name }}"
    mode: geturl
    object: delete.txt
    security_token: "{{security_token}}"
    aws_access_key: "{{ ec2_access_key }}"
    aws_secret_key: "{{ ec2_secret_key }}"
  retries: 3
  delay: 3
  register: result
  until: result.changed
- name: assert we have the object's url
  assert:
    that:
      - "'Download url:' in result.msg"
      - result.changed == True
# ============================================================
- name: test getstr of the object
  s3:
    bucket: "{{ bucket_name }}"
    mode: getstr
    object: delete.txt
    security_token: "{{security_token}}"
    aws_access_key: "{{ ec2_access_key }}"
    aws_secret_key: "{{ ec2_secret_key }}"
  retries: 3
  delay: 3
  register: result
- name: assert that we have the object's contents
  assert:
    that:
      - result.msg == "GET operation complete"
      - result.contents == content
# ============================================================
- name: test list to get all objects in the bucket
  s3:
    bucket: "{{ bucket_name }}"
    mode: list
    security_token: "{{security_token}}"
    aws_access_key: "{{ ec2_access_key }}"
    aws_secret_key: "{{ ec2_secret_key }}"
  retries: 3
  delay: 3
  register: result
- name: assert that the keys are correct
  assert:
    that:
      - "'delete.txt' in result.s3_keys"
      - result.msg == "LIST operation complete"
# ============================================================
- name: test delobj to just delete an object in the bucket
  s3:
    bucket: "{{ bucket_name }}"
    mode: delobj
    object: delete.txt
    security_token: "{{security_token}}"
    aws_access_key: "{{ ec2_access_key }}"
    aws_secret_key: "{{ ec2_secret_key }}"
  retries: 3
  delay: 3
  register: result
- name: assert that delete.txt is no longer an object in the bucket deleteme
  assert:
    that:
      - "'Object deleted from bucket' in result.msg"
      - result.changed == True
# ============================================================
- name: test delete bucket
  s3:
    bucket: "{{ bucket_name }}"
    mode: delete
    security_token: "{{security_token}}"
    aws_access_key: "{{ ec2_access_key }}"
    aws_secret_key: "{{ ec2_secret_key }}"
  register: result
  retries: 3
  delay: 3
  until: result.changed
- name: assert that changed is True
  assert:
    that:
      - result.changed == True
# ============================================================
- name: delete temporary file 1
  file:
    state: absent
    path: "{{ tmp1.path }}"
- name: delete temporary file 2
  file:
    state: absent
    path: "{{ tmp2.path }}"
# ============================================================
- name: test create a bucket with a dot in the name
  s3:
    bucket: "{{ bucket_name + '.bucket' }}"
    mode: create
    security_token: "{{security_token}}"
    aws_access_key: "{{ ec2_access_key }}"
    aws_secret_key: "{{ ec2_secret_key }}"
  register: result
- name: assert that changed is True
  assert:
    that:
      - result.changed == True
# ============================================================
- name: test delete a bucket with a dot in the name
  s3:
    bucket: "{{ bucket_name + '.bucket' }}"
    mode: delete
    security_token: "{{security_token}}"
    aws_access_key: "{{ ec2_access_key }}"
    aws_secret_key: "{{ ec2_secret_key }}"
  register: result
- name: assert that changed is True
  assert:
    that:
      - result.changed == True
# ============================================================
- name: test delete a nonexistent bucket
  s3:
    bucket: "{{ bucket_name + '.bucket' }}"
    mode: delete
    security_token: "{{security_token}}"
    aws_access_key: "{{ ec2_access_key }}"
    aws_secret_key: "{{ ec2_secret_key }}"
  register: result
- name: assert that changed is False
  assert:
    that:
      - result.changed == False
# ============================================================
