---
# Copyright 2017-present Open Networking Foundation
#
# Licensed 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

  vars:
    tryluca:
      - one
      - two
      - three

  tasks:
    # Edit all.yml variable file

    - name: Add default Python interpreter
      lineinfile:
        path: inventories/{{ deployment_name }}/group_vars/all.yml
        line: 'ansible_python_interpreter: /usr/bin/python2.7'

    - name: Add default Ansible user
      lineinfile:
        path: inventories/{{ deployment_name }}/group_vars/all.yml
        line: 'ansible_user: cord'

    - name: Give sudoer permissions
      lineinfile:
        path: inventories/{{ deployment_name }}/group_vars/all.yml
        line: 'ansible_become: true'

    # Edit k8s-cluster.yml variable file
    - name: Set Docker DNS servers strict to false
      lineinfile:
        path: inventories/{{ deployment_name }}/group_vars/k8s-cluster.yml
        regexp: '^#\s*docker_dns_servers_strict.*$'
        line: 'docker_dns_servers_strict: false'

    - name: Set Helm enabled to true
      lineinfile:
        path: inventories/{{ deployment_name }}/group_vars/k8s-cluster.yml
        regexp: '^helm_enabled.*$'
        line: 'helm_enabled: true'

    - name: Set kubeconfig localhost to true
      lineinfile:
        path: inventories/{{ deployment_name }}/group_vars/k8s-cluster.yml
        regexp: '^#\s*kubeconfig_localhost.*$'
        line: 'kubeconfig_localhost: true'

    - name: Allow insecure registry access
      lineinfile:
        path: inventories/{{ deployment_name }}/group_vars/k8s-cluster.yml
        regexp: 'docker_options'
        line: "docker_options: \"{{ item }} --insecure-registry={{ '{{' }} kube_service_addresses {{ '}}' }} --graph={{ '{{' }} docker_daemon_graph {{ '}}' }}  {{ '{{' }} docker_log_opts {{ '}}' }}\""
      with_items: "{{ k8s_nodes.split(' ') | map('regex_replace', '(.*)', '--insecure-registry=\\1/32') | join(' ') }}"
