Cosmostat Init Commit

This commit is contained in:
2026-03-09 16:32:43 -07:00
commit 298d7432a7
23 changed files with 1707 additions and 0 deletions

46
tasks/api.yaml Normal file
View File

@ -0,0 +1,46 @@
---
- name: Cosmostat - API - Stop Service
ignore_errors: yes
shell: "systemctl --user -M {{ service_user }}@ stop {{ api_service_name }}"
- name: Cosmostat - API - copy api files
copy:
src: api/
dest: "{{ api_service_folder }}"
owner: "{{ service_user }}"
group: "{{ service_user }}"
mode: 0755
- name: "Cosmostat - API - template cosmostat_settings.yaml"
template:
src: cosmostat_settings.yaml
dest: "{{ api_service_folder }}/cosmostat_settings.yaml"
owner: "{{ service_user }}"
group: "{{ service_user }}"
mode: 0644
- name: "Cosmostat - API - template {{ api_service_name }}.service"
vars:
service_name: "{{ api_service_name }}"
service_working_folder: "{{ api_service_folder }}"
service_exe: "{{ api_service_exe }}"
service_group: "{{ service_user }}"
extra_options: ""
extra_service_options: ""
template:
src: "service_template.service"
dest: "{{ user_service_folder }}/{{ api_service_name }}.service"
owner: "{{ service_user }}"
group: "{{ service_user }}"
mode: 0644
- name: Cosmostat - API - Daemon Reload
shell: "systemctl --user -M {{ service_user }}@ daemon-reload"
- name: Cosmostat - API - Start Service
shell: "systemctl --user -M {{ service_user }}@ start {{ api_service_name }}"
...

112
tasks/init.yaml Normal file
View File

@ -0,0 +1,112 @@
---
- name: Cosmostat - Init - Get installed package list
when: dpkg_output is undefined
shell: "dpkg --list | grep ii | awk '{print $2}'"
register: dpkg_output
- name: Cosmostat - Init - Install Prereq Packages
when: cosmostat_packages_item not in dpkg_output.stdout
apt:
name:
- "{{ cosmostat_packages_item }}"
state: present
loop: "{{ cosmostat_packages }}"
loop_control:
loop_var: cosmostat_packages_item
# docker network for cosmostat service
- name: Cosmostat - Init - Set Up docker network
community.docker.docker_network:
name: "cosmostat_net"
driver: bridge
ipam_config:
- subnet: "{{ docker_subnet }}"
# - gateway: "{{ docker_gateway }}"
# allow service_user to sudo lshw without a password
- name: Cosmostat - Init - cosmos user sudoers file creation
copy:
dest: "/etc/sudoers.d/cosmostat"
content: "{{ cosmostat_sudoers_content }}"
owner: root
group: root
mode: 0600
# create service working folder
- name: Cosmostat - Init - create cosmostat service folder
file:
path: "{{ service_folder }}"
state: directory
owner: "{{ service_user }}"
group: "{{ service_user }}"
mode: '0755'
# create user service folder
- name: Cosmostat - Init - create cosmostat service folder
file:
path: "{{ user_service_folder }}"
state: directory
owner: "{{ service_user }}"
group: "{{ service_user }}"
mode: '0755'
# Create python service venv
- name: Cosmostat - Init - Build Python Environment
block:
- name: "Cosmostat - Init - create python venv folder at {{ venv_folder }}"
file:
path: "{{ venv_folder }}"
state: directory
owner: "{{ service_user }}"
group: "{{ service_user }}"
mode: '0755'
- name: Cosmostat - Init - create python venv requirement file
copy:
dest: "{{ venv_folder }}/requirements.txt"
content: "{{ cosmostat_venv_packages }}"
owner: "{{ service_user }}"
group: "{{ service_user }}"
mode: 0644
- name: Cosmostat - Init - build python venv
become_user: "{{ service_user }}"
pip:
virtualenv: "{{ venv_folder }}"
requirements: "{{ venv_folder }}/requirements.txt"
virtualenv_command: python3 -m venv
state: present
# create node.js docker container for web dashboard
- name: node.js server container handler
block:
- name: Cosmostat - Init - node.js - copy server files
copy:
src: "web/node_server"
dest: "{{ service_control_web_folder }}/"
mode: 0755
owner: "{{ service_user }}"
group: "{{ service_user }}"
- name: Cosmostat - Init - node.js - build docker container
community.docker.docker_image_build:
name: ws_node
tag: latest
rebuild: always
path: "{{ service_control_web_folder }}/node_server"
dockerfile: Dockerfile
labels:
ws_node: "true"
- name: Cosmostat - Init - node.js - Prune old containers
community.docker.docker_prune:
containers: true
containers_filters:
label:
ws_node: "true"
...

17
tasks/main.yaml Normal file
View File

@ -0,0 +1,17 @@
---
# initializa environment
# set up API
# set up web stack
- name: Initialize Environment
when: not quick_refresh | bool
include_tasks: init.yaml
- name: Build API
include_tasks: api.yaml
- name: Build Web Dashboard
include_tasks: web.yaml
...

56
tasks/web.yaml Normal file
View File

@ -0,0 +1,56 @@
---
###############################################
# This part sets up cosmostat web dashboard
###############################################
# Create web Folder
- name: "Cosmostat - Web - create {{ service_control_web_folder }}"
file:
path: "{{ service_control_web_folder }}"
state: directory
mode: '0755'
owner: "{{ service_user }}"
group: "{{ service_user }}"
- name: Cosmostat - Init - node.js - copy dashboard files
copy:
src: "web/html"
dest: "{{ service_control_web_folder }}/"
mode: 0755
owner: "{{ service_user }}"
group: "{{ service_user }}"
# These are not needed unless there is a stack
#- name: Cosmostat - Web - copy files for history dashboard
# copy:
# src: "dashboard/"
# dest: "{{ service_control_web_folder }}/html"
# mode: 0755
# owner: "{{ service_user }}"
# group: "{{ service_user }}"
#
#- name: Cosmostat - Web - copy files for proxy container
# copy:
# src: "proxy/"
# dest: "{{ service_control_web_folder }}/proxy"
# mode: 0755
# owner: "{{ service_user }}"
# group: "{{ service_user }}"
- name: docker container handler
block:
- name: service_control_website - template docker-compose.yaml
template:
src: docker-compose.yaml
dest: "{{ service_control_web_folder }}/docker-compose.yaml"
mode: 0644
- name: "service_control_website - Start containers"
shell: "docker-compose -f {{ service_control_web_folder }}/docker-compose.yaml up -d"
register: docker_output
- debug: |
msg="{{ docker_output.stdout_lines }}"
msg="{{ docker_output.stderr_lines }}"
...