diff --git a/files/homepage/docker-compose.yml b/files/homepage/docker-compose.yml.j2 similarity index 52% rename from files/homepage/docker-compose.yml rename to files/homepage/docker-compose.yml.j2 index ff23d44..2fbca3a 100644 --- a/files/homepage/docker-compose.yml +++ b/files/homepage/docker-compose.yml.j2 @@ -1,7 +1,7 @@ services: homepage_app: - image: "${WEB_SERVICE_IMAGE}" + image: "{{ registry_homepage_web_image }}" container_name: homepage_app - ports: - - "127.0.0.1:${WEB_SERVICE_PORT}:80" restart: unless-stopped + ports: + - "127.0.0.1:{{ homepage_port }}:80" diff --git a/playbook-app-homepage.yml b/playbook-app-homepage.yml deleted file mode 100644 index efedee7..0000000 --- a/playbook-app-homepage.yml +++ /dev/null @@ -1,64 +0,0 @@ ---- -- name: "Deploy homepage application" - hosts: all - - vars_files: - - vars/ports.yml - - vars/vars.yml - - vars: - app_name: "homepage" - base_dir: "/home/{{ primary_user }}/applications/{{ app_name }}/" - docker_registry_prefix: "cr.yandex/crplfk0168i4o8kd7ade" - homepage_web_image: "{{ homepage_web_image | default(omit) }}" - - tasks: - - name: "Check is web service imape passed" - ansible.builtin.assert: - that: - - "homepage_web_image is defined" - fail_msg: 'You must pass variable "homepage_web_image"' - - - name: "Create full image name with container registry" - ansible.builtin.set_fact: - registry_homepage_web_image: "{{ (docker_registry_prefix, homepage_web_image) | path_join }}" - - - name: "Push web service image to remote registry" - community.docker.docker_image: - state: present - source: local - name: "{{ homepage_web_image }}" - repository: "{{ registry_homepage_web_image }}" - push: true - delegate_to: 127.0.0.1 - - - name: "Create application directories" - ansible.builtin.file: - path: "{{ item }}" - state: "directory" - mode: "0755" - loop: - - "{{ base_dir }}" - - - name: "Copy application files" - ansible.builtin.copy: - src: "{{ item }}" - dest: "{{ base_dir }}" - mode: "0644" - loop: - - "./files/{{ app_name }}/docker-compose.yml" - - - name: "Set up environment variables for application" - ansible.builtin.template: - src: "env.j2" - dest: '{{ (base_dir, ".env") | path_join }}' - mode: "0644" - vars: - env_dict: - WEB_SERVICE_IMAGE: "{{ registry_homepage_web_image }}" - WEB_SERVICE_PORT: "{{ homepage_port }}" - - - name: "Run application with docker compose" - community.docker.docker_compose_v2: - project_src: "{{ base_dir }}" - state: "present" diff --git a/playbook-homepage.yml b/playbook-homepage.yml new file mode 100644 index 0000000..936ca47 --- /dev/null +++ b/playbook-homepage.yml @@ -0,0 +1,74 @@ +--- +# Play 1: Setup environment for the application +- name: "Setup environment for homepage application" + hosts: all + vars_files: + - vars/ports.yml + - vars/vars.yml + - vars/homepage.yml + tags: + - setup + tasks: + - name: "Create user and environment" + ansible.builtin.import_role: + name: owner + vars: + owner_name: "{{ app_user }}" + owner_extra_groups: + - "docker" + owner_ssh_keys: + - "{{ lookup('file', 'files/av_id_rsa.pub') }}" + owner_env: + PROJECT_NAME: "{{ app_name }}" + DOCKER_PREFIX: "{{ app_name }}" + IMAGE_PREFIX: "{{ app_name }}" + CONTAINER_PREFIX: "{{ app_name }}" + USER_UID: "{{ user_create_result.uid }}" + USER_GID: "{{ user_create_result.group }}" + + - name: "Login to yandex docker registry." + ansible.builtin.script: + cmd: "files/yandex-docker-registry-auth.sh" + +# Play 2: Deploy the application +- name: "Deploy homepage application" + hosts: all + vars_files: + - vars/ports.yml + - vars/vars.yml + - vars/homepage.yml + tags: + - deploy + tasks: + - name: "Check is web service image passed" + ansible.builtin.assert: + that: + - "homepage_web_image is defined" + fail_msg: 'You must pass variable "homepage_web_image"' + + - name: "Create full image name with container registry" + ansible.builtin.set_fact: + registry_homepage_web_image: "{{ (docker_registry_prefix, homepage_web_image) | path_join }}" + + - name: "Push web service image to remote registry" + community.docker.docker_image: + state: present + source: local + name: "{{ homepage_web_image }}" + repository: "{{ registry_homepage_web_image }}" + push: true + delegate_to: 127.0.0.1 + + - name: "Copy docker compose file" + ansible.builtin.template: + src: "./files/{{ app_name }}/docker-compose.yml.j2" + dest: "{{ base_dir }}/docker-compose.yml" + owner: "{{ app_user }}" + group: "{{ app_user }}" + mode: "0640" + + - name: "Run application with docker compose" + community.docker.docker_compose_v2: + project_src: "{{ base_dir }}" + state: "present" + remove_orphans: true diff --git a/vars/homepage.yml b/vars/homepage.yml new file mode 100644 index 0000000..e8f501d --- /dev/null +++ b/vars/homepage.yml @@ -0,0 +1,8 @@ +app_name: "homepage" +app_user: "{{ app_name }}" +base_dir: "/home/{{ app_name }}" +docker_registry_prefix: "cr.yandex/crplfk0168i4o8kd7ade" + +env_deploy_file: "{{ (base_dir, '.env.deploy') | path_join }}" + +homepage_web_image: "{{ homepage_web_image | default(omit) }}"