#  Copyright 2022 Dell Inc. or its subsidiaries. All Rights Reserved.
#
#  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.
---

- name: Initial cobbler setup
  hosts: localhost
  connection: local
  gather_facts: false
  tasks:
  - name: Inside cobbler container
    debug:
      msg: "Hiii! I am cobbler"

  - name: Run script
    shell: sh ./mkgrub.sh
    args:
      chdir: /usr/share/cobbler/bin
    changed_when: false

  - name: Add load_wsgi
    blockinfile:
      state: present
      insertbefore: '# LoadModule foo_module modules/mod_foo.so'
      dest: /etc/httpd/conf/httpd.conf
      block: |
        LoadModule wsgi_module modules/mod_wsgi_python3.so
        LoadModule proxy_module modules/mod_proxy.so

  - name: Add settings to http
    shell: echo "LoadModule wsgi_module modules/mod_wsgi_python3.so" >/etc/httpd/conf.d/wsgi.conf
    changed_when: false

  - name: Enable cobbler
    command: systemctl enable {{ item }}
    with_items:
      - cobblerd
      - tftp
    changed_when: false

  - name: Restart httpd
    service:
      name: "{{ item }}"
      state: restarted
    loop:
      - httpd
      - cobblerd

  - name: Start services
    service:
      name: "{{ item }}"
      state: started
    loop:
      - cobblerd
      - tftp

  - name: Adding curl
    shell: export PATH="/usr/bin/curl:$PATH"

  - name: Run import command
    command: cobbler import --arch=x86_64 --path=/mnt/{{ provision_os }} --name="{{ provision_os }}"
    changed_when: false

  - name: Kickstart profile - centos
    copy:
      src: "/root/centos7.ks"
      dest: "/var/lib/cobbler/templates/sample.ks"
      mode: "{{ file_perm }}"
    tags: install
    when: provision_os == "centos"

  - name: Kickstart profile - rocky
    copy:
      src: "/root/rocky8.ks"
      dest: "/var/lib/cobbler/templates/sample.ks"
      mode: "{{ file_perm }}"
    tags: install
    when: provision_os == "rocky"

  - name: Pxe menu
    copy:
      src: "/root/omnia/control_plane/roles/provision_cobbler/files/menu.yml"
      dest: "/etc/cobbler/boot_loader_conf/pxedefault.template"
      mode: "{{ file_perm }}"
    tags: install

  - name: Assign default grub option
    replace:
      path: "/var/lib/cobbler/grub_config/grub/grub.cfg"
      regexp: "^set default='local'"
      replace: "set default='1'"
    tags: install

  - name: Assign default grub timeout
    replace:
      path: "/var/lib/cobbler/grub_config/grub/grub.cfg"
      regexp: '^set timeout=80'
      replace: 'set timeout=10'
    tags: install

  - name: Syncing of cobbler
    command: cobbler sync
    changed_when: false

  - name: Restart cobblerd, http, xinetd and dhcpd
    service:
      name: "{{ item }}"
      state: restarted
    loop:
      - cobblerd
      - httpd
      - xinetd
      - dhcpd

  - name: Fetch ansible-playbook path
    command: whereis ansible-playbook
    changed_when: false
    register: ansible_playbook_path

  - name: Add tftp cron job
    cron:
      name: Start tftp service
      minute: "*"
      job: "{{ ansible_playbook_path.stdout.split(' ')[1] }} /root/tftp.yml"

  - name: Add inventory cron job
    cron:
      name: Create inventory
      minute: "*/5"
      job: "{{ ansible_playbook_path.stdout.split(' ')[1] }} /root/inventory_creation.yml"