summaryrefslogtreecommitdiff
path: root/docs
AgeCommit message (Collapse)Author
2026-05-07docs(llms.txt): update dirhtml-skip rationale after .md pivotYuriy Andamasov
The previous comment on `_write_llms_txt` (and on the LLM-Facing Files section in CLAUDE.md) justified the `dirhtml` skip by claiming the template's `.html` URLs wouldn't resolve under `dirhtml` output. That became stale after [#1874@5fe7f9ad](https://github.com/vyos/vyos-documentation/pull/1874/commits/5fe7f9ad) (and parity commits on [#1876](https://github.com/vyos/vyos-documentation/pull/1876)/[#1903](https://github.com/vyos/vyos-documentation/pull/1903)) pivoted the curated template to `.md` URLs β€” `_copy_md_sources` puts `.md` files at their source-relative paths regardless of builder, so the rendered llms.txt would actually resolve fine under `dirhtml` now. The real reason we skip `dirhtml` is simpler: production publishes only via the `html`/`readthedocs` builders, and we don't render llms.txt for builds we don't ship. Local `make dirhtml` is a developer convenience, not a publish target. Reword the conf.py comment and the CLAUDE.md section to say that plainly. No code-behavior change. Addresses Copilot review feedback on PR #1874 (3 threads on docs/conf.py, docs/_templates/llms.txt.j2, and CLAUDE.md flagging the inconsistency). \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(llms.txt): point links at .md sources, not .htmlYuriy Andamasov
Per the [llms.txt spec](https://llmstxt.org/), `/llms.txt` links should point at markdown files (the spec example: `[API docs](https://example.com/api.md)`). We were using `.html` URLs, which still work but force LLM consumers through HTML parsing for content that's already available as raw MyST at the same path (the `.md` is copied to HTML root by `_copy_md_sources`). Pivot the curated llms.txt template to `.md` URLs across 22 of 23 entries. The single exception is `cli.html` β€” sagitta's `docs/cli.rst` hasn't been migrated to MyST (rst-to-myst chokes on the heading hierarchy), so no `cli.md` is served at the HTML root. A Jinja comment in the template documents the exception and references the follow-up cli.rst migration as a separate PR. Verified locally: every linked `.md` path returns 200 in production. Same pivot applied symmetrically across [#1874](https://github.com/vyos/vyos-documentation/pull/1874) (current), [#1876](https://github.com/vyos/vyos-documentation/pull/1876) (sagitta), and [#1903](https://github.com/vyos/vyos-documentation/pull/1903) (circinus). πŸ€– Generated by [robots](https://vyos.io)
2026-05-07docs(conf.py): set Jinja autoescape=False explicitly for llms.txt templateYuriy Andamasov
The llms.txt template renders plain text (markdown), not HTML, so the HTML autoescape rules that bandit/ruff S701 flags don't apply. Explicit `autoescape=False` silences the lint while documenting the intent β€” there's no HTML context to escape into here. Behavior unchanged (Jinja's default `autoescape=False` was already in effect); this just makes it visible. Same change applied symmetrically across [#1874](https://github.com/vyos/vyos-documentation/pull/1874) (current), [#1876](https://github.com/vyos/vyos-documentation/pull/1876) (sagitta), and [#1903](https://github.com/vyos/vyos-documentation/pull/1903) (circinus). Addresses CodeRabbit review feedback (S701) on PR #1876. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(conf.py): use FileSystemLoader/get_template for better tracebacksYuriy Andamasov
Switch from `Environment.from_string(tpl_path.read_text(...))` to `Environment(loader=FileSystemLoader(...)).get_template('llms.txt.j2')`. When `StrictUndefined` raises on a typo in `llms.txt.j2` (e.g. `{{ relase }}`), the traceback now references the real template filename and line number instead of an anonymous in-memory template. That makes debugging template typos materially easier without changing any other behavior β€” same fail-fast guard, same trailing-newline handling, same rendered output. Same change applied symmetrically across [#1874](https://github.com/vyos/vyos-documentation/pull/1874) (current), [#1876](https://github.com/vyos/vyos-documentation/pull/1876) (sagitta), and [#1903](https://github.com/vyos/vyos-documentation/pull/1903) (circinus) so the hook stays identical across branches. Addresses CodeRabbit/Copilot review feedback on PR #1903. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-06docs(conf.py): fail loudly when html_baseurl is missingYuriy Andamasov
Same fix as `current`: replace the silent `(app.config.html_baseurl or '').rstrip('/') + '/'` fallback with an explicit `RuntimeError`. Every supported branch sets html_baseurl, so a missing value would only ever happen as a regression. Addresses CodeRabbit review feedback on PR #1876. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-06Merge remote-tracking branch 'origin/sagitta' into feat/docs-llms-txt-sagittaYuriy Andamasov
# Conflicts: # docs/conf.py
2026-05-06fix: bring _ext/vyos.py compat patches from current to sagittaYuriy Andamasov
The sagitta build failed on /en/1.4/ post-flip because docs/_ext/vyos.py was missing two version-compatibility patches that current already has: - Line 224: nodes.reprunicode(path) β†’ str(path) (docutils 0.21 removed nodes.reprunicode) - Line 367-378: myst-parser 2.0 fallback for nested_render_text β€” the RST 'Body' state does not expose _renderer, so the call falls back to docutils nested_parse via a ViewList These patches landed on current via earlier PRs but were never backported to sagitta. The flip PR exposed the missing patches because the new build path renders cmdinclude blocks through MyST's render_restructuredtext which uses the RST 'Body' state without _renderer. Bringing current's _ext/vyos.py byte-identical fixes both issues. The file has no sagitta-specific divergence beyond these two patches. Generated by robots https://vyos.io
2026-05-06feat: flip swap mechanism on sagitta β€” MD as primary, RST as overrideYuriy Andamasov
Mirror of #1899 (current) and #1900 (circinus) for sagitta. Same logic, same scripts, per-branch file set. Changes: - Rename docs/**/md-<stem>.md to docs/**/<stem>.md (drop md- prefix) for all 210 stems previously listed in docs/_swap.txt - Rename docs/**/<stem>.rst to docs/**/rst-<stem>.rst (add rst- prefix) for the same 210 stems - Repurpose docs/_swap.txt as docs/_rst_overrides.txt; initially empty - conf.py exclude_patterns flipped: rst-*.rst excluded by default - conf.py runtime-artifact references updated to _rst_override_state.json and _md_exclude.txt - scripts/swap_sources.py imported from current (post-#1899 rewrite, with inverted rename direction) - scripts/import_myst.py and tests/test_import_myst.py deleted (obsolete) - tests/test_swap_sources.py imported from current (post-#1899 rewrite) Side-effect: fixes the same 404 on /en/1.4/ View page source links that #1899 fixed for /en/rolling/ and #1900 fixed for /en/1.5/. Per-branch differences vs #1899: - sagitta has 210 stems vs current's 254 (sagitta has no vpp pages and fewer current-only features; cli + installation/cloud/aws are still RST-only on sagitta pending the title-level fix follow-up) - otherwise the script/conf.py/test changes are byte-identical with current Generated by robots https://vyos.io
2026-05-06feat: import MyST swap mechanism + content for sagitta (replaces #1886)Yuriy Andamasov
Replaces the broken #1886 with a fresh, properly-converted MyST set for the sagitta (1.4.x) docs, mirroring what landed for circinus via #1897. This PR: - Re-imports 210 md-*.md files for sagitta. Source: ran the pipelines rst-to-myst converter (chrisjsewell/rst-to-myst v0.4.0, with pandoc fallback) on sagittas RST. Post-processed via the pipelines postprocess stage (10 ordered fixes for blanks, admonitions, label hyphens, pandoc artifacts, structural blanks, linter markers). Compared to the broken #1886 content (which was left over from an earlier stage-1-only run): zero raw `<div class=>` remnants. - For 23 stems where sagittas RST is byte-identical with currents RST (mostly stable policy/protocol pages and the 404 page), reuses currents already-validated md-*.md content rather than re-converting. - Drops cli and installation/cloud/aws from sagittas swap set: their RST has SEVERE/4 "Title level inconsistent" errors that crash rst-to-myst; they need an independent RST-source fix and are kept as RST-only for now. - Adds the per-page swap mechanism: scripts/swap_sources.py, scripts/import_myst.py, the matching tests under tests/, _swap.txt with 210 stems, _ext/vyos.py MyST renderer fallback, Makefile swap-wrapped targets, .readthedocs.yml swap pre/post hooks. - Adds 187 .webp images and removes 235 superseded .jpg/.png/.jpeg static assets; flips html_logo to vyos-logo.webp. - Adds the MyST swap-related blocks to docs/conf.py only: myst_enable_extensions, myst_fence_as_directive, md-*.md exclude patterns, _swap_exclude.txt reader, _prefer_webp and _copy_md_sources setup hooks. github_version fallback set to 'sagitta' to match the branch (parallel to currents 'current' and circinuss 'circinus'). Deliberately excluded (per user direction): - llms.txt and sphinx-llms-txt / sphinx-sitemap config: these will land separately for sagitta via #1870 plus a new sagitta-specific llms.txt template PR. The conf.py here does not pull those extensions in, so the build does not depend on the new pip packages. Verification before pushing: - 210 md-*.md = 210 _swap.txt stems = 210 RST siblings on sagitta (1:1:1). - 0 files contain raw `<div class=` (the breakage that took down /en/1.5/). - conf.py copyright/version/release preserve sagittas values (2024 / 1.4 / "1.4.x (sagitta)") - not currents. - html_title from currents conf.py removed - PR #1880 is the right place for sagittas branch-localized title. Supersedes / closes on merge: - #1886 (broken converter output, would break /en/1.4/ if merged). Generated by robots https://vyos.io
2026-05-06docs: link "View page source" to GitHub instead of raw text (#1889)Yuriy Andamasov
* docs: link "View page source" to GitHub instead of raw text Adds html_context with display_github=True so the sphinx_rtd_theme generates an "Edit on GitHub" link. READTHEDOCS_GIT_IDENTIFIER is used to point at the exact branch/PR ref being built; falls back to "sagitta" for local builds. πŸ€– Generated by [robots](https://vyos.io) * docs: fix GitHub source link on RTD PR preview builds On external (PR preview) builds READTHEDOCS_GIT_IDENTIFIER is set to the PR number, which is not a valid GitHub ref. Use the commit hash instead for external builds; branch name for regular builds. πŸ€– Generated by [robots](https://vyos.io)
2026-05-06Revert "Add incremental RST-to-MyST swap mechanism (sagitta) (#1868)" (#1894)Daniil Baturin
This reverts commit 22e34ce5aee24d2fd11f8205522ab7ecdb3c4c5e.
2026-05-06Add incremental RST-to-MyST swap mechanism (sagitta) (#1868)Yuriy Andamasov
* feat(swap-sagitta): add incremental RST-to-MyST swap mechanism Backport of the swap mechanism from feat/incremental-myst-swap onto the sagitta release branch. Built directly on top of origin/sagitta, so the underlying RST tree is sagitta's (not current's). Mechanism: - scripts/import_myst.py β€” import md from myst/* with md- prefix - scripts/swap_sources.py β€” rename md-{name}.md β†’ {name}.md before Sphinx builds, restore after; writes _build/_swap_state.json and _build/_swap_exclude.txt - docs/Makefile β€” html/dirhtml/pdf/livehtml all run swap β†’ build β†’ trap restore; explicit `swap` and `restore` targets too - docs/conf.py β€” MyST extensions enabled; swap exclude_patterns loader; _prefer_webp builder hook so html prefers webp over png Content: - 202 md-prefixed pages from origin/myst/sagitta (md-{name}.md alongside each {name}.rst counterpart) - 1 plain MyST-only page from myst/sagitta where no .rst exists (already at canonical name on sagitta: docs/copyright.md) - 240 .webp images from myst/sagitta (added alongside the existing PNG/JPG so RST builds keep their assets) - docs/_swap.txt populated with all 202 stems β†’ MyST is served by default, revert a page by removing its stem from _swap.txt πŸ€– Generated by [robots](https://vyos.io) * feat(conf): copy .md sources into HTML output for plain-text serving Adds a build-finished hook that mirrors every .md file from the Sphinx source tree into the HTML output directory verbatim, making unrendered MyST sources accessible alongside HTML renders at the same URL path. πŸ€– Generated by [robots](https://vyos.io) * docs: address review feedback (backport from PR #1857) Fix conversion artifacts, typos, and technical inaccuracies applicable to the sagitta branch: curly quotes, typos (deamonless, cammans, amdifferent, trough), incorrect firewall command paths, missing closing brace in zone-policy, peer name inconsistencies, hardcoded passwords replaced with vault references, and md-*.md exclusion in conf.py. πŸ€– Generated by [robots](https://vyos.io) * docs: port .readthedocs.yml jobs, _ext/vyos.py fallback and swap-script tests from PR #1857 Parity backport from PR #1857 (current) β€” three pieces were missing on sagitta. - .readthedocs.yml: add build.jobs.pre_build / post_build hooks that run scripts/swap_sources.py --swap before the Sphinx build and --restore after. Without this, the swap mechanism ships but never runs on RTD builds for this branch β€” the swap is a silent no-op. - docs/_ext/vyos.py: CmdInclude.run() now falls back to nested_parse() when self.state._renderer is not present. Required for cfgcmd / opcmd / cmdincludemd directives to render correctly when included from MyST pages (the swap mechanism's whole point). Sagitta-only delta on _ext/vyos.py (the path = str(path) line on 224) is intentionally untouched. - tests/test_import_myst.py, tests/test_swap_sources.py: tests for the swap scripts. The scripts on this branch are byte-identical to current's, so the same tests apply. Travels with the branch so CI catches per-branch regressions if the scripts ever drift. πŸ€– Generated by [robots](https://vyos.io) * fix(conf): skip md-*.md staging files in _copy_md_sources Agent-Logs-Url: https://github.com/vyos/vyos-documentation/sessions/919695a7-688d-41b9-89f0-540684625dbc Co-authored-by: andamasov <12631358+andamasov@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: andamasov <12631358+andamasov@users.noreply.github.com>
2026-05-05docs(conf): add branch-localized html_title on sagittaYuriy Andamasov
Sagitta (1.4 LTS) had no html_title defined, so the rendered page <title> and navigation top bar fell back to the Sphinx default. The sibling LTS branch (circinus) and current both set html_title; sagitta should match for consistency. Add html_title using the existing release variable so the title resolves to "VyOS 1.4.x (sagitta) LTS". Spotted while reviewing PR #1869/#1870 feedback; unrelated to that change and pre-existing. πŸ€– Generated by [robots](https://vyos.io)
2026-05-04docs: use canonical /en/1.4/ baseurl instead of /en/sagitta/ aliasYuriy Andamasov
RTD redirects /en/sagitta/* to /en/1.4/*. Pointing html_baseurl at the canonical slug makes <link rel="canonical"> and the sitemap match the URL RTD actually serves, so crawlers skip the redirect hop. /en/sagitta/ still works as an alias. πŸ€– Generated by [robots](https://vyos.io)
2026-05-04docs: add llms.txt and llms-full.txt generation (sagitta)Yuriy Andamasov
- Pin sphinx-llms-txt 0.7.1 and sphinx-sitemap 2.9.0 - Set html_baseurl to https://docs.vyos.io/en/sagitta/ - llms.txt rendered at build time from a Jinja template; llms-full.txt auto-generated by sphinx-llms-txt - Optional section adapted to sagitta layout (no contributing index, no VPP) - Same change applied to current and circinus in separate PRs πŸ€– Generated by [robots](https://vyos.io)
2026-04-15T8189: Add conntrackd FTFW PurgeTimeout setting (#1819)Nataliia S.
(cherry picked from commit 9f334f3d5547735fa8c83fd6b6e7bbafa589f11a)
2026-03-23Update examples.rstsysteembeheerder
Examples using `set policy local-route rule 101 source '203.0.113.254'` should include the `address` statement. Tested on: VyOS 1.4.4 This is again the result of VyOS devs merging without updating the documentation: https://github.com/vyos/vyos-1x/pull/2342 :(
2026-02-05bare-metal - revise VyOS image versionsChristian Breunig
(cherry picked from commit 7f2d94a10d6f439e9f3b4a5fff98c317d680c262)
2026-01-06Update dhcp-server for IPv6 prefix delegationsysteembeheerder
2025-12-16DOC: Backport syslog TLS support documentation to 1.4 (#1724)LiudmylaNad
2025-12-15ssh: update list of supported ciphers!Christian Breunig
(cherry picked from commit 1ea5d99f4f1e7f1a6911ddcae1aa5a0d9127f094)
2025-12-04syslog: T4251: Add documentation for syslog TLS configuration (backport) (#1689)Alexandr K.
* syslog: T4251: Add documentation for syslog TLS configuration Documented protocol, certificate, auth-mode, and permitted-peers requirements for TLS configuration. (cherry picked from commit a3d3347ee8e05e11a23d795070803748bcf84458) * syslog: T4251: Fix documentation of TLS enablement logic for syslog (cherry picked from commit a271d322e2977686dbd67f5967a9c1660f6789bd) * syslog: T4251: Rename "permitted-peers" to "permitted-peer" - Renamed `permitted-peers` to `permitted-peer`. - Added support for multiple `permitted-peer` entries. (cherry picked from commit 85a097b4a19b52179b45966cbcc8c7f30030a884)
2025-11-26ipsec: T8027: voluntarily send its certificate, even if it wasn't requested ↡mergify[bot]
(#1712) (#1715) (cherry picked from commit 8c0c0bfe1c041fb6cd48402db033351f094c0e0c) # Conflicts: # docs/configuration/vpn/ipsec/remoteaccess_ipsec.rst Co-authored-by: Christian Breunig <christian@breunig.cc>
2025-11-20prefer hsflowd over pmacct (#1707)systeembeheerder
Co-authored-by: Systeembeheerder <systeembeheerder@users.noreply.github.com>
2025-11-12Update wireguard.rstsysteembeheerder
VyOS 1.3 uses `pubkey`, VyOS 1.4 uses `public-key`. Update examples to reflect that change.
2025-10-20Add Virtual-Template1 configuration for LAC L2TP (#1693)Viacheslav Hletenko
Add missed `Virtual-Template1` for LAC L2TP Cisco config example (cherry picked from commit ebb33be3c3b1cf118fef588840528f2c0daa5dc5)
2025-09-15Removed the page "Migrate from Vyatta core" as not required anymore (#1678)srividya0208
* Updated the installation page with latest information * T7361:remove the document related to Vyatta
2025-09-15Correction of ipv4/ipv6 bgp op-commands syntax (#1677)srividya0208
* Updated the installation page with latest information * op-mode:T3477: Correction of operational command syntax as per available CLI commands
2025-08-28Updated mDNS documentation from 1.5 branch (#1674)aapostoliuk
Updated mDNS documentation from 1.5 branch. The previous topic was not updated since 1.3 branch.
2025-08-28Documentation VyOS Deployment on AWS and Azure for Secure Cloud-to-Cloud ↡Aslan Hajiyev
Connectivity (#1673) * Added documentation pages for AWS/Azure HA deployment and modified pages AWS,Azure,GCP * Update docs/installation/cloud/azure-ha.rst Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Added documentation page VyOS Deployment on AWS and Azure for Secure Cloud-to-Cloud Connectivity * Modified diagram name * Update docs/installation/cloud/aws-to-azure.rst Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-20Added AWS/Azure HA deployment documentation for and modified titles of AWS, ↡Aslan Hajiyev
Azure, GCP deployment pages (#1668) * Added documentation pages for AWS/Azure HA deployment and modified pages AWS,Azure,GCP * Update docs/installation/cloud/azure-ha.rst Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-12Added IPSec blueprints with Cisco and PA (#1667)aapostoliuk
Added blueprint Policy-based Site-to-Site IPsec VPN with Cisco IOS. Added blueprint Route-based Site-to-Site IPsec VPN with Cisco IOS. Added blueprint Route-based Site-to-Site IPsec VPN with Palo Alto.
2025-08-02container: T7403: add "force" option to "delete container image" (#1663)mergify[bot]
(cherry picked from commit 1f5ad605bc854f60565666a9e5d1a06488594732) Co-authored-by: Christian Breunig <christian@breunig.cc>
2025-07-28Updated site-to-site IPsec VPN documentation (#1660)aapostoliuk
* Updated site-to-site IPsec VPN documentation Added general theoretical IPsec documentation. Changed site-to-site IPsec VPN documentation. Added steps for configuration. Added documentation for troubleshooting site-to-site IPsec VPN. Backported from https://github.com/vyos/vyos-documentation/pull/1653 --------- Co-authored-by: aapostoliuk <aapostoliuk@vyos.io> Co-authored-by: Daniil Baturin <daniil@baturin.org>
2025-07-21Updated the installation page with latest information (#1659)srividya0208
2025-06-26dhcp-ha: correction of dhcp HA example and option (#1646)1.4.3srividya0208
2025-06-26T7531: Add documentation for no-ipv6-auto-ra (#1649)mergify[bot]
(cherry picked from commit 102eb9d462d7dcaaba71c1b7e27cf91fda84a21f) Co-authored-by: factor2431 <factor2431@outlook.com>
2025-05-05Merge branch 'sagitta' into mergify/bp/sagitta/pr-1632mergify/bp/sagitta/pr-1632Christian Breunig
2025-04-29T7397: add "system kernel option quiet" to suppress boot messagesChristian Breunig
(cherry picked from commit fd6b53a2b6e2e7757a3600f3ead5fde6855fedd1) # Conflicts: # docs/configuration/system/option.rst
2025-04-26T6703: Add documentation for AMD pstate drivermergify/bp/sagitta/pr-1543Nicolas Vollmar
(cherry picked from commit 1930ed17847404d185b1bef0f1e428a37870de67)
2025-04-23Merge pull request #1627 from aslanvyos/sagittaRobert GΓΆhler
Rewritten VyOS deployment for GCP
2025-04-23Rewrited VyOS deployment for GCPaslanvyos
Rewrited VyOS deployment for GCP v2
2025-04-01Update index.rstsysteembeheerder
Explain the limitations in the current version
2025-03-25Merge pull request #1615 from vyos/mergify/bp/sagitta/pr-1612Robert GΓΆhler
policy: T7158: Added match source-vrf to route-map (backport #1612)
2025-03-25policy: T7158: Added match source-vrf to route-mapmergify/bp/sagitta/pr-1612aapostoliuk
Added match source-vrf to route-map (cherry picked from commit 10547374e3645353455e39fe40e3ecceee6f0d2f)
2025-03-25bgp: T7157: Allow using route-maps for VRF route leaking in BGPmergify/bp/sagitta/pr-1613aapostoliuk
Allow using route-maps for VRF route leaking in BGP (cherry picked from commit e585f01bf26967835675fa0aafe5308e79f0ba9a)
2025-02-20Update vxlan.rstsysteembeheerder
more wrong ports..
2025-02-20Update vxlan.rstsysteembeheerder
2025-02-20Update vxlan.rstsysteembeheerder
remove "As VyOS is Linux based the default port used is not using 4789 as the default IANA-assigned destination UDP port number. Instead VyOS uses the Linux default port of 8472." See * https://github.com/vyos/vyos-1x/blob/current/src/conf_mode/interfaces_vxlan.py#L226 * https://github.com/vyos/vyos-1x/blob/current/interface-definitions/interfaces_vxlan.xml.in#L105 Looks like VyOS DOES use 4789 and not 8472 by default.
2025-02-20Update vxlan.rstsysteembeheerder
`set interfaces vxlan <interface> source-address <interface>` should be `set interfaces vxlan <interface> source-address <IP address>` in 1.4.1: ``` # set interfaces vxlan vxlan1 source-address Possible completions: <x.x.x.x> IPv4 source address <h:h:h:h:h:h:h:h> IPv6 source address 127.0.0.1 ::1 ```