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
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .idea/devops-programme.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.10.13
9 changes: 9 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM ubuntu:22.04

RUN apt-get update && apt-get install -y python3 python3-pip && mkdir /app
COPY requirements.txt /app/
RUN pip3 install -r /app/requirements.txt
WORKDIR /app
COPY ./app /app

CMD ["python3", "app.py"]
30 changes: 30 additions & 0 deletions M1-3-Ansible/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# M1-3-1 Configuration Management

## Ansible Task
Create an Ansible playbook that build, push and then run the Docker image for the Python application. Let your playbook has the following variables:

- `image_name` - contains the name of your image without the tag, i.e. `vutoff/python-app`
- `image_tag` - contains the tag you tagged your image with, i.e. `v0.2`
- `listen_port` - contains the listening port you're binding your app to.

Make sure that you set environment variable `PORT` when you define your container in the Ansible playbook that takes its value from `listen_port` variable.

Use Ansible modules. Do not shell out.

### Requirements
- Make sure you have Python installed. Any version above 3.8 would suffice.
- The `requirements.txt` file in this directory contains the required Ansible version. Run

```sh
pip install -r requirements.txt
```

- Make sure that Docker is running on your local machine.

### Mind the following

- If you're running Docker Desktop or Rancher Desktop, mind the location of the `docker.sock` file. The location of the socket file is
- Docker Desktop - `${HOME}/.docker/run/docker.sock`
- Rancher DEsktop - ${HOME}/.rd/run/docker.sock

- If you're using one of the above, when you write your Ansible playbook you must specify the path to the docker socket with the parameter `docker_host`, i.e. `docker_host: "unix://{{ ansible_env.HOME }}/.rd/docker.sock"`.
2 changes: 2 additions & 0 deletions M1-3-Ansible/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ansible==8.5.0
ansible-core==2.15.5
14 changes: 14 additions & 0 deletions app/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import os

from flask import Flask

app = Flask(__name__)


@app.route("/")
def hello_world():
return "Hello, World!"


if __name__ == "__main__":
app.run(port=os.environ.get("PORT", 5000), host="0.0.0.0")
17 changes: 17 additions & 0 deletions app/app_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import unittest

from app import app


class TestApp(unittest.TestCase):
def setUp(self):
self.client = app.test_client()

def test_hello_world(self):
response = self.client.get("/")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data, b"Hello, World!")


if __name__ == "__main__":
unittest.main()
8 changes: 8 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blinker==1.6.3 ; python_version >= "3.10" and python_version < "4.0"
click==8.1.7 ; python_version >= "3.10" and python_version < "4.0"
colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Windows"
flask==3.0.0 ; python_version >= "3.10" and python_version < "4.0"
itsdangerous==2.1.2 ; python_version >= "3.10" and python_version < "4.0"
jinja2==3.1.2 ; python_version >= "3.10" and python_version < "4.0"
markupsafe==2.1.3 ; python_version >= "3.10" and python_version < "4.0"
werkzeug==3.0.0 ; python_version >= "3.10" and python_version < "4.0"