Files
monky-deployd/ansible/roles/monky_deployd/tasks/main.yml
T
mdella c966450d8e fix(install): fetch from scm.tikali.ai (public project) — Gitea name is split-horizon inside the estate
Inside the estate gitea.cbs.tikali.net resolves to jump1's RED EIP (10.10.0.175),
which has no HTTP ingress, so backend boxes could not download the install
artefacts from the Gitea mirror (cbs/iac#102). scm.tikali.ai is reachable from
those boxes and the project is now public, so the GitLab generic package
registry becomes the PRIMARY source:

- packaging/install.sh: default source = scm.tikali.ai generic package registry
  (projects/69/packages/generic/monky-deployd/<ver>/...); `--source gitea` /
  MONKY_DEPLOYD_SOURCE=gitea keeps the Gitea release as the off-estate
  alternative; --base-url / MONKY_DEPLOYD_BASE_URL still override the base.
- ansible role defaults: monky_deployd_base_url/_deb_url point at the registry,
  Gitea layout kept as a commented alternative.
- README / docs/OPERATIONS.md / CLAUDE.md / CI comments + release description:
  both locations keep being published (release + release:gitea).
- Version 0.1.1 (the tag gate refuses v* tags whose version != __version__);
  tests compare against __version__ instead of a literal. No agent change.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KLB7jieMNRkTsJ2epr4Ds1
2026-09-05 17:57:27 +00:00

131 lines
4.3 KiB
YAML

---
# Assumes: docker + compose plugin present, the host identity enrolled by roles/ziti_tunneler
# (run-host mode) — that role gains the ACL var + a name assertion (plan §D).
- name: monky_deployd | assert inputs
ansible.builtin.assert:
that:
- monky_deployd_env_id is match('^env-(dev|qa|stage|prod)-[0-9]{2,3}$')
- monky_deployd_site in ['cbs', 'pdx']
- monky_deployd_transport in ['sdk', 'proxy', 'system']
fail_msg: "env_id/site/transport out of grammar"
- name: monky_deployd | prerequisites
ansible.builtin.apt:
name: [acl, ca-certificates]
state: present
update_cache: true
cache_valid_time: 3600
- name: monky_deployd | installed version
ansible.builtin.command: dpkg-query -W -f='${Version}' monky-deployd
register: monky_deployd_installed
changed_when: false
failed_when: false
- name: monky_deployd | download .deb + sha256 from the scm.tikali.ai package registry
when: monky_deployd_installed.stdout != monky_deployd_version
block:
- name: monky_deployd | fetch sha256
ansible.builtin.uri:
url: "{{ monky_deployd_deb_sha256_url }}"
return_content: true
register: monky_deployd_sha
- name: monky_deployd | fetch .deb (checksum verified)
ansible.builtin.get_url:
url: "{{ monky_deployd_deb_url }}"
dest: "/var/cache/apt/archives/{{ monky_deployd_deb }}"
checksum: "sha256:{{ monky_deployd_sha.content.split()[0] }}"
mode: "0644"
- name: monky_deployd | install .deb
ansible.builtin.apt:
deb: "/var/cache/apt/archives/{{ monky_deployd_deb }}"
- name: monky_deployd | identity present
ansible.builtin.stat:
path: "{{ monky_deployd_identity }}"
register: monky_deployd_id_stat
failed_when: not monky_deployd_id_stat.stat.exists
- name: monky_deployd | ACL so the agent can read the identity
ansible.posix.acl:
path: "{{ item.path }}"
entity: monky-deployd
etype: user
permissions: "{{ item.perms }}"
state: present
loop:
- { path: "{{ monky_deployd_identity }}", perms: r }
- { path: "{{ monky_deployd_identity | dirname }}", perms: rx }
- name: monky_deployd | directories
ansible.builtin.file:
path: "{{ item.path }}"
state: directory
owner: "{{ item.owner }}"
group: monky-deployd
mode: "{{ item.mode }}"
loop:
- { path: /etc/monky-deployd, owner: root, mode: "0750" }
- { path: /var/lib/monky-deployd, owner: monky-deployd, mode: "0700" }
- name: monky_deployd | openbao CA
ansible.builtin.copy:
content: "{{ monky_deployd_bao_ca_pem }}"
dest: /etc/monky-deployd/openbao-ca.pem
mode: "0644"
when: monky_deployd_bao_ca_pem | length > 0
- name: monky_deployd | config.yaml
ansible.builtin.template:
src: config.yaml.j2
dest: /etc/monky-deployd/config.yaml
owner: root
group: monky-deployd
mode: "0640"
notify: monky_deployd tick
- name: monky_deployd | proxy transport env
ansible.builtin.copy:
content: "ZITI_IDENTITY={{ monky_deployd_identity }}\n"
dest: /etc/monky-deployd/proxy.env
mode: "0644"
when: monky_deployd_transport == 'proxy'
- name: monky_deployd | proxy service
ansible.builtin.systemd:
name: monky-deployd-proxy.service
enabled: "{{ monky_deployd_transport == 'proxy' }}"
state: "{{ 'started' if monky_deployd_transport == 'proxy' else 'stopped' }}"
daemon_reload: true
- name: monky_deployd | bootstrap grant (one-time, from tenancy)
ansible.builtin.copy:
content: "{{ monky_deployd_bootstrap_grant }}\n"
dest: /etc/monky-deployd/bootstrap.jwt
owner: monky-deployd
group: monky-deployd
mode: "0600"
when: monky_deployd_bootstrap_grant | length > 0
no_log: true
notify: monky_deployd tick
- name: monky_deployd | timer
ansible.builtin.systemd:
name: monky-deployd.timer
enabled: "{{ monky_deployd_timer_enabled }}"
state: "{{ 'started' if monky_deployd_timer_enabled else 'stopped' }}"
daemon_reload: true
- name: monky_deployd | flush handlers (first tick inside the grant's hour)
ansible.builtin.meta: flush_handlers
- name: monky_deployd | status
ansible.builtin.command: monky-deployd status
register: monky_deployd_status
changed_when: false
failed_when: false
- name: monky_deployd | show status
ansible.builtin.debug:
msg: "{{ monky_deployd_status.stdout_lines }}"