aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/roles/my_workspace
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2023-08-15 15:07:48 +0200
committerEgor Tensin <Egor.Tensin@gmail.com>2023-08-15 15:07:48 +0200
commit15cceca6a25b9e5c228a6aa39fb087f8063273f6 (patch)
tree310e0914cd2c1e294faefbf7876b67b37ca2f384 /roles/my_workspace
parentimport my_dotfiles role (diff)
downloadinfra-ansible-15cceca6a25b9e5c228a6aa39fb087f8063273f6.tar.gz
infra-ansible-15cceca6a25b9e5c228a6aa39fb087f8063273f6.zip
workspace -> my_workspace
Diffstat (limited to 'roles/my_workspace')
-rw-r--r--roles/my_workspace/README.md7
-rw-r--r--roles/my_workspace/defaults/main.yml4
-rw-r--r--roles/my_workspace/tasks/main.yml35
-rw-r--r--roles/my_workspace/tasks/project.yml70
4 files changed, 116 insertions, 0 deletions
diff --git a/roles/my_workspace/README.md b/roles/my_workspace/README.md
new file mode 100644
index 0000000..3e87881
--- /dev/null
+++ b/roles/my_workspace/README.md
@@ -0,0 +1,7 @@
+This role clones a bunch of repositories to /srv/workspace; it then tries to
+run either `make` or `docker-compose up -d` in each of these repositories,
+which are called "projects". Not really usable by anybody else.
+
+This is how my web "projects" are set up; typically, a project is a repository
+with a Makefile which calls docker-compose in a bunch of sub-directories. This
+feels like a lame hack, but has worked pretty well so far.
diff --git a/roles/my_workspace/defaults/main.yml b/roles/my_workspace/defaults/main.yml
new file mode 100644
index 0000000..b517f2c
--- /dev/null
+++ b/roles/my_workspace/defaults/main.yml
@@ -0,0 +1,4 @@
+git_name: Egor Tensin
+git_email: Egor.Tensin@gmail.com
+
+workspace_dir: /srv/workspace
diff --git a/roles/my_workspace/tasks/main.yml b/roles/my_workspace/tasks/main.yml
new file mode 100644
index 0000000..179bdef
--- /dev/null
+++ b/roles/my_workspace/tasks/main.yml
@@ -0,0 +1,35 @@
+- name: Create workspace directory
+ become: true
+ ansible.builtin.file:
+ path: '{{ workspace_dir }}'
+ state: directory
+ owner: '{{ ansible_user }}'
+ group: '{{ ansible_user }}'
+ mode: '750'
+
+- name: Install dependencies
+ become: true
+ ansible.builtin.apt:
+ name:
+ - git
+ # I use Makefiles a lot, makes sense to install this:
+ - make
+ - vim
+
+- name: Configure git
+ block:
+ - name: Set user.name
+ community.general.git_config:
+ scope: global
+ name: user.name
+ value: '{{ git_name }}'
+
+ - name: Set user.email
+ community.general.git_config:
+ scope: global
+ name: user.email
+ value: '{{ git_email }}'
+
+- name: Update projects
+ ansible.builtin.include_tasks: project.yml
+ loop: '{{ workspace_projects }}'
diff --git a/roles/my_workspace/tasks/project.yml b/roles/my_workspace/tasks/project.yml
new file mode 100644
index 0000000..ae139f5
--- /dev/null
+++ b/roles/my_workspace/tasks/project.yml
@@ -0,0 +1,70 @@
+- name: Set project URL
+ ansible.builtin.set_fact:
+ project_url: '{{ item.url | default(item) }}'
+
+- name: Set project name
+ ansible.builtin.set_fact:
+ project_name: "{{ item.name | default(project_url | urlsplit('path') | basename | regex_replace('\\.git$', '')) }}"
+
+- name: Set project directory
+ ansible.builtin.set_fact:
+ project_dir: '{{ workspace_dir }}/{{ project_name }}'
+
+- name: 'Update repository: {{ project_name }}'
+ ansible.builtin.git:
+ accept_hostkey: true
+ dest: '{{ project_dir }}'
+ repo: '{{ project_url }}'
+
+- name: Check for Makefile
+ ansible.builtin.file:
+ path: '{{ project_dir }}/Makefile'
+ state: file
+ register: makefile_check
+ ignore_errors: true
+
+- name: This project uses make
+ become: true
+ when: makefile_check is succeeded
+ block:
+ - name: Run make
+ ansible.builtin.command: make
+ args:
+ chdir: '{{ project_dir }}'
+ register: make_output
+ when: makefile_check is succeeded
+
+ - name: Show make output
+ ansible.builtin.debug:
+ var: make_output
+
+- name: Check for docker-compose.yml
+ ansible.builtin.file:
+ path: '{{ project_dir }}/docker-compose.yml'
+ state: file
+ register: docker_compose_check
+ ignore_errors: true
+
+- name: This project uses docker-compose
+ become: true
+ when: makefile_check is not succeeded and docker_compose_check is succeeded
+ block:
+ - name: docker-compose pull
+ ansible.builtin.command: docker-compose pull
+ args:
+ chdir: '{{ project_dir }}'
+
+ - name: docker-compose build
+ ansible.builtin.command: docker-compose build --force-rm --pull -q
+ args:
+ chdir: '{{ project_dir }}'
+
+ - name: docker-compose up
+ ansible.builtin.command: docker-compose up --remove-orphans -d
+ args:
+ chdir: '{{ project_dir }}'
+ register: docker_compose_up
+
+ - name: Show docker-compose up output
+ ansible.builtin.debug:
+ var: docker_compose_up