diff --git a/README.md b/README.md index 5cfc84c..44bce00 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ You shuold firstly specify server in the `invenvtory` file. Then start the root * then create another lxc container for FORCAD and set it up - [x] create N teams -- [ ] ~~fix docker installation~~ fuck that, we will install everything in lxc containers; no docker on bare metal! -- [ ] **LXC SUBNETS** <- main focus +- [x] fix docker installation +- [x] **LXC CONTAINERS** <- main focus - [ ] VPN - [ ] test diff --git a/containers_init/deploy_forcad.yml b/containers_init/deploy_forcad.yml new file mode 100644 index 0000000..a606992 --- /dev/null +++ b/containers_init/deploy_forcad.yml @@ -0,0 +1,36 @@ +--- +- name: Setup ForcAD infra + hosts: localhost + become: true + vars_files: + - './vars/main.yml' + + vars_prompt: + - name: "n_teams" + prompt: "How many teams do you wish me to create?" + private: false + + tasks: + - name: Setup team lxc containers and services + include_role: + name: lxd_teams + tasks_from: main + +- name: Setup ForcAD infra + hosts: just_created + become: true + connection: lxd + vars_files: + - './vars/main.yml' + + tasks: + - name: Install docker on all containers + include_role: + name: docker + tasks_from: main + + - name: Copy services and start them + include_role: + name: services + tasks_from: main + diff --git a/containers_init/inventory b/containers_init/inventory new file mode 100644 index 0000000..2396cdb --- /dev/null +++ b/containers_init/inventory @@ -0,0 +1,2 @@ +[forc_ad] +localhost ansible_connection=local diff --git a/nuke_forcad.yml b/containers_init/nuke_forcad.yml similarity index 100% rename from nuke_forcad.yml rename to containers_init/nuke_forcad.yml diff --git a/requirements.txt b/containers_init/requirements.txt similarity index 100% rename from requirements.txt rename to containers_init/requirements.txt diff --git a/requirements.yml b/containers_init/requirements.yml similarity index 100% rename from requirements.yml rename to containers_init/requirements.yml diff --git a/roles/destroy/tasks/main.yml b/containers_init/roles/destroy/tasks/main.yml similarity index 100% rename from roles/destroy/tasks/main.yml rename to containers_init/roles/destroy/tasks/main.yml diff --git a/roles/docker/tasks/main.yml b/containers_init/roles/docker/tasks/main.yml similarity index 54% rename from roles/docker/tasks/main.yml rename to containers_init/roles/docker/tasks/main.yml index 743c2f5..2dc3e73 100644 --- a/roles/docker/tasks/main.yml +++ b/containers_init/roles/docker/tasks/main.yml @@ -1,27 +1,27 @@ --- - - name: Install required apt packages for Docker apt: pkg: - apt-transport-https - ca-certificates - curl - - software-properties-common + - gnupg + - lsb-release + #- software-properties-common - python3-pip - virtualenv - python3-setuptools update_cache: true - ##### WARNING OUTDATED!!! NEED FIX ASAP - #- name: Add Docker GPG apt Key - # apt_key: - # url: 'https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg' - # state: present - # - #- name: Add Docker Repository - # apt_repository: - # repo: 'deb https://download.docker.com/linux/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} stable' - # state: present +- name: Add Docker GPG apt Key + apt_key: + url: 'https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg' + state: present + +- name: Add Docker Repository + apt_repository: + repo: 'deb https://download.docker.com/linux/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} stable' + state: present - name: Install Docker apt: diff --git a/roles/forcad/files/checkers/baby_sql_checker/checker.py b/containers_init/roles/forcad/files/checkers/baby_sql_checker/checker.py similarity index 100% rename from roles/forcad/files/checkers/baby_sql_checker/checker.py rename to containers_init/roles/forcad/files/checkers/baby_sql_checker/checker.py diff --git a/roles/forcad/files/checkers/baby_sql_checker/service_lib.py b/containers_init/roles/forcad/files/checkers/baby_sql_checker/service_lib.py similarity index 100% rename from roles/forcad/files/checkers/baby_sql_checker/service_lib.py rename to containers_init/roles/forcad/files/checkers/baby_sql_checker/service_lib.py diff --git a/roles/forcad/files/checkers/dummy_checker/checker.py b/containers_init/roles/forcad/files/checkers/dummy_checker/checker.py similarity index 100% rename from roles/forcad/files/checkers/dummy_checker/checker.py rename to containers_init/roles/forcad/files/checkers/dummy_checker/checker.py diff --git a/roles/forcad/files/checkers/dummy_checker/service_lib.py b/containers_init/roles/forcad/files/checkers/dummy_checker/service_lib.py similarity index 100% rename from roles/forcad/files/checkers/dummy_checker/service_lib.py rename to containers_init/roles/forcad/files/checkers/dummy_checker/service_lib.py diff --git a/roles/forcad/files/checkers/hash_me_please_checker/checker.py b/containers_init/roles/forcad/files/checkers/hash_me_please_checker/checker.py similarity index 100% rename from roles/forcad/files/checkers/hash_me_please_checker/checker.py rename to containers_init/roles/forcad/files/checkers/hash_me_please_checker/checker.py diff --git a/roles/forcad/files/checkers/hash_me_please_checker/service_lib.py b/containers_init/roles/forcad/files/checkers/hash_me_please_checker/service_lib.py similarity index 100% rename from roles/forcad/files/checkers/hash_me_please_checker/service_lib.py rename to containers_init/roles/forcad/files/checkers/hash_me_please_checker/service_lib.py diff --git a/roles/forcad/files/config.yml b/containers_init/roles/forcad/files/config.yml similarity index 100% rename from roles/forcad/files/config.yml rename to containers_init/roles/forcad/files/config.yml diff --git a/roles/forcad/tasks/main.yml b/containers_init/roles/forcad/tasks/main.yml similarity index 100% rename from roles/forcad/tasks/main.yml rename to containers_init/roles/forcad/tasks/main.yml diff --git a/roles/forcad/templates/config.yml.j2 b/containers_init/roles/forcad/templates/config.yml.j2 similarity index 100% rename from roles/forcad/templates/config.yml.j2 rename to containers_init/roles/forcad/templates/config.yml.j2 diff --git a/containers_init/roles/lxd_teams/tasks/main.yml b/containers_init/roles/lxd_teams/tasks/main.yml new file mode 100644 index 0000000..39f072b --- /dev/null +++ b/containers_init/roles/lxd_teams/tasks/main.yml @@ -0,0 +1,44 @@ +--- +- name: Create N started containers + community.general.lxd_container: + name: "team{{ item }}" + ignore_volatile_options: true + state: started + config: + "security.nesting": "true" + source: + protocol: simplestreams + type: image + mode: pull + server: https://images.linuxcontainers.org + alias: ubuntu/20.04/cloud + profiles: ["default"] + wait_for_ipv4_addresses: true + timeout: 600 + loop: "{{ range(1, n_teams|int + 1 , 1) | list }}" + register: lxc_container_create_output + +# +#- name: Check python is installed in container +# delegate_to: "team{{ item }}" +# ansible.builtin.raw: dpkg -s python +# register: python_install_check +# failed_when: python_install_check.rc not in [0, 1] +# changed_when: false +# loop: "{{ range(1, n_teams|int + 1 , 1) | list }}" +# +# +#- name: Install python in container +# delegate_to: "team{{ item }}" +# ansible.builtin.raw: apt-get install -y python +# when: python_install_check.rc == 1 +# loop: "{{ range(1, n_teams|int + 1 , 1) | list }}" + +- name: h + debug: + msg: "{{ lxc_container_create_output.results[0].invocation.module_args.name }}" + +- add_host: + hostname: "{{ lxc_container_create_output.results[item].invocation.module_args.name }}" + groups: just_created + loop: "{{ range(0, n_teams|int, 1) | list }}" diff --git a/roles/services/files/BabySql/service/db/Dockerfile b/containers_init/roles/services/files/services/BabySql/service/db/Dockerfile similarity index 100% rename from roles/services/files/BabySql/service/db/Dockerfile rename to containers_init/roles/services/files/services/BabySql/service/db/Dockerfile diff --git a/roles/services/files/BabySql/service/db/default-users.sql b/containers_init/roles/services/files/services/BabySql/service/db/default-users.sql similarity index 100% rename from roles/services/files/BabySql/service/db/default-users.sql rename to containers_init/roles/services/files/services/BabySql/service/db/default-users.sql diff --git a/roles/services/files/BabySql/service/docker-compose.yml b/containers_init/roles/services/files/services/BabySql/service/docker-compose.yml similarity index 100% rename from roles/services/files/BabySql/service/docker-compose.yml rename to containers_init/roles/services/files/services/BabySql/service/docker-compose.yml diff --git a/roles/services/files/BabySql/service/flag_manager/.gitignore b/containers_init/roles/services/files/services/BabySql/service/flag_manager/.gitignore similarity index 100% rename from roles/services/files/BabySql/service/flag_manager/.gitignore rename to containers_init/roles/services/files/services/BabySql/service/flag_manager/.gitignore diff --git a/roles/services/files/BabySql/service/flag_manager/Dockerfile b/containers_init/roles/services/files/services/BabySql/service/flag_manager/Dockerfile similarity index 100% rename from roles/services/files/BabySql/service/flag_manager/Dockerfile rename to containers_init/roles/services/files/services/BabySql/service/flag_manager/Dockerfile diff --git a/roles/services/files/BabySql/service/flag_manager/api.py b/containers_init/roles/services/files/services/BabySql/service/flag_manager/api.py similarity index 100% rename from roles/services/files/BabySql/service/flag_manager/api.py rename to containers_init/roles/services/files/services/BabySql/service/flag_manager/api.py diff --git a/roles/services/files/BabySql/service/flag_manager/flags.py b/containers_init/roles/services/files/services/BabySql/service/flag_manager/flags.py similarity index 100% rename from roles/services/files/BabySql/service/flag_manager/flags.py rename to containers_init/roles/services/files/services/BabySql/service/flag_manager/flags.py diff --git a/roles/services/files/BabySql/service/flag_manager/main.py b/containers_init/roles/services/files/services/BabySql/service/flag_manager/main.py similarity index 100% rename from roles/services/files/BabySql/service/flag_manager/main.py rename to containers_init/roles/services/files/services/BabySql/service/flag_manager/main.py diff --git a/roles/services/files/BabySql/service/flag_manager/requirements.txt b/containers_init/roles/services/files/services/BabySql/service/flag_manager/requirements.txt similarity index 100% rename from roles/services/files/BabySql/service/flag_manager/requirements.txt rename to containers_init/roles/services/files/services/BabySql/service/flag_manager/requirements.txt diff --git a/roles/services/files/BabySql/service/web/Dockerfile b/containers_init/roles/services/files/services/BabySql/service/web/Dockerfile similarity index 100% rename from roles/services/files/BabySql/service/web/Dockerfile rename to containers_init/roles/services/files/services/BabySql/service/web/Dockerfile diff --git a/roles/services/files/BabySql/service/web/index.php b/containers_init/roles/services/files/services/BabySql/service/web/index.php similarity index 100% rename from roles/services/files/BabySql/service/web/index.php rename to containers_init/roles/services/files/services/BabySql/service/web/index.php diff --git a/roles/services/files/Dummy/service/.gitignore b/containers_init/roles/services/files/services/Dummy/service/.gitignore similarity index 100% rename from roles/services/files/Dummy/service/.gitignore rename to containers_init/roles/services/files/services/Dummy/service/.gitignore diff --git a/roles/services/files/Dummy/service/Dockerfile b/containers_init/roles/services/files/services/Dummy/service/Dockerfile similarity index 100% rename from roles/services/files/Dummy/service/Dockerfile rename to containers_init/roles/services/files/services/Dummy/service/Dockerfile diff --git a/roles/services/files/Dummy/service/docker-compose.yml b/containers_init/roles/services/files/services/Dummy/service/docker-compose.yml similarity index 100% rename from roles/services/files/Dummy/service/docker-compose.yml rename to containers_init/roles/services/files/services/Dummy/service/docker-compose.yml diff --git a/roles/services/files/Dummy/service/package.json b/containers_init/roles/services/files/services/Dummy/service/package.json similarity index 100% rename from roles/services/files/Dummy/service/package.json rename to containers_init/roles/services/files/services/Dummy/service/package.json diff --git a/roles/services/files/Dummy/service/src/flag.js b/containers_init/roles/services/files/services/Dummy/service/src/flag.js similarity index 100% rename from roles/services/files/Dummy/service/src/flag.js rename to containers_init/roles/services/files/services/Dummy/service/src/flag.js diff --git a/roles/services/files/Dummy/service/src/server.js b/containers_init/roles/services/files/services/Dummy/service/src/server.js similarity index 100% rename from roles/services/files/Dummy/service/src/server.js rename to containers_init/roles/services/files/services/Dummy/service/src/server.js diff --git a/roles/services/files/Dummy/service/yarn.lock b/containers_init/roles/services/files/services/Dummy/service/yarn.lock similarity index 100% rename from roles/services/files/Dummy/service/yarn.lock rename to containers_init/roles/services/files/services/Dummy/service/yarn.lock diff --git a/roles/services/files/HashMePlease/service/data/.keep b/containers_init/roles/services/files/services/HashMePlease/service/data/.keep similarity index 100% rename from roles/services/files/HashMePlease/service/data/.keep rename to containers_init/roles/services/files/services/HashMePlease/service/data/.keep diff --git a/roles/services/files/HashMePlease/service/docker-compose.yml b/containers_init/roles/services/files/services/HashMePlease/service/docker-compose.yml similarity index 100% rename from roles/services/files/HashMePlease/service/docker-compose.yml rename to containers_init/roles/services/files/services/HashMePlease/service/docker-compose.yml diff --git a/roles/services/files/HashMePlease/service/flag_manager/.gitignore b/containers_init/roles/services/files/services/HashMePlease/service/flag_manager/.gitignore similarity index 100% rename from roles/services/files/HashMePlease/service/flag_manager/.gitignore rename to containers_init/roles/services/files/services/HashMePlease/service/flag_manager/.gitignore diff --git a/roles/services/files/HashMePlease/service/flag_manager/Dockerfile b/containers_init/roles/services/files/services/HashMePlease/service/flag_manager/Dockerfile similarity index 100% rename from roles/services/files/HashMePlease/service/flag_manager/Dockerfile rename to containers_init/roles/services/files/services/HashMePlease/service/flag_manager/Dockerfile diff --git a/roles/services/files/HashMePlease/service/flag_manager/api.py b/containers_init/roles/services/files/services/HashMePlease/service/flag_manager/api.py similarity index 100% rename from roles/services/files/HashMePlease/service/flag_manager/api.py rename to containers_init/roles/services/files/services/HashMePlease/service/flag_manager/api.py diff --git a/roles/services/files/HashMePlease/service/flag_manager/flags.py b/containers_init/roles/services/files/services/HashMePlease/service/flag_manager/flags.py similarity index 100% rename from roles/services/files/HashMePlease/service/flag_manager/flags.py rename to containers_init/roles/services/files/services/HashMePlease/service/flag_manager/flags.py diff --git a/roles/services/files/HashMePlease/service/flag_manager/main.py b/containers_init/roles/services/files/services/HashMePlease/service/flag_manager/main.py similarity index 100% rename from roles/services/files/HashMePlease/service/flag_manager/main.py rename to containers_init/roles/services/files/services/HashMePlease/service/flag_manager/main.py diff --git a/roles/services/files/HashMePlease/service/flag_manager/requirements.txt b/containers_init/roles/services/files/services/HashMePlease/service/flag_manager/requirements.txt similarity index 100% rename from roles/services/files/HashMePlease/service/flag_manager/requirements.txt rename to containers_init/roles/services/files/services/HashMePlease/service/flag_manager/requirements.txt diff --git a/roles/services/files/HashMePlease/service/netcat/.gitignore b/containers_init/roles/services/files/services/HashMePlease/service/netcat/.gitignore similarity index 100% rename from roles/services/files/HashMePlease/service/netcat/.gitignore rename to containers_init/roles/services/files/services/HashMePlease/service/netcat/.gitignore diff --git a/roles/services/files/HashMePlease/service/netcat/Dockerfile b/containers_init/roles/services/files/services/HashMePlease/service/netcat/Dockerfile similarity index 100% rename from roles/services/files/HashMePlease/service/netcat/Dockerfile rename to containers_init/roles/services/files/services/HashMePlease/service/netcat/Dockerfile diff --git a/roles/services/files/HashMePlease/service/netcat/hashme.py b/containers_init/roles/services/files/services/HashMePlease/service/netcat/hashme.py similarity index 100% rename from roles/services/files/HashMePlease/service/netcat/hashme.py rename to containers_init/roles/services/files/services/HashMePlease/service/netcat/hashme.py diff --git a/roles/services/files/HashMePlease/service/netcat/requirements.txt b/containers_init/roles/services/files/services/HashMePlease/service/netcat/requirements.txt similarity index 100% rename from roles/services/files/HashMePlease/service/netcat/requirements.txt rename to containers_init/roles/services/files/services/HashMePlease/service/netcat/requirements.txt diff --git a/containers_init/roles/services/tasks/main.yml b/containers_init/roles/services/tasks/main.yml new file mode 100644 index 0000000..6deb910 --- /dev/null +++ b/containers_init/roles/services/tasks/main.yml @@ -0,0 +1,23 @@ +--- + +- name: Create services directory + ansible.builtin.file: + path: "/root/services" + state: directory + mode: '0755' + +- name: Copy services + ansible.builtin.copy: + src: "services/" + dest: "/root/services" + mode: '0755' + +# maybe list the services in directory firstly, for now its ok + +- name: Start services + community.docker.docker_compose: + project_src: "/root/services/{{ item }}/service" + state: present + with_items: + - BabySql + diff --git a/vars/main.yml b/containers_init/vars/main.yml similarity index 100% rename from vars/main.yml rename to containers_init/vars/main.yml diff --git a/deploy_forcad.yml b/deploy_forcad.yml deleted file mode 100644 index e5a5b39..0000000 --- a/deploy_forcad.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -- name: Setup ForcAD infra - hosts: forc_ad - become: true - vars_files: - - './vars/main.yml' - - vars_prompt: - - name: "n_teams" - prompt: "How many teams do you wish me to create?" - private: false - - tasks: - # - name: install and setup forcad - # include_role: - # name: forcad - # tasks_from: main - - - name: Setup team lxc containers and services - include_role: - name: services - tasks_from: main diff --git a/roles/services/tasks/main.yml b/roles/services/tasks/main.yml deleted file mode 100644 index 0bdbceb..0000000 --- a/roles/services/tasks/main.yml +++ /dev/null @@ -1,32 +0,0 @@ ---- -- name: Ensure lxd is installed - community.general.snap: - name: - - lxd - -- name: Run lxd init - ansible.builtin.command: - cmd: 'lxd init --auto' - -- name: Create a started container - community.general.lxd_container: - name: mycontainer - ignore_volatile_options: true - state: started - source: - type: image - mode: pull - server: https://images.linuxcontainers.org - protocol: simplestreams # if you get a 404, try setting protocol: simplestreams - alias: ubuntu:22.04 - profiles: ["default"] - wait_for_ipv4_addresses: true - timeout: 600 - -- name: Test - ansible.builtin.shell: lxc exec mycontainer -- sh -c "ping -c 5 google.com" - register: output - -- name: h - debug: - msg: "{{ output }}" diff --git a/server_init/deploy_forcad.yml b/server_init/deploy_forcad.yml new file mode 100644 index 0000000..752e310 --- /dev/null +++ b/server_init/deploy_forcad.yml @@ -0,0 +1,13 @@ +--- +- name: Setup ForcAD infra + hosts: forc_ad + become: true + gather_facts: false + vars_files: + - './vars/main.yml' + + tasks: + - name: Setup host server + include_role: + name: ansible_lxd + tasks_from: main diff --git a/inventory b/server_init/inventory similarity index 100% rename from inventory rename to server_init/inventory diff --git a/server_init/nuke_forcad.yml b/server_init/nuke_forcad.yml new file mode 100644 index 0000000..6753ff3 --- /dev/null +++ b/server_init/nuke_forcad.yml @@ -0,0 +1,13 @@ +--- +- name: Nuke ForcAD infra + hosts: forc_ad + become: true + vars_files: + - './vars/main.yml' + + tasks: + - name: Destory forcAD + include_role: + name: destroy + tasks_from: main + diff --git a/server_init/requirements.txt b/server_init/requirements.txt new file mode 100644 index 0000000..ab1acb0 --- /dev/null +++ b/server_init/requirements.txt @@ -0,0 +1 @@ +ansible-core==2.13.4 diff --git a/server_init/requirements.yml b/server_init/requirements.yml new file mode 100644 index 0000000..7890fdf --- /dev/null +++ b/server_init/requirements.yml @@ -0,0 +1,7 @@ +# ansible-galaxy collection list +collections: + - name: community.docker + version: '3.1.0' + + - name: community.general + version: '5.6.0' diff --git a/server_init/roles/ansible_lxd/tasks/main.yml b/server_init/roles/ansible_lxd/tasks/main.yml new file mode 100644 index 0000000..bf00672 --- /dev/null +++ b/server_init/roles/ansible_lxd/tasks/main.yml @@ -0,0 +1,53 @@ +--- + +# - name: Make sure apt packages are available +# ansible.builtin.apt: +# pkg: +# - python3 +# - python3-venv +# - python3-pip +# - virtualenv +# - snap +# update_cache: true +# +# - name: Ensure lxd is installed +# community.general.snap: +# name: +# - lxd +# +# - name: Run lxd init +# ansible.builtin.command: +# cmd: 'lxd init --auto' +# +# - name: Create a project directory +# ansible.builtin.file: +# path: /root/deploy +# state: directory +# mode: '0755' + +#- name: Copy project directory +# ansible.builtin.copy: +# src: '../../../../containers_init' +# dest: /root/deploy +# mode: '0655' + +- name: Create venv ans install requirements + ansible.builtin.pip: + requirements: "{{ item }}" + virtualenv: "/root/deploy/containers_init/.venv" + virtualenv_python: python3 + with_items: + - "/root/deploy/containers_init/requirements.txt" + +- name: Install ansible-galaxy dependencies + ansible.builtin.command: + cmd: /root/deploy/containers_init/.venv/bin/ansible-galaxy install -r /root/deploy/containers_init/requirements.yml + +# - name: Run ansible playboook +# ansible.builtin.command: +# cmd: /root/deploy/containers_init/.venv/bin/ansible-playbook /root/deploy/containers_init/deploy_forcad.yml +# register: playbook_log +# +# - name: Log playbook actions +# debug: +# msg: "{{ playbook_log }}" diff --git a/server_init/vars/main.yml b/server_init/vars/main.yml new file mode 100644 index 0000000..721f839 --- /dev/null +++ b/server_init/vars/main.yml @@ -0,0 +1,16 @@ +--- +# Default directory for forcAD files +forc_ad_directory: '/forc_ad' + +# forcAD download link +forc_ad_link: 'https://github.com/pomo-mondreganto/ForcAD/releases/download/v1.4.0/ForcAD_v1.4.0.zip' + +# forcAd zipfile +forc_ad_zipfile: 'ForcAD_v1.4.0.zip' + +# forcAD creds +admin_username: 'forcad' +admin_password: 'forcad420' + +# Startime for the game +start_time: '2019-11-30 15:30:00'