diff --git a/defaults/main.yml b/defaults/main.yml index c4e4b26..daa7352 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,13 +1,38 @@ --- # Unix vars -etebase_group: 'etebase' -etebase_user: 'etebase' -etebase_user_home: '/var/lib/etebase' -etebase_shell: '/bin/false' -etebase_venv: '/tmp/venv' +etebase__group: 'etebase' +etebase__user: 'etebase' +etebase__user_home: '/var/lib/etebase' +etebase__shell: '/bin/false' +etebase__venv: '/tmp/venv' # package state -etebase_package_state: 'present' +etebase__package_state: 'present' + +# etebase version +etebase__version: 'latest' + +# etebase config options +# -> global +etebase__global_secret_file: 'secret.txt' +etebase__global_debug: false +etebase__global_static_root: "{{ etebase__user_home }}/static_root" +etebase__global_media_root: "{{ etebase__user_home }}/media_root" +etebase__global_extra: '' + +# -> allowed_hosts +etebase__allowed_hosts_allowed_host1: '*' +etebase__allowed_hosts_extra: '' + +# -> Database +etebase__database_engine: 'django.db.backends.sqlite3' +etebase__database_name: 'etebase.db.sqlite3' +etebase__database_extra: '' +etebase__database_options_extra: '' + +# -> Other +etebase__ldap_extra: '' +etebase__config_extra: '' # should we do a version check? (recomended) submodules_versioncheck: false diff --git a/tasks/configure.yml b/tasks/configure.yml new file mode 100644 index 0000000..61ab19b --- /dev/null +++ b/tasks/configure.yml @@ -0,0 +1,23 @@ +--- +- name: Configure Etebase + become: true + ansible.builtin.template: + src: "templates/etebase-server.ini.j2" + dest: "{{ etebase__user_home }}/etebase_{{ etebase_version_target }}/etebase-server.ini" + mode: '0640' + group: "{{ etebase__group }}" + owner: "{{ etebase__user }}" + + +- name: "Create istatic data directory" + become: true + ansible.builtin.file: + path: "{{ item }}" + state: directory + group: "{{ etebase__group }}" + owner: "{{ etebase__user }}" + recurse: true + mode: 'u=rwX,g=rX,o=' + with_items: + - "{{ etebase__global_static_root }}" + - "{{ etebase__global_media_root }}" diff --git a/tasks/download.yml b/tasks/download.yml new file mode 100644 index 0000000..186ca17 --- /dev/null +++ b/tasks/download.yml @@ -0,0 +1,23 @@ +--- +- name: Download etebase git Repository + become: true + ansible.builtin.git: + repo: "{{ etebase__repo }}" + dest: "{{ etebase__user_home }}/etebase_{{ etebase_version_target }}" + single_branch: true + depth: 4 + force: false + track_submodules: true + umask: "0027" + update: false + version: "{{ etebase_version_target }}" + +- name: Fix venv File owner/group + become: true + ansible.builtin.file: + path: "{{ etebase__user_home }}/etebase_{{ etebase_version_target }}" + state: directory + mode: 'u=rwX,g=rX,o=' + recurse: true + group: "{{ etebase__group }}" + owner: "{{ etebase__user }}" diff --git a/tasks/main.yml b/tasks/main.yml index a181058..7168f36 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -6,5 +6,14 @@ - name: Create Etebase User/Group ansible.builtin.include_tasks: create_user.yml +- name: Define Etebase Version + ansible.builtin.include_tasks: set_version.yml + +- name: Download Etebase Repo + ansible.builtin.include_tasks: download.yml + - name: Setup Virtualenv and install Requirements ansible.builtin.include_tasks: python_venv.yml + +- name: Create Etebase Config + ansible.builtin.include_tasks: configure.yml diff --git a/tasks/python_venv.yml b/tasks/python_venv.yml index ae8e292..c9ddd58 100644 --- a/tasks/python_venv.yml +++ b/tasks/python_venv.yml @@ -8,8 +8,15 @@ - name: Install etebase python requirements in virtualenv become: true ansible.builtin.pip: - name: bottle - # requirements: /my_app/requirements.txt + requirements: "{{ etebase__user_home }}/etebase_{{ etebase_version_target }}/requirements.txt" + virtualenv: "{{ etebase__venv }}" + state: "{{ etebase__package_state }}" + umask: "0027" + +- name: Install etebase ASGI Server + become: true + ansible.builtin.pip: + name: 'uvicorn[standard]' virtualenv: "{{ etebase__venv }}" state: "{{ etebase__package_state }}" umask: "0027" @@ -20,5 +27,6 @@ path: "{{ etebase__venv }}" state: directory mode: 'u=rwX,g=rX,o=' + recurse: true group: "{{ etebase__group }}" owner: "{{ etebase__user }}" diff --git a/tasks/set_version.yml b/tasks/set_version.yml new file mode 100644 index 0000000..6771aa0 --- /dev/null +++ b/tasks/set_version.yml @@ -0,0 +1,38 @@ +--- +- name: "Determine 'latest' version release" + when: etebase__version == "latest" + block: + - name: "Get latest etebase release metadata" + ansible.builtin.uri: + url: "{{ etebase__repo_api }}" + return_content: true + register: etebase_remote_metadata + when: not ansible_check_mode + + - name: "Fail if running in check mode without versions set." + ansible.builtin.fail: + msg: | + "You are running this playbook in check mode: + Please set the Etebase version with the variable 'etebase__version', because the + URI module cannot detect the latest version in this mode." + when: ansible_check_mode and (etebase__version == 'latest' or etebase__version == 'present') + + - name: "Set fact latest etebase release" + ansible.builtin.set_fact: + etebase_remote_version: "{{ etebase_remote_metadata.json.0.name }}" + when: not ansible_check_mode + + - name: "Set etebase version target (latest)" + ansible.builtin.set_fact: + etebase_version_target: "{{ etebase_remote_version }}" + when: not ansible_check_mode + +- name: "Set etebase version target {{ etebase__version }}" + ansible.builtin.set_fact: + etebase_version_target: "{{ etebase__version }}" + when: etebase__version != "latest" + +- name: Print Etebase Version + ansible.builtin.debug: + verbosity: 1 + msg: "Set Etebase Version to {{ etebase_version_target }}" diff --git a/templates/etebase-server.ini.j2 b/templates/etebase-server.ini.j2 new file mode 100644 index 0000000..85ab8ba --- /dev/null +++ b/templates/etebase-server.ini.j2 @@ -0,0 +1,45 @@ +; {{ ansible_managed }} +; See https://github.com/roles-ansible/ansible_role_etebase.git + +[global] +secret_file = {{ etebase__global_secret_file }} +debug = {{ etebase__global_debug | ternary('true', 'false') }} +;Set the paths where data will be stored at +static_root = {{ etebase__global_static_root }} +media_root = {{ etebase__global_media_root }} + +;Advanced options, only uncomment if you know what you're doing: +;static_url = /static/ +;media_url = /user-media/ +;language_code = en-us +;time_zone = UTC +;redis_uri = redis://localhost:6379 +{{ etebase__global_extra }} + +[allowed_hosts] +allowed_host1 = {{ etebase__allowed_hosts_allowed_host1 }} +{{ etebase__allowed_hosts_extra }} + +[database] +engine = {{ etebase__database_engine }} +name = db.sqlite3 +{{ etebase__database_extra }} + +[database-options] +; Add engine-specific options here, such as postgresql parameter key words +{{ etebase__database_options_extra }} + +;[ldap] +;server = +;search_base = +;filter = +; In case a cache TTL of 1 hour is too short for you, set `cache_ttl` to the preferred +; amount of hours a cache entry should be viewed as valid: +;cache_ttl = 5 +;bind_dn = +; Either specify the password directly, or provide a password file +;bind_pw = +;bind_pw_file = /path/to/the/file.txt +{{ etebase__ldap_extra }} + +{{ etebase__config_extra }} diff --git a/vars/main.yml b/vars/main.yml index 1e5f200..a1c523a 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -1,4 +1,7 @@ --- +etebase__repo: 'https://github.com/etesync/server.git' +etebase__repo_api: 'https://api.github.com/repos/etesync/server/tags' + # versionscheck -playbook_version_number: 03 # should be a integer +playbook_version_number: 04 # should be a integer playbook_version_path: 'role-etebase'