#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

- hosts: localhost
  tasks:
    - name: Delete container/Filesystem on ADLS Gen2
      azure_rm_storageblob:
        resource_group: "{{ resource_group }}"
        storage_account_name: "{{ item.split('@')[1].split('.')[0] }}"
        container: "{{ item.split('@')[0].split('://')[1] }}"
        state: absent
        force: yes
      loop: "{{ instance_volumes_adls.split(',') }}"
      when: cluster_type == 'azure' and use_adlsg2

    - name: Create container/Filesystem on ADLS Gen2
      azure_rm_storageblob:
        resource_group: "{{ resource_group }}"
        storage_account_name: "{{ item.split('@')[1].split('.')[0] }}"
        container: "{{ item.split('@')[0].split('://')[1] }}"
      retries: 20
      delay: 30
      register: result
      until: result is succeeded and (not result.changed or (result.changed and result.container|length > 0))
      loop: "{{ instance_volumes_adls.split(',')  }}"
      when: cluster_type == 'azure' and use_adlsg2
