123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- {% from "macros/setup.sh.jinja" import setup_script %}
- {% set tpl = ix_lib.base.render.Render(values) %}
- {% set st = values.consts.settings %}
- {% set settings = [
- {"cmd": "options announce-lanaddresses", "value": 1 if st.announce_lan_addresses else 0, "quote": true},
- {"cmd": "options global-ann-enabled", "value": 1 if st.global_discovery else 0, "quote": true},
- {"cmd": "options local-ann-enabled", "value": 1 if st.local_discovery else 0, "quote": true},
- {"cmd": "options natenabled", "value": 1 if st.nat_traversal else 0, "quote": true},
- {"cmd": "options relays-enabled", "value": 1 if st.relaying else 0, "quote": true},
- {"cmd": "options uraccepted", "value": 1 if st.telemetry else -1, "quote": true},
- {"cmd": "options auto-upgrade-intervalh", "value": st.auto_upgrade_intervalh, "quote": true},
- {"cmd": "defaults folder xattr-filter max-total-size", "value": st.xattr_filter_max_total_size, "quote": false},
- {"cmd": "defaults folder xattr-filter max-single-entry-size", "value": st.xattr_filter_max_single_entry_size, "quote": true},
- {"cmd": "defaults folder send-ownership", "value": 1 if st.send_ownership else 0, "quote": false},
- {"cmd": "defaults folder sync-ownership", "value": 1 if st.sync_ownership else 0, "quote": false},
- {"cmd": "defaults folder send-xattrs", "value": 1 if st.send_xattrs else 0, "quote": false},
- {"cmd": "defaults folder sync-xattrs", "value": 1 if st.sync_xattrs else 0, "quote": false},
- {"cmd": "defaults folder ignore-perms", "value": 1 if st.ignore_perms else 0, "quote": false},
- {"cmd": "defaults folder path", "value": st.path, "quote": true},
- ] %}
- {% set c1 = tpl.add_container(values.consts.syncthing_container_name, "image") %}
- {% set config = tpl.add_container(values.consts.config_container_name, "image") %}
- {% do c1.depends.add_dependency(values.consts.config_container_name, "service_completed_successfully") %}
- {% do config.restart.set_policy("on-failure", 1) %}
- {% do config.remove_devices() %}
- {% do config.deploy.resources.set_profile("medium") %}
- {% do config.configs.add("setup.sh", setup_script(values, settings), "/setup.sh", "0755") %}
- {% do config.set_entrypoint(["/bin/sh", "-c", "/setup.sh"]) %}
- {% do c1.set_user(0, 0) %}
- {% do config.set_user(0, 0) %}
- {% do c1.remove_security_opt("no-new-privileges") %}
- {% do config.remove_security_opt("no-new-privileges") %}
- {% set caps = ["CHOWN", "DAC_OVERRIDE", "FOWNER", "SETGID", "SETUID", "SETFCAP", "SETPCAP", "SYS_ADMIN"] %}
- {% do c1.add_caps(caps) %}
- {% do config.add_caps(caps + ["KILL"]) %}
- {% do c1.healthcheck.set_test("wget", {"port": values.network.web_port.port_number, "path": "/rest/noauth/health"}) %}
- {% do config.healthcheck.disable() %}
- {% set envs = {
- "PCAP": ["cap_sys_admin", "cap_chown", "cap_dac_override", "cap_fowner"]|join(",") + "+ep",
- "STNOUPGRADE": true,
- "STGUIADDRESS": "0.0.0.0:%d" | format(values.network.web_port.port_number),
- "STGUIASSETS": "/var/truenas/assets/gui",
- } %}
- {% for k, v in envs.items() %}
- {% do c1.environment.add_env(k, v) %}
- {% do config.environment.add_env(k, v) %}
- {% endfor %}
- {% do c1.environment.add_user_envs(values.syncthing.additional_envs) %}
- {% do config.environment.add_user_envs(values.syncthing.additional_envs) %}
- {% do c1.configs.add("logo-horizontal-svg", values.consts.logo_horizontal_svg, values.consts.logo_horizontal_svg_path) %}
- {% do config.configs.add("logo-horizontal-svg", values.consts.logo_horizontal_svg, values.consts.logo_horizontal_svg_path) %}
- {% if values.network.certificate_id %}
- {% set cert = values.ix_certificates[values.network.certificate_id] %}
- {% do c1.configs.add("private", cert.privatekey, "%s/config/https-key.pem" | format(values.consts.home_path)) %}
- {% do c1.configs.add("public", cert.certificate, "%s/config/https-cert.pem" | format(values.consts.home_path)) %}
- {% do config.configs.add("private", cert.privatekey, "%s/config/https-key.pem" | format(values.consts.home_path)) %}
- {% do config.configs.add("public", cert.certificate, "%s/config/https-cert.pem" | format(values.consts.home_path)) %}
- {% endif %}
- {% do c1.add_port(values.network.web_port) %}
- {% if not values.network.host_network %}
- {% do c1.add_port(values.network.tcp_port, {"container_port": 22000}) %}
- {% do c1.add_port(values.network.quic_port, {"container_port": 22000, "protocol": "udp"}) %}
- {% if values.consts.settings.local_discovery %}
- {% do c1.add_port(values.network.local_discover_port, {"container_port": 27017, "protocol": "udp"}) %}
- {% endif %}
- {% endif %}
- {% do c1.add_storage(values.consts.home_path, values.storage.home) %}
- {% do config.add_storage(values.consts.home_path, values.storage.home) %}
- {% for store in values.storage.additional_storage %}
- {% set new_store = tpl.funcs.copy_dict(store) %}
- {% if new_store.type == "cifs" and new_store.cifs_config.migration_mode %}
- {% do new_store.update({"read_only": true}) %}
- {% do new_store.cifs_config.update({"options": ["cifsacl", "vers=3.0"]}) %}
- {% endif %}
- {% do c1.add_storage(new_store.mount_path, new_store) %}
- {% do config.add_storage(new_store.mount_path, new_store) %}
- {% else %}
- {% do tpl.funcs.fail("Expected at least one storage item to be set for Syncthing") %}
- {% endfor %}
- {% set proto = "https" if values.network.certificate_id else "http" %}
- {% do tpl.portals.add(values.network.web_port, {"scheme": proto}) %}
- {{ tpl.render() | tojson }}
|