diff --git a/playbooks/roles/sysadmin_exercise/files/sysadmin-exercise.service b/playbooks/roles/sysadmin_exercise/files/sysadmin-exercise.service new file mode 100644 index 0000000..905c633 --- /dev/null +++ b/playbooks/roles/sysadmin_exercise/files/sysadmin-exercise.service @@ -0,0 +1,13 @@ +[Unit] +Description = Sysadmin exercise docker container +Requires = docker.service +After = docker.service + +[Service] +WorkingDirectory=/opt/sysadmin-exercise +Type=simple +ExecStart=docker compose up +ExecStop=docker compose down + +[Install] +WantedBy=multi-user.target diff --git a/playbooks/roles/sysadmin_exercise/handlers/main.yml b/playbooks/roles/sysadmin_exercise/handlers/main.yml new file mode 100644 index 0000000..05178df --- /dev/null +++ b/playbooks/roles/sysadmin_exercise/handlers/main.yml @@ -0,0 +1,16 @@ +--- + +- name: Build docker container + ansible.builtin.command: + chdir: /opt/sysadmin-exercise + argv: + - docker + - build + - '-t' + - sysadmin-exercise:latest + - '.' + +- name: Restart container + ansible.builtin.systemd_service: + name: sysadmin-exercise.service + state: restarted diff --git a/playbooks/roles/sysadmin_exercise/tasks/main.yml b/playbooks/roles/sysadmin_exercise/tasks/main.yml new file mode 100644 index 0000000..55fe95a --- /dev/null +++ b/playbooks/roles/sysadmin_exercise/tasks/main.yml @@ -0,0 +1,79 @@ +--- + +- name: Update system + ansible.builtin.apt: + update_cache: yes + upgrade: yes + +- name: Install dependencies + ansible.builtin.apt: + name: + - apt-transport-https + - ca-certificates + - curl + - gnupg-agent + - software-properties-common + state: present + +- name: Docker GPG key + ansible.builtin.apt_key: + url: > + https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg + state: present + +- name: Repository docker + ansible.builtin.apt_repository: + repo: > + deb https://download.docker.com/linux/{{ ansible_distribution | lower }} + {{ ansible_distribution_release }} stable + state: present + +- name: Install docker + ansible.builtin.apt: + name: + - docker-ce + - docker-ce-cli + - containerd.io + state: present + update_cache: true + +- name: Create directory + ansible.builtin.file: + path: /opt/sysadmin-exercise + owner: root + group: root + mode: "0700" + +- name: Clone git repo + ansible.builtin.git: + accept_newhostkey: true + dest: /opt/sysadmin-exercise + repo: https://github.com/utahstate/sysadmin-exercise + notify: + - Build docker container + - Restart container + +- name: Deploy docker-compose file + ansible.builtin.template: + src: compose.yml.j2 + dest: /opt/sysadmin-exercise/compose.yml + owner: root + group: root + mode: "0600" + notify: Restart container + +- name: Deploy service file + ansible.builtin.copy: + src: sysadmin-exercise.service + dest: /etc/systemd/system/sysadmin-exercise.service + owner: root + group: root + mode: "0644" + notify: Restart container + +- name: Enable service + ansible.builtin.systemd_service: + name: sysadmin-exercise.service + enabled: yes + notify: Restart container + diff --git a/playbooks/roles/sysadmin_exercise/templates/compose.yml.j2 b/playbooks/roles/sysadmin_exercise/templates/compose.yml.j2 new file mode 100644 index 0000000..2427142 --- /dev/null +++ b/playbooks/roles/sysadmin_exercise/templates/compose.yml.j2 @@ -0,0 +1,16 @@ +--- + +services: + server: + image: sysadmin-exercise:latest + networks: + - webapp + restart: always + container_name: sysadmin_exercise_server + hostname: server + command: ./start-server.sh + ports: + - 8888:8888 + +networks: + webapp: