diff --git a/Deployment/all-in-one/Docker/tasks/main.yaml b/Deployment/all-in-one/Docker/tasks/main.yaml new file mode 100644 index 0000000000000000000000000000000000000000..10c93bb0d6ae263eda4998470d894a50be677683 --- /dev/null +++ b/Deployment/all-in-one/Docker/tasks/main.yaml @@ -0,0 +1,101 @@ +# Uninstall old Docker +- name: Uninstall old versions of docker + become: yes + apt: + name: ['docker', 'docker-engine', 'docker.io'] + state: absent + +# Install Docker dependencies +- name: Install dependencies + become: yes + apt: + name: ['apt-transport-https', 'ca-certificates', 'curl', 'python-setuptools', 'software-properties-common'] + state: latest + install_recommends: no + update_cache: yes + environment: "{{ proxy_env }}" + +# Add Docker repository key +- name: Add Docker apt repository key + become: yes + apt_key: + url: https://download.docker.com/linux/ubuntu/gpg + state: present + environment: "{{ proxy_env }}" + +# Add Docker repository +- name: Add Docker apt repository and update apt cache + become: yes + apt_repository: + repo: "deb https://download.docker.com/linux/{{ ansible_distribution|lower }} {{ ansible_distribution_release }} stable" + mode: '644' + update_cache: yes + state: present + environment: "{{proxy_env}}" + +# Install Docker +- name: Install docker + become: yes + apt: + name: docker.io + state: latest + install_recommends: no + update_cache: yes + environment: "{{proxy_env}}" + +# Install Docker compose +- name: Install docker-compose + tags: 'docker' + become: yes + pip: + name: ['docker-compose'] + state: latest + environment: "{{proxy_env}}" + +# Make sure systemd directory exists +- name: Make sure that systemd directory exists + file: + path: '/etc/systemd/system' + state: 'directory' + owner: 'root' + group: 'root' + mode: '0755' + +# Make sure docker.service.d directory exists +- name: Make sure that docker.service.d directory exists + file: + path: '/etc/systemd/system/docker.service.d' + state: 'directory' + owner: 'root' + group: 'root' + mode: '0755' + become: yes + +# Configure Docker system proxy +- name: Configure Docker proxy + template: + src: 'http-proxy.conf.j2' + dest: '/etc/systemd/system/docker.service.d/http-proxy.conf' + owner: 'root' + group: 'root' + mode: '0644' + when: (ansible_service_mgr == 'systemd' and + (proxy_env.http_proxy is defined or proxy_env.https_proxy is defined)) + become: yes + +# Restart systemd daemons +- name: Reload systemd daemons + command: systemctl daemon-reload + become: yes + +# Restart Docker daemon +- name: Restart docker daemon + command: systemctl restart docker + become: yes + +# Restart Docker daemon +- name: Restart docker + service: + name: docker + state: restarted + become: yes \ No newline at end of file diff --git a/Deployment/playbooks/roles/frontend/tasks/main.yaml b/Deployment/playbooks/roles/frontend/tasks/main.yaml index 84aefbefff9e327d72127d62a87a8f1d15f9bc51..9aca3b15acc17a3ee0f9b1948d8accb76dcbf06f 100644 --- a/Deployment/playbooks/roles/frontend/tasks/main.yaml +++ b/Deployment/playbooks/roles/frontend/tasks/main.yaml @@ -1,5 +1,41 @@ -- name: Set up frontend application - hosts: frontend-instance +# Clone source code repository +- name: Clone the code repository into home directory + git: + repo: "https://gitlab.eng.unimelb.edu.au/smaabi/unimelb-comp90024-2023-grp-58.git" + dest: ~/cluster-and-cloud-computing-assignment-2 + environment: "{{ proxy_env }}" become: true - tasks: - - name: \ No newline at end of file + +# Create Docker config directory +- name: Make sure that Docker config directory exists + become: yes + file: + path: '~/.docker' + state: 'directory' + +# Set Docker proxy for University of Melbourne Research Cloud +- name: Ensure Docker client proxy settings are present on the server + become: yes + copy: + content: "{{ docker_proxy_settings }}" + dest: ~/.docker/config.json + +# Build Docker image for web frontend and web backend +- name: Configure compose + become: yes + template: + src: "{{ playbook_dir }}/../web/docker-compose.yaml.j2" + dest: "~/cluster-and-cloud-computing-assignment-2/web/docker-compose.yaml" + owner: "{{ ansible_user }}" + group: "{{ ansible_user }}" + +# Run Docker compose to activate web frontend and web backend +- name: Run docker compose + become: yes + docker_compose: + project_src: "~/cluster-and-cloud-computing-assignment-2/web/" + pull: false + build: yes + state: present + remove_orphans: no + recreate: always \ No newline at end of file diff --git a/Deployment/playbooks/roles/openstack-security-group/tasks/main.yaml b/Deployment/playbooks/roles/openstack-security-group/tasks/main.yaml index 65e68771fcab7733f37b2e64a4dedc62e242afe4..adb884de1f877bdd047e16ac08ea83da0fe3723c 100644 --- a/Deployment/playbooks/roles/openstack-security-group/tasks/main.yaml +++ b/Deployment/playbooks/roles/openstack-security-group/tasks/main.yaml @@ -5,19 +5,6 @@ name: "{{ item.name }}" description: "{{ item.description }}" state: present - security_group_rules: - - ether_type: IPv6 - protocol: any - direction: egress - port_range_min: 1 - port_range_max: 65535 - remote_ip_prefix: ::/0 - - ether_type: IPv4 - protocol: any - direction: egress - port_range_min: 1 - port_range_max: 65535 - remote_ip_prefix: 0.0.0.0/0 loop: "{{ security_groups }}" - name: Create a list of security group names diff --git a/Deployment/playbooks/vars/comm.yaml b/Deployment/playbooks/vars/comm.yaml index 2588ae592d22964e638d867c0840087df3c644d6..fa42b686dabb5a52434e39470acab87b988290a1 100644 --- a/Deployment/playbooks/vars/comm.yaml +++ b/Deployment/playbooks/vars/comm.yaml @@ -19,18 +19,36 @@ volumes: # Security group security_groups: - - name: ssh - description: "security group for SSH access" + - name: ssh_access + description: "ssh access" protocol: tcp port_range_min: 22 port_range_max: 22 remote_ip_prefix: 0.0.0.0/0 - - name: demo_http - description: "security group for HTTP" + - name: couchdb_access + description: "couchdb access" + protocol: tcp + port_range_min: 5984 + port_range_max: 5984 + remote_ip_prefix: 0.0.0.0/0 + - name: http_access + description: "HTTP access" protocol: tcp port_range_min: 80 port_range_max: 80 remote_ip_prefix: 0.0.0.0/0 + - name: intra_cluster_communication + description: "comm access" + protocol: tcp + port_range_min: 9100 + port_range_max: 9200 + remote_ip_prefix: 0.0.0.0/0 + - name: intra_cluster_communication_1 + description: "comm access 1" + protocol: tcp + port_range_min: 4369 + port_range_max: 4369 + remote_ip_prefix: 0.0.0.0/0 # Instance master-instance: