Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,13 @@ dist/
build/
*.egg-info/

app_cpp/
app_cpp/

.terraform
.terraform.lock.hcl
terraform.tfstate
authorized_key.json
terraform.tfstate.backup
config.auto.tfvars

visits.txt
167 changes: 167 additions & 0 deletions ansible/ANSIBLE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
# Ansible lab
## Inventory
`ansible/inventory/yandex_cloud` file contains ip address for vm where I am installing docker and docker-compose

## Playbooks
`ansible/playbooks/dev/main.yml` runs the docker role which installs docker and docke-compose in the VM.

## commands output

### **`ansible-playbook playbooks/dev/main.yml --diff`**
```
PLAY [Run Docker role] ****************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************
ok: [51.250.102.185]

TASK [docker : Update apt] ************************************************************************************************
ok: [51.250.102.185]

TASK [docker : Install pip] ***********************************************************************************************
The following additional packages will be installed:
binutils binutils-common binutils-x86-64-linux-gnu build-essential cpp cpp-9
dpkg-dev fakeroot g++ g++-9 gcc gcc-10-base gcc-9 gcc-9-base
libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl
libasan5 libatomic1 libbinutils libc-dev-bin libc6 libc6-dev libcc1-0
libcrypt-dev libctf-nobfd0 libctf0 libdpkg-perl libexpat1 libexpat1-dev
libfakeroot libfile-fcntllock-perl libgcc-9-dev libgcc-s1 libgdbm-compat4
libgomp1 libisl22 libitm1 liblsan0 libmpc3 libmpfr6 libperl5.30
libpython3-dev libpython3.8 libpython3.8-dev libpython3.8-minimal
libpython3.8-stdlib libquadmath0 libstdc++-9-dev libstdc++6 libtsan0
libubsan1 linux-libc-dev make manpages-dev patch perl perl-base
perl-modules-5.30 python-pip-whl python3-dev python3-pkg-resources
python3-wheel python3.8 python3.8-dev python3.8-minimal zlib1g zlib1g-dev
Suggested packages:
binutils-doc cpp-doc gcc-9-locales debian-keyring g++-multilib
g++-9-multilib gcc-9-doc gcc-multilib autoconf automake libtool flex bison
gdb gcc-doc gcc-9-multilib glibc-doc git bzr libstdc++-9-doc make-doc
diffutils-doc perl-doc libterm-readline-gnu-perl
| libterm-readline-perl-perl libb-debug-perl liblocale-codes-perl
python-setuptools-doc python3.8-venv python3.8-doc binfmt-support
The following NEW packages will be installed:
binutils binutils-common binutils-x86-64-linux-gnu build-essential cpp cpp-9
dpkg-dev fakeroot g++ g++-9 gcc gcc-9 gcc-9-base libalgorithm-diff-perl
libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan5 libatomic1
libbinutils libc-dev-bin libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0
libctf0 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl
libgcc-9-dev libgdbm-compat4 libgomp1 libisl22 libitm1 liblsan0 libmpc3
libmpfr6 libperl5.30 libpython3-dev libpython3.8-dev libquadmath0
libstdc++-9-dev libtsan0 libubsan1 linux-libc-dev make manpages-dev patch
perl perl-modules-5.30 python-pip-whl python3-dev python3-pip python3-wheel
python3.8-dev zlib1g-dev
The following packages will be upgraded:
gcc-10-base libc6 libexpat1 libgcc-s1 libpython3.8 libpython3.8-minimal
libpython3.8-stdlib libstdc++6 perl-base python3-pkg-resources
python3-setuptools python3.8 python3.8-minimal zlib1g
14 upgraded, 56 newly installed, 0 to remove and 180 not upgraded.
changed: [51.250.102.185]

TASK [docker : Install Docker dependencies] *******************************************************************************
ok: [51.250.102.185]

TASK [docker : Add Docker GPG key] ****************************************************************************************
changed: [51.250.102.185]

TASK [docker : Add Docker repository] *************************************************************************************
--- before: /dev/null
+++ after: /etc/apt/sources.list.d/docker.list
@@ -0,0 +1 @@
+deb https://download.docker.com/linux/ubuntu bionic stable

changed: [51.250.102.185]

TASK [docker : Install Docker] ********************************************************************************************
The following additional packages will be installed:
containerd.io docker-buildx-plugin docker-ce-cli docker-ce-rootless-extras
docker-compose-plugin git git-man libcurl3-gnutls liberror-perl pigz
slirp4netns
Suggested packages:
aufs-tools cgroupfs-mount | cgroup-lite git-daemon-run | git-daemon-sysvinit
git-doc git-el git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn
The following NEW packages will be installed:
containerd.io docker-buildx-plugin docker-ce docker-ce-cli
docker-ce-rootless-extras docker-compose-plugin git git-man libcurl3-gnutls
liberror-perl pigz slirp4netns
0 upgraded, 12 newly installed, 0 to remove and 180 not upgraded.
changed: [51.250.102.185]

TASK [docker : Upgrade pip] ***********************************************************************************************
changed: [51.250.102.185]

TASK [docker : Install docker-compose] ************************************************************************************
changed: [51.250.102.185]

PLAY RECAP ****************************************************************************************************************
51.250.102.185 : ok=9 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
```

### **`ansible-inventory -i inventory/yandex_cloud.yml --list`**
```json
{
"_meta": {
"hostvars": {
"51.250.102.185": {
"ansible_user": "ubuntu"
}
}
},
"all": {
"children": [
"myhost",
"ungrouped"
]
},
"myhost": {
"hosts": [
"51.250.102.185"
]
}
}
```

### **`ansible-playbook playbooks/dev/main.yml -i inventory/yandex_cloud.yml`**
```
PLAY [Install docker & deploy python app] ***************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************
ok: [62.84.123.211]

TASK [docker : Update apt] ******************************************************************************************************
ok: [62.84.123.211]

TASK [docker : Install pip] *****************************************************************************************************
ok: [62.84.123.211]

TASK [docker : Install Docker dependencies] *************************************************************************************
ok: [62.84.123.211]

TASK [docker : Add Docker GPG key] **********************************************************************************************
ok: [62.84.123.211]

TASK [docker : Add Docker repository] *******************************************************************************************
ok: [62.84.123.211]

TASK [docker : Install Docker] **************************************************************************************************
ok: [62.84.123.211]

TASK [docker : Install docker-compose] ******************************************************************************************
ok: [62.84.123.211]

TASK [web_app : create project directory] ***************************************************************************************
changed: [62.84.123.211]

TASK [web_app : start docker] ***************************************************************************************************
ok: [62.84.123.211]

TASK [web_app : pull the image] *************************************************************************************************
ok: [62.84.123.211]

TASK [web_app : create docker-compose file] *************************************************************************************
changed: [62.84.123.211]

TASK [web_app : run the container] **********************************************************************************************
changed: [62.84.123.211]

PLAY RECAP **********************************************************************************************************************
62.84.123.211 : ok=13 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
```
3 changes: 3 additions & 0 deletions ansible/ansible.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[defaults]
inventory = ./inventory
roles_path = ./roles
4 changes: 4 additions & 0 deletions ansible/inventory/yandex_cloud.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
myhost:
hosts:
62.84.123.211:
ansible_user: ubuntu
11 changes: 11 additions & 0 deletions ansible/playbooks/dev/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
- name: Install docker & deploy python app
hosts: all
become: true
vars:
folder: "/app_python"
image: "vectorsmaster/flask-app"
ex_port: "5000"
in_port: "5000"
roles:
- docker
- web_app
17 changes: 17 additions & 0 deletions ansible/roles/docker/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Docker Role

## Overview
It's an ansible role that installs docker in ubuntu

## requirements

1. `ubuntu`
2. `python`

## installation details

`main.yaml`:
1. Upgrade apt.
2. Install and upgrade pip.
3. Install docker using apt.
4. Install docker-compose using pip.
58 changes: 58 additions & 0 deletions ansible/roles/docker/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
# Edition can be one of: 'ce' (Community Edition) or 'ee' (Enterprise Edition).
docker_edition: 'ce'
docker_packages:
- "docker-{{ docker_edition }}"
- "docker-{{ docker_edition }}-cli"
- "docker-{{ docker_edition }}-rootless-extras"
- "containerd.io"
- docker-buildx-plugin
docker_packages_state: present

# Service options.
docker_service_manage: true
docker_service_state: started
docker_service_enabled: true
docker_restart_handler_state: restarted

# Docker Compose Plugin options.
docker_install_compose_plugin: true
docker_compose_package: docker-compose-plugin
docker_compose_package_state: present

# Docker Compose options.
docker_install_compose: false
docker_compose_version: "v2.11.1"
docker_compose_arch: "{{ ansible_architecture }}"
docker_compose_url: "https://github.com/docker/compose/releases/download/{{ docker_compose_version }}/docker-compose-linux-{{ docker_compose_arch }}"
docker_compose_path: /usr/local/bin/docker-compose

# Enable repo setup
docker_add_repo: true

# Docker repo URL.
docker_repo_url: https://download.docker.com/linux

# Used only for Debian/Ubuntu/Pop!_OS/Linux Mint. Switch 'stable' to 'nightly' if needed.
docker_apt_release_channel: stable
# docker_apt_ansible_distribution is a workaround for Ubuntu variants which can't be identified as such by Ansible,
# and is only necessary until Docker officially supports them.
docker_apt_ansible_distribution: "{{ 'ubuntu' if ansible_distribution in ['Pop!_OS', 'Linux Mint'] else ansible_distribution }}"
docker_apt_arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'amd64' }}"
docker_apt_repository: "deb [arch={{ docker_apt_arch }} signed-by=/etc/apt/trusted.gpg.d/docker.asc] {{ docker_repo_url }}/{{ docker_apt_ansible_distribution | lower }} {{ ansible_distribution_release }} {{ docker_apt_release_channel }}"
docker_apt_ignore_key_error: true
docker_apt_gpg_key: "{{ docker_repo_url }}/{{ docker_apt_ansible_distribution | lower }}/gpg"
docker_apt_gpg_key_checksum: "sha256:1500c1f56fa9e26b9b8f42452a553675796ade0807cdce11975eb98170b3a570"
docker_apt_filename: "docker"

# Used only for RedHat/CentOS/Fedora.
docker_yum_repo_url: "{{ docker_repo_url }}/{{ (ansible_distribution == 'Fedora') | ternary('fedora','centos') }}/docker-{{ docker_edition }}.repo"
docker_yum_repo_enable_nightly: '0'
docker_yum_repo_enable_test: '0'
docker_yum_gpg_key: "{{ docker_repo_url }}/centos/gpg"

# A list of users who will be added to the docker group.
docker_users: []

# Docker daemon options as a dict
docker_daemon_options: {}
7 changes: 7 additions & 0 deletions ansible/roles/docker/handlers/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
- name: restart docker
service:
name: docker
state: "{{ docker_restart_handler_state }}"
ignore_errors: "{{ ansible_check_mode }}"
when: docker_service_manage | bool
4 changes: 4 additions & 0 deletions ansible/roles/docker/tasks/install_compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- name: Install docker-compose
ansible.builtin.pip:
name: docker-compose
state: latest
26 changes: 26 additions & 0 deletions ansible/roles/docker/tasks/install_docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
- name: Install Docker dependencies
apt:
name:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common
state: present
update_cache: true

- name: Add Docker GPG key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present

- name: Add Docker repository
apt_repository:
repo: deb https://download.docker.com/linux/ubuntu bionic stable
filename: docker
state: present

- name: Install Docker
apt:
name: docker-ce
state: present
update_cache: true
20 changes: 20 additions & 0 deletions ansible/roles/docker/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
- name: Update apt
apt:
name: apt
state: latest
update_cache: true

- name: Install pip
apt:
name:
- python3-pip
- python3-setuptools
state: latest
update_cache: true


- name: Install Docker
import_tasks: install_docker.yml

- name: Install docker-compose
import_tasks: install_compose.yml
29 changes: 29 additions & 0 deletions ansible/roles/web_app/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# web_app role

## Overview
It's an ansible role pulls vectorsmaster/flask-app image, run it, wipe docker container if stated

## Requirements

1. `ubuntu`.
2. `python`.
3. `docker` role.

## Usage (navigate into ansible directory)

1. `ansible-playbook playbooks/dev/main.yml -i inventory/yandex_cloud.yml`.
- pull the image and run it inside container.
- wipe the container.

2. `ansible-playbook playbooks/dev/main.yml -i inventory/yandex_cloud.yml --tags "deploy"`.
- pull the image and run it inside container.

3. `ansible-playbook playbooks/dev/main.yml -i inventory/yandex_cloud.yml --tags "wipe"`.
- wipe the container.

## Notes

- The container will be deployed at http://<host_ip>:5000

- You may need to upgrade ansible `pip install --upgrade ansible`.

2 changes: 2 additions & 0 deletions ansible/roles/web_app/meta/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
dependencies:
- role: docker
Loading