diff --git a/README.md b/README.md
index c2300ca..e85aa11 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@
2. Необходимо развернуть n количество ВМ с атрибутом прерываемый
2. Развернуть необходимые подсети
3. Создать публичный ssh ключ и приатачить к ВМ
-4. Создать загружаемый диск с ubuntu 20.04
+4. Создать загружаемый диск с ubuntu 22.04
5. Создать flavor 1CPU 2 gb RAM, Диск объем 10гб на каждую вм (базовый hdd)
6. Для каждой ВМ зафиксировать публичный ip адрес
7. В output зафиксировать вывод ip адрес и команду ssh для полключения
diff --git a/ansible/docker-install/tasks/main.yml b/ansible/docker-install/tasks/main.yml
index 8d58b38..95128f1 100644
--- a/ansible/docker-install/tasks/main.yml
+++ b/ansible/docker-install/tasks/main.yml
@@ -1,42 +1,67 @@
----
-# tasks file for docker-install
-- name: Install aptitude
- ansible.builtin.apt:
- name: aptitude
- state: latest
- update_cache: true
+#======================= BASIC PACKAGES ============================
+- name: update apt list
+ apt:
+ update_cache: yes
-- name: Install required system packages
+- name: Install basic packages
ansible.builtin.apt:
- pkg:
+ name:
- apt-transport-https
- ca-certificates
- curl
- - software-properties-common
+ - python3
- python3-pip
- - virtualenv
- - python3-setuptools
- state: latest
- update_cache: true
+ state: present
+
+#======================= GPG KEYS ============================
+
-- name: Add Docker GPG apt Key
+- name: Add Docker GPG key
ansible.builtin.apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
-- name: Add Docker Repository
+#======================= ADD REPOS ============================
+
+- name: Add Docker repository
ansible.builtin.apt_repository:
- repo: deb https://download.docker.com/linux/ubuntu jammy stable
+ repo: 'deb [arch=amd64] https://download.docker.com/linux/ubuntu jammy stable'
state: present
+ update_cache: yes
+
+#======================= INSTALL ADDITIONAL PACKAGES ============================
-- name: Update apt and install docker-io
+- name: Install additional packages
ansible.builtin.apt:
- name: docker.io
- state: latest
+ name:
+ - libc6
+ - docker-ce
+ - docker-ce-cli
+ - containerd.io
+ - docker-buildx-plugin
+ - docker-compose-plugin
+ state: present
update_cache: true
-- name: Install Docker Compose
+#- name: Install Docker Compose
+# ansible.builtin.get_url:
+# url: "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-{{ ansible_system | lower }}-{{ ansible_architecture }}"
+# dest: /usr/local/bin/docker-compose
+# mode: '0755'
+#
+- name: Install docker python packages
ansible.builtin.pip:
name:
- - urllib3
- - docker-compose
\ No newline at end of file
+ - docker==6.1.3.
+ - docker-compose==1.29.2
+ - requests==2.28.1
+ - urllib3==1.26.18
+#
+##======================= DOCKER ============================
+
+
+- name: Enable and start Docker service
+ ansible.builtin.systemd:
+ name: docker
+ enabled: yes
+ state: started
diff --git a/ansible/docker-service/tasks/main.yml b/ansible/docker-service/tasks/main.yml
index cd01e22..78695d8 100644
--- a/ansible/docker-service/tasks/main.yml
+++ b/ansible/docker-service/tasks/main.yml
@@ -22,5 +22,5 @@
group: root
- name: Start containers
- docker_compose:
+ community.docker.docker_compose:
project_src: /opt/service/compose
diff --git a/assets/net1.png b/assets/net1.png
new file mode 100644
index 0000000..46761a1
Binary files /dev/null and b/assets/net1.png differ
diff --git a/assets/ping.png b/assets/ping.png
new file mode 100644
index 0000000..5cc2b4d
Binary files /dev/null and b/assets/ping.png differ
diff --git a/assets/todo_app.png b/assets/todo_app.png
new file mode 100644
index 0000000..57603fc
Binary files /dev/null and b/assets/todo_app.png differ
diff --git a/forVM/inventory.ini b/forVM/inventory.ini
new file mode 100644
index 0000000..2719e60
--- /dev/null
+++ b/forVM/inventory.ini
@@ -0,0 +1,13 @@
+[db]
+server ansible_host=192.168.56.11 ansible_user=me2
+
+[app]
+client ansible_host=192.168.56.12 ansible_user=me3
+
+[db:vars]
+ansible_ssh_private_key_file=/home/me1/.ssh/id_ed25519
+ansible_become=true
+
+[app:vars]
+ansible_ssh_private_key_file=/home/me1/.ssh/id_ed25519
+ansible_become=true
\ No newline at end of file
diff --git a/forVM/playbook.yml b/forVM/playbook.yml
new file mode 100644
index 0000000..aa67136
--- /dev/null
+++ b/forVM/playbook.yml
@@ -0,0 +1,9 @@
+- hosts: db
+ become: yes
+ roles:
+ - mysql
+
+- hosts: app
+ become: yes
+ roles:
+ - todo
\ No newline at end of file
diff --git a/forVM/roles/mysql/tasks/main.yml b/forVM/roles/mysql/tasks/main.yml
new file mode 100644
index 0000000..fede621
--- /dev/null
+++ b/forVM/roles/mysql/tasks/main.yml
@@ -0,0 +1,28 @@
+- name: Install pip for Python3
+ apt:
+ name: python3-pip
+ state: present
+ update_cache: true
+
+- name: Install Docker Python module
+ pip:
+ name: docker
+ executable: pip3
+
+- name: Install Docker
+ apt:
+ name: docker.io
+ state: present
+ update_cache: true
+
+- name: Start MySQL container
+ docker_container:
+ name: mysql
+ image: mysql:5.7
+ state: started
+ restart_policy: always
+ ports:
+ - "3306:3306"
+ env:
+ MYSQL_ROOT_PASSWORD: password
+ MYSQL_DATABASE: todos
\ No newline at end of file
diff --git a/forVM/roles/todo/tasks/main.yml b/forVM/roles/todo/tasks/main.yml
new file mode 100644
index 0000000..fc174c5
--- /dev/null
+++ b/forVM/roles/todo/tasks/main.yml
@@ -0,0 +1,36 @@
+- name: Install pip for Python3
+ apt:
+ name: python3-pip
+ state: present
+ update_cache: true
+
+- name: Install Docker Python module
+ pip:
+ name: docker
+ executable: pip3
+
+- name: Install Docker
+ apt:
+ name: docker.io
+ state: present
+ update_cache: true
+
+- name: Download Docker-image of todo-app
+ docker_image:
+ name: antonaleks/101-todo-app
+ tag: latest
+ source: pull
+
+- name: Start todo-app container
+ docker_container:
+ name: todo
+ image: antonaleks/101-todo-app:latest
+ state: started
+ restart_policy: always
+ ports:
+ - "3000:80"
+ env:
+ DB_HOST: 192.168.56.11
+ DB_USER: root
+ DB_PASSWORD: password
+ DB_NAME: todos
\ No newline at end of file
diff --git a/preemptible_server/vars.tf b/preemptible_server/vars.tf
index 54f4975..16840e5 100644
--- a/preemptible_server/vars.tf
+++ b/preemptible_server/vars.tf
@@ -31,7 +31,7 @@ variable "server_volume_type" {
}
variable "server_image_name" {
- default = "Ubuntu 20.04 LTS 64-bit"
+ default = "Ubuntu 22.04 LTS 64-bit"
}
variable "server_preemptible_tag" {
diff --git a/report.md b/report.md
new file mode 100644
index 0000000..b36e135
--- /dev/null
+++ b/report.md
@@ -0,0 +1,137 @@
+# Отчёт по работе №3: Практика Ansible
+
+## Подготовка ВМ
+1. Как и в прошлых работах создаём 3 ВМ для работы.
+2. Как и в прошлых работах меняем на них hostname и user для удобства.
+3. Меняем настройки сетевых адаптеров:
+- на каждой машине оставляем **NAT** для выхода в сеть
+- на каждой машине добавляем **Host-Only** адаптер
+4. Через `netplan` задаём новые статические IP-адреса с одной подсетью для **Host-Only** адаптеров. По итогу имеем:
+- Машина A: `me1@192.168.56.10` - хост с **Ansible**
+- Машина B: `me2@192.168.56.11` - сервер для **MySQL**
+- Машина C: `me3@192.168.56.12` - клиент с **ToDo**
+Пример настроенной сети с машины A:
+
+
+
+5. После настройки сети устанавливаем между машинами **SSH-соединение**:
+```shell
+ssh-keygen -t ed25519 -C "ansible"
+ssh-copy-id -i ~/.ssh/id_ed25519.pub me2@192.168.56.11
+ssh-copy-id -i ~/.ssh/id_ed25519.pub me3@192.168.56.12
+```
+6. Проверяем **SSH-соединение** c хоста. Теперь можно установить ansible:
+```shell
+sudo apt update
+sudo apt install ansible -y
+```
+
+## Настройка Ansible
+1. Возьмём стандартную и рекомендуемую Ansible-структуру. В корневой папке проекта будет `ini` файл вместе с плейбуком и папка с ролями. Плейбук в свою очередь вызывает роли. В каждой роли (**todo** и **mysql**) будет свой `yml` файл с задачами (в папке **tasks**). Для удобства создаём все необходимые файлы локально, а затем копируем их через `scp` на хост с **Ansible**. *Папка проекта находится в репозитории под названием /forVM*.
+
+Структура проекта имеет вид:
+```shell
+forVM/
+├── inventory.ini # инвентори-файл с IP/хостами
+├── playbook.yml # основной плейбук, вызывает роли
+└── roles/
+ ├── mysql/
+ │ └── tasks/
+ │ └── main.yml # задачи для установки и запуска MySQL
+ └── todo/
+ └── tasks/
+ └── main.yml # задачи для todo-приложения
+```
+
+2. Определяем в плейбуке роли (**todo** и **mysql**) и создаём **tasks** для каждой из них.
+Задачи включают в себя установку необходимых зависимостей и запуск образов с выставленными env-переменными:
+
+- **MySQL**:
+```shell
+- name: Install pip for Python3
+ apt:
+ name: python3-pip
+ state: present
+ update_cache: true
+
+- name: Install Docker Python module
+ pip:
+ name: docker
+ executable: pip3
+
+- name: Install Docker
+ apt:
+ name: docker.io
+ state: present
+ update_cache: true
+
+- name: Start MySQL container
+ docker_container:
+ name: mysql
+ image: mysql:5.7
+ state: started
+ restart_policy: always
+ ports:
+ - "3306:3306"
+ env:
+ MYSQL_ROOT_PASSWORD: password
+ MYSQL_DATABASE: todos
+```
+
+- **ToDo**:
+```shell
+- name: Install pip for Python3
+ apt:
+ name: python3-pip
+ state: present
+ update_cache: true
+
+- name: Install Docker Python module
+ pip:
+ name: docker
+ executable: pip3
+
+- name: Install Docker
+ apt:
+ name: docker.io
+ state: present
+ update_cache: true
+
+- name: Download Docker-image of todo-app
+ docker_image:
+ name: antonaleks/101-todo-app
+ tag: latest
+ source: pull
+
+- name: Start todo-app container
+ docker_container:
+ name: todo
+ image: antonaleks/101-todo-app:latest
+ state: started
+ restart_policy: always
+ ports:
+ - "3000:80"
+ env:
+ DB_HOST: 192.168.56.11
+ DB_USER: root
+ DB_PASSWORD: password
+ DB_NAME: todos
+```
+
+3. Пересылаем папку на машину А:
+```shell
+scp -r "/c/Users/user/Documents/Education/Clouds/CloudPractice/forVM" me1@192.168.56.10:/home/me1/
+```
+4. Пробуем пропинговать машины B и C. Получаем в ответ `pong`, значит все настроено верно:
+
+
+
+## Тестирование и результаты
+
+1. Запускаем **playbook** на машине A. Во время установки всех файлов не должно быть ошибок.
+2. Перейдем к проверке **ToDo** приложения, перейдя по адресу: http://192.168.56.12:3000/
+
+
+
+Представленные скриншоты подтверждают работоспособность системы.
+Все необходимые файлы приложены в репозитории.