Skip to content

docs: add Google Cloud HA VPN BGP example - #2139

Open
jeleel-muibi wants to merge 4 commits into
vyos:rollingfrom
jeleel-muibi:docs-gcp-ha-vpn-bgp-example
Open

docs: add Google Cloud HA VPN BGP example#2139
jeleel-muibi wants to merge 4 commits into
vyos:rollingfrom
jeleel-muibi:docs-gcp-ha-vpn-bgp-example

Conversation

@jeleel-muibi

Copy link
Copy Markdown
Contributor

Summary

  • Add a route-based Google Cloud HA VPN and BGP configuration blueprint.
  • Show two VyOS edge peers with VTI interfaces and link-local /30 BGP sessions.
  • Add import and export route maps so the example does not advertise unintended routes.
  • Add the page to the configuration blueprint toctree.

Validation

  • Targeted scripts/doc-linter.py passed for the changed docs files.
  • git diff --check passed.
  • Sphinx HTML build passed with PATH=../.venv/bin:$PATH make html from docs/.

@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 5d5bebc8-a1b8-4bb3-9930-0b80c5837665

📥 Commits

Reviewing files that changed from the base of the PR and between 6c3f55a and 7662f4c.

📒 Files selected for processing (1)
  • docs/configexamples/gcp-ha-vpn-bgp.md
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • ansible/ansible (manual)
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/configexamples/gcp-ha-vpn-bgp.md
📜 Recent review details
⏰ Context from checks skipped due to timeout. (3)
  • GitHub Check: validate
  • GitHub Check: Mergify Merge Protections
  • GitHub Check: Summary
🧰 Additional context used
🔍 Remote MCP Context7

Additional review-relevant facts found:

  • VyOS docs explicitly show route-based IPsec over VTI with:
    • VTI address assignment
    • peer VTI binding
    • vpn ipsec options disable-route-autoinstall
    • a static route via the VTI next-hop
  • VyOS docs also state that with VTI, traffic sent to the VTI is encrypted for that peer, and the VTI approach avoids needing separate SA/policy per remote network
  • VyOS BGP docs confirm:
    • inbound/outbound filtering with prefix-lists and route-maps
    • soft-reconfiguration inbound on a neighbor
    • disable-connected-check for BGP neighbors in a VPN example

I did not find a useful Google Cloud HA VPN source in Context7 beyond unrelated Google Cloud SDK docs, so I could not add concrete GCP-side verification from tools.


📝 Walkthrough

Summary by CodeRabbit

  • Documentation
    • Added a new end-to-end example for a redundant site-to-site VPN between two VyOS peers and Google Cloud HA VPN.
    • Included prerequisites, example addressing/routing, Google Cloud HA VPN + Cloud Router BGP steps, and VyOS configuration commands for both edges.
    • Added firewall and tunnel parameter guidance, along with monitoring/verification steps.
    • Linked the new guide from the configuration examples documentation index.

Walkthrough

Adds a new config example page for redundant VyOS-to-Google Cloud HA VPN using VTI interfaces and BGP over link-local /30 tunnels, plus a config-examples index entry.

Changes

GCP HA VPN BGP Documentation

Layer / File(s) Summary
Overview, prerequisites, and example parameters
docs/configexamples/gcp-ha-vpn-bgp.md:1-69
Adds page metadata, prerequisites, and example parameters for WAN/VTI addressing, ASNs, and per-tunnel PSKs.
Google Cloud side configuration
docs/configexamples/gcp-ha-vpn-bgp.md:70-88
Describes HA VPN gateway, Cloud Router, external peer gateway, and the two tunnel peerings with BGP advertisement.
VyOS edge 1 configuration
docs/configexamples/gcp-ha-vpn-bgp.md:89-180
Adds the edge 1 command block for IKE/ESP/IPsec setup, VTI vti10, tunnel 0, static routing, and BGP policy/session settings.
VyOS edge 2 configuration
docs/configexamples/gcp-ha-vpn-bgp.md:181-272
Adds the edge 2 command block for IKE/ESP/IPsec setup, VTI vti11, tunnel 1, static routing, and BGP policy/session settings.
Monitoring, references, and index entry
docs/configexamples/gcp-ha-vpn-bgp.md:273-297, docs/configexamples/index.md:15
Adds VyOS verification commands, Google Cloud reference links, and the new config-examples toctree entry.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: adding a Google Cloud HA VPN BGP example in docs/configexamples.
Description check ✅ Passed The description accurately summarizes the new HA VPN/BGP blueprint, VyOS peers, route maps, and docs index update.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
✨ Simplify code
  • Create PR with simplified code

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mergify mergify Bot added the rolling label Jul 9, 2026
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Claude finished @jeleel-muibi's task in 4m 23s —— View job


Claude Documentation Review

  • Read pass1-findings.json (empty — 0 findings, 0 skipped RST)
  • Review changed MyST files
  • Cross-reference behavioral claims with vyos-1x source
  • Post inline comments for confirmed issues (none needed)
  • Post summary comment

Issues

No confirmed factual issues. Every CLI path in docs/configexamples/gcp-ha-vpn-bgp.md was verified against .vyos-1x/ (branch current):

  • vpn ipsec esp-group … {lifetime, mode, pfs, proposal … {encryption, hash}} — matches vpn_ipsec.xml.in:104-299.
  • vpn ipsec ike-group … {dead-peer-detection {action, interval, timeout}, key-exchange, lifetime, proposal … {dh-group, encryption, hash, prf}} — matches vpn_ipsec.xml.in:301-460.
  • vpn ipsec authentication psk <name> {id, secret}id is <multi/>, so listing both local and remote IPs is valid (vpn_ipsec.xml.in:14-56).
  • vpn ipsec site-to-site peer <name> {authentication {local-id, mode, remote-id}, connection-type, ike-group, local-address, remote-address, vti {bind, esp-group}, description} — matches vpn_ipsec.xml.in:1131-1410.
  • interfaces vti <name> {address, description, ip adjust-mss} — matches interfaces_vti.xml.in + include/interface/adjust-mss.xml.i (MSS 1350 within 536-65535).
  • protocols static route <prefix> interface <name> — matches include/static/static-route.xml.i.
  • policy prefix-list <name> rule <n> {action, prefix} and policy route-map <name> rule <n> {action, match ip address prefix-list} — matches policy.xml.in.
  • protocols bgp {system-as, parameters router-id, address-family ipv4-unicast network, neighbor <addr> {remote-as, address-family ipv4-unicast {route-map {import, export}, soft-reconfiguration inbound}, timers {holdtime, keepalive}, disable-connected-check}} — matches include/bgp/.
  • Op-mode commands show vpn ike sa, show vpn ipsec sa, show ip bgp summary, show ip route bgp — all present in .vyos-1x/op-mode-definitions/.

Design also looks coherent: unique /30s inside 169.254.0.0/16, a /32 static route to each remote BGP peer via the VTI (needed because the BGP peer is on the same /30 but reachable only via the VTI), disable-connected-check on eBGP, and import/export route-maps that block advertising unintended prefixes. The multi-value authentication psk … id correctly lists both local and remote public IPs.

Needs Verification

  • dead-peer-detection timeout '120' with key-exchange 'ikev2'. XML help for dead-peer-detection timeout says "(IKEv1 only)" (vpn_ipsec.xml.in:374). The setting is accepted with IKEv2 but has no effect. This matches the pre-existing docs/configexamples/azure-vpn-bgp.md:67 pattern, so it is consistent with prior docs — flagging only in case the maintainers want to normalize this across VPN blueprints.
  • Redundancy pattern. The blueprint pairs one VyOS peer with one HA VPN interface (2 tunnels total). This is a valid Google-supported topology ("two peer VPN gateways with one interface each"), but does not reach Google's 99.99% SLA which requires 4 tunnels (each peer to both HA VPN interfaces). The doc's caveat about advertising the same /24 from both peers implicitly assumes active/active reachability — worth confirming this is the intended scope of the example.

Stats

  • Validated 2 MyST files.
  • Skipped 0 RST files awaiting MyST migration.
  • Files reviewed: docs/configexamples/gcp-ha-vpn-bgp.md (+280), docs/configexamples/index.md (+1).
  • Commands checked: ~45 CLI paths against XML interface definitions and op-mode definitions.
  • Branch reviewed: rolling (vyos-1x: current).
    · Branch: docs-gcp-ha-vpn-bgp-example

@jeleel-muibi
jeleel-muibi marked this pull request as ready for review July 9, 2026 19:18
@jeleel-muibi

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Claude finished @jeleel-muibi's task in 1m 56s —— View job


Claude Documentation Review (re-review after 367585e)

  • Read pass1-findings.json (empty — 0 findings, 0 skipped RST)
  • Diff since last review: 367585e removes dead-peer-detection timeout '120' from both peers, adds a topology-scope bullet, and adds a link to Google's HA VPN topologies page
  • Review changed MyST files
  • Cross-reference with vyos-1x source
  • Post inline comments (1 posted)
  • Post summary

What changed since the last review

367585e addresses both prior "Needs Verification" items:

  • dead-peer-detection timeout '120' — removed from both edge configs. Consistent with vpn_ipsec.xml.in:374 where timeout is documented as IKEv1 only. ✅
  • Topology / SLA scope — a bullet was added to make the topology explicit, plus a reference link to Google Cloud: HA VPN topologies. Intent is good, but the wording introduced an internal inconsistency (see Issues).

Issues

WARNING — topology description contradicts itself. The new bullet at docs/configexamples/gcp-ha-vpn-bgp.md:75-76 says the example uses the "two separate peer VPN gateways, each with one interface" topology, but the Prerequisites (:17-18) and the intro sentence (:72-73) still describe "an external peer VPN gateway resource" (singular, one resource) — that is Google's other topology. For a two-VyOS-edge / two-public-IP setup, the "two separate peer VPN gateways" wording matches the config; the Prerequisites and intro sentence need to be pluralised to match. Posted as inline comment.

Needs Verification

None on this pass beyond the inline WARNING.

Stats

  • Validated 2 MyST files.
  • Skipped 0 RST files awaiting MyST migration.
  • Files reviewed: docs/configexamples/gcp-ha-vpn-bgp.md (+282), docs/configexamples/index.md (+1).
  • This pass focused on the delta between 42b8198 and 367585e; the base-commit review's findings on ~45 CLI paths against .vyos-1x/current still stand and were not re-checked line-by-line.
  • Branch reviewed: rolling (vyos-1x: current).

Branch: docs-gcp-ha-vpn-bgp-example ·

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/configexamples/gcp-ha-vpn-bgp.md`:
- Around line 112-136: The VyOS HA VPN examples are missing the
`disable-route-autoinstall` setting, which can cause route-based IPsec to
install an incorrect default route; update both edge configurations to include
`set vpn ipsec options disable-route-autoinstall` alongside the existing `set
vpn ipsec site-to-site peer gcp-ha-vpn-0` and `vti` setup so the blueprint is
safe to copy-paste.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 7511f443-ca83-4d39-a574-b498ac7649c6

📥 Commits

Reviewing files that changed from the base of the PR and between 6d2d28d and 42b8198.

📒 Files selected for processing (2)
  • docs/configexamples/gcp-ha-vpn-bgp.md
  • docs/configexamples/index.md
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • ansible/ansible (manual)
📜 Review details
⏰ Context from checks skipped due to timeout. (2)
  • GitHub Check: Mergify Merge Protections
  • GitHub Check: Summary
🧰 Additional context used
📓 Path-based instructions (2)
docs/**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

docs/**/*.md: Canonical docs pages must be written as MyST Markdown (.md); edit existing pages in .md only and never use the old md- prefix for new pages.
Use {cfgcmd}, {opcmd}, and {cmdincludemd} fenced directives in MyST pages for VyOS command coverage; do not replace them with plain text or bash fences.
Use MyST ATX headings (#, ##, ###, etc.) in canonical pages; the RST heading hierarchy does not apply to .md sources.
In MyST pages, prefer single backticks for inline code; double backticks are reserved for embedded RST contexts.
Use % stop_vyoslinter and % start_vyoslinter comment markers in top-level MyST content to suppress real IPs or other allowed long-line exceptions, and keep them paired.
In MyST pages, write TODO markers as {todo} fenced directives.

Files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
docs/{_include/*.txt,**/*.md}

📄 CodeRabbit inference engine (AGENTS.md)

Keep documentation lines within 80 characters unless the content is inside a code block or fenced/preformatted block.

Files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
🧠 Learnings (14)
📚 Learning: 2026-05-05T01:15:18.336Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 1857
File: docs/configexamples/md-bgp-ipv6-unnumbered.md:0-0
Timestamp: 2026-05-05T01:15:18.336Z
Learning: When reviewing VyOS documentation under docs/configexamples, treat AS number differences between (a) configuration example blocks and (b) operational/verification output snippets (e.g., `show` command output) as an intentional convention. Config examples may use RFC 5398 documentation-reserved ASNs (64496–64511, such as 64496/64499), while captured `show` outputs may show different ASNs (commonly from private/private-use ranges like 64512–65534) because they come from real systems. Do not flag these cross-snippet ASN discrepancies as configuration mismatches. Only consider it an issue if the mismatch occurs within the same type of snippet (e.g., two configuration blocks that should match).

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-05-06T20:48:49.689Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 1902
File: CLAUDE.md:71-71
Timestamp: 2026-05-06T20:48:49.689Z
Learning: In vyos/vyos-documentation, the 80-character line-length rule documented under Source conventions / Formatting applies only to documentation source files located under docs/ (e.g., docs/**/*.rst and docs/**/*.md). The rule is enforced by the vyoslinter (doc-linter.py from vyos/.github) when reviewing changed files via lint-doc.yml, and only for files within docs/**. Do not suggest hard-wrapping CLAUDE.md (repo-root documentation) because GitHub renders and reflows content. For CLAUDE.md, reviews should not enforce the 80-char wrapping; apply the rule only to files matching **/docs/**/*.{rst,md}.

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-05-06T20:48:57.970Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 1902
File: CLAUDE.md:91-93
Timestamp: 2026-05-06T20:48:57.970Z
Learning: The 80-character line limit applies only to documentation sources under docs/** (RST/MD). Do not enforce this limit on repo-root Markdown files like CLAUDE.md or README.md. The vyoslinter (doc-linter.py, run via lint-doc.yml from vyos/.github) lints only changed files within docs/**; root files are excluded. GitHub renders root Markdown with viewport-width reflow, so hard-wrapping these files reduces readability without tooling benefit.

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-05-06T20:48:50.446Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 1902
File: CLAUDE.md:64-64
Timestamp: 2026-05-06T20:48:50.446Z
Learning: Enforce the 80-character line-length limit only for documentation source files under docs/ (docs/**/*.md and docs/**/*.rst rendered by Sphinx and linted by vyoslinter via lint-doc.yml). Do not flag line-length issues in repository-root Markdown files such as CLAUDE.md or README.md, which GitHub renders with viewport-width reflow. This applies to all files within docs/ that are part of the documentation source.

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-05-06T20:48:54.578Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 1902
File: CLAUDE.md:80-84
Timestamp: 2026-05-06T20:48:54.578Z
Learning: Enforce the 80-character line-length limit only for documentation source files under docs/ (docs/**/*.rst and docs/**/*.md). Do not flag repo-root files like CLAUDE.md or README.md, since they are rendered by GitHub and not subject to this rule. The doc-linter (doc-linter.py via lint-doc.yml) only lints docs/**, so CI checks won't flag root files for line length.

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-05-06T20:49:00.044Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 1902
File: CLAUDE.md:108-108
Timestamp: 2026-05-06T20:49:00.044Z
Learning: Limit the 80-character line length check and vyoslinter (doc-linter.py) enforcement to documentation source files under docs/**/*.{rst,md}. Do not apply or flag line-length issues in repo-root files like CLAUDE.md or README.md, which are rendered directly by GitHub and are not linted by lint-doc.yml. This pattern narrows checks to Sphinx source docs and prevents false positives in non-doc files.

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-05-06T20:48:53.302Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 1902
File: CLAUDE.md:79-79
Timestamp: 2026-05-06T20:48:53.302Z
Learning: Limit line length to 80 characters only for documentation sources under the docs directory (docs/**/*.rst and docs/**/*.md). This is enforced by the vyoslinter doc-linter.py (from the vyos/.github repo) via lint-doc.yml on changed files under docs/**. Do not flag line-length violations in repository-root Markdown files like CLAUDE.md or README.md, as they are rendered by GitHub and reflow in the UI.

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-05-06T20:49:10.359Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 1902
File: CLAUDE.md:142-142
Timestamp: 2026-05-06T20:49:10.359Z
Learning: In vyos/vyos-documentation, the 80-character line limit and vyoslinter enforcement apply only to documentation source files under docs/**/*.rst and docs/**/*.md that Sphinx renders. Repo-root files such as CLAUDE.md and README.md are outside the linter's scope (lint-doc.yml runs on docs/**) and are rendered by GitHub with automatic paragraph reflow — do not flag line-length violations in these files.

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-05-06T20:49:15.361Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 1902
File: CLAUDE.md:163-163
Timestamp: 2026-05-06T20:49:15.361Z
Learning: In vyos/vyos-documentation, enforce the 80-character line-length limit (Source conventions / Formatting) only for Sphinx documentation source files under docs/**/*.rst and docs/**/*.md. The lint-doc.yml workflow runs the doc-linter (doc-linter.py) and checks only docs/** changed files. Files in the repository root (e.g., CLAUDE.md, README.md) are rendered by GitHub and are not subject to this rule; do not flag line-length violations in those files.

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-05-08T07:01:22.978Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 1878
File: docs/troubleshooting/connectivity.rst:0-0
Timestamp: 2026-05-08T07:01:22.978Z
Learning: For the VyOS documentation (MyST-based docs), MyST directive opener lines must keep the entire directive arguments on a single line. This includes MyST fenced-directive openers like ```{opcmd} ... ``` and the RST-equivalent form .. opcmd:: ... when ported/used in MyST. Because the MyST parser does not support wrapped/continued directive arguments across multiple lines, do not raise/keep review warnings suggesting line wrapping for these directive opener lines due to line-length (even if they exceed 80 characters).

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-05-08T07:01:22.978Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 1878
File: docs/troubleshooting/connectivity.rst:0-0
Timestamp: 2026-05-08T07:01:22.978Z
Learning: In vyos/vyos-documentation, do not raise line-length (>80 chars) review findings for MyST directive opener lines (the directive “opener” that uses MyST directive syntax such as `{cfgcmd}` / `{opcmd}` fence/openers). CI does not enforce the 80-character limit for these specific opener lines, and existing documentation contains longer opener lines that pass lint.

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-05-13T22:16:06.198Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 2021
File: docs/automation/terraform/terraformvyos.md:14-14
Timestamp: 2026-05-13T22:16:06.198Z
Learning: In the vyos/vyos-documentation repo, when a PR is a byte-for-byte documentation port of an existing file from the rolling branch to a release branch (e.g., circinus, sagitta), keep the port content identical to the production-tested rolling source. For these ports, do not raise new review findings for documentation issues that are already present in the rolling source (for example, markdownlint MD059 like non-descriptive link text such as `[link]`/`[install]`). Instead, defer those existing issues to a rolling-side cleanup PR (e.g., `#2024`) and then backport the cleanup via Mergify.

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-05-13T22:43:41.056Z
Learnt from: andamasov
Repo: vyos/vyos-documentation PR: 2024
File: docs/automation/terraform/terraformvyos.md:0-0
Timestamp: 2026-05-13T22:43:41.056Z
Learning: In docs/**/*.md, for Markdown reference definition lines of the form `[label]: <URL>`, if the line cannot be shortened to <= 80 characters (because the URL itself is near/at the limit), suppress the vyoslinter warning by wrapping only that reference definition with a `% stop_vyoslinter` / `% start_vyoslinter` block. If the reference definition can fit within 80 characters, leave it outside any suppression block.

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
📚 Learning: 2026-06-05T19:21:44.474Z
Learnt from: LiudmylaNad
Repo: vyos/vyos-documentation PR: 2066
File: docs/configuration/protocols/traffic-engineering.md:0-0
Timestamp: 2026-06-05T19:21:44.474Z
Learning: In the vyos/vyos-documentation MyST documentation pages, when writing CLI example invocations directly under a `{cfgcmd}` directive, use `none` fenced code blocks for those examples. Do not change these example blocks to `{opcmd}` or `{cfgcmd}`—`{opcmd}` is reserved for operational-mode commands, and the surrounding `{cfgcmd}` directive already documents the target command. Plain `none` blocks for these CLI examples are intentional and correct.

Applied to files:

  • docs/configexamples/index.md
  • docs/configexamples/gcp-ha-vpn-bgp.md
🔍 Remote MCP

Relevant context for review

  • Google Cloud HA VPN expects each tunnel to use a unique /30 BGP subnet from 169.254.0.0/16, with a Cloud Router interface and BGP peer per tunnel; the peer side is modeled as an external VPN gateway resource, including redundant two-interface/two-device topologies. (docs.cloud.google.com)
  • Google Cloud firewall guidance says UDP 500, UDP 4500, and ESP (IP protocol 50) are always allowed for Cloud VPN, and Google Cloud firewall rules do not apply to the post-encapsulated IPsec packets. (docs.cloud.google.com)
  • VyOS route-based site-to-site IPsec docs say to create a VTI, assign it an address (example /30), bind the peer to that VTI, and disable route autoinstall with set vpn ipsec options disable-route-autoinstall. (docs.vyos.io)
  • VyOS BGP docs support neighbor address-family ... route-map import/export, and describe disable-connected-check as a loopback-oriented eBGP option rather than a general requirement. (docs.vyos.io)

Review focus: verify the new example includes disable-route-autoinstall, since VyOS warns VTI-based site-to-site IPsec can otherwise install a wrong default route. (docs.vyos.io)

🔇 Additional comments (1)
docs/configexamples/index.md (1)

15-15: LGTM!

Comment thread docs/configexamples/gcp-ha-vpn-bgp.md
Comment thread docs/configexamples/gcp-ha-vpn-bgp.md
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Claude finished @jeleel-muibi's task in 1m 28s —— View job


Claude Documentation Review (re-review after 6c3f55a)

  • Read pass1-findings.json (empty — 0 findings, 0 skipped RST)
  • Diff since last review: 6c3f55a adds set vpn ipsec options disable-route-autoinstall to both edge configs
  • Verify disable-route-autoinstall fix against .vyos-1x/
  • Re-check topology inconsistency from prior WARNING
  • Post summary

What changed since the last review

6c3f55a addresses CodeRabbit's finding on missing disable-route-autoinstall. Both edge configs now include:

set vpn ipsec options disable-route-autoinstall

Verified against .vyos-1x/interface-definitions/vpn_ipsec.xml.in:723 (valueless leaf node under vpn ipsec options) and .vyos-1x/src/conf_mode/vpn_ipsec.py:179 (sets install_routes = 'no'). ✅ Correct fix, safe copy-paste for a route-based VTI blueprint.

Issues

None new on this pass.

Needs Verification

Topology wording inconsistency — still open from previous review. Commit 6c3f55a did not touch this. The three occurrences remain inconsistent with each other:

  • gcp-ha-vpn-bgp.md:17-18 (Prerequisites): "An external peer VPN gateway resource with two interfaces representing the two VyOS edge peers" — singular, one resource.
  • gcp-ha-vpn-bgp.md:72-73 (Google Cloud configuration intro): "create an HA VPN gateway, a Cloud Router, an external peer VPN gateway resource, and two VPN tunnels" — singular.
  • gcp-ha-vpn-bgp.md:75-76 (new in 367585e): "This example follows the topology for two separate peer VPN gateways, each with one interface and one public IP address" — plural.

Per Google Cloud HA VPN topologies, one external VPN gateway resource with two interfaces and two external VPN gateway resources with one interface each are two distinct topologies. Because this example uses two physically separate VyOS edges with two different public IPs, the "two separate peer VPN gateways" model on line 75-76 matches the config, and lines 17-18 and 72-73 should be pluralised to match. Flagged inline in the previous review — not reposting to avoid duplication.

Stats

  • Validated 2 MyST files.
  • Skipped 0 RST files awaiting MyST migration.
  • Files reviewed: docs/configexamples/gcp-ha-vpn-bgp.md (+294), docs/configexamples/index.md (+1).
  • This pass focused on the delta between 367585e and 6c3f55a (12 lines added across the two edge blocks); the base-commit review's findings on ~45 CLI paths against .vyos-1x/current still stand and were not re-checked line-by-line.
  • Branch reviewed: rolling (vyos-1x: current).
    · Branch: docs-gcp-ha-vpn-bgp-example

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Claude finished @jeleel-muibi's task in 1m 32s —— View job


Claude Documentation Review (re-review after 7662f4c)

  • Read pass1-findings.json (empty — 0 findings, 0 skipped RST)
  • Diff since last review: 7662f4c reworks the topology wording in Prerequisites (:17-18) and the Google Cloud configuration intro (:72-79)
  • Verify prior topology inconsistency is resolved
  • Check no new issues introduced
  • Post summary

What changed since the last review

7662f4c addresses the WARNING from the previous review by rewording the three topology mentions so they agree with each other:

  • Prerequisites (:17-18) — now: "An external VPN gateway resource in Google Cloud with two interfaces, where each interface represents one VyOS edge peer."
  • Google Cloud configuration intro (:72-74) — now: "create an HA VPN gateway, a Cloud Router, an external VPN gateway resource that represents the two VyOS edge peers, and two VPN tunnels"
  • Topology bullet (:76-79) — kept the physical description ("two separate peer VPN gateways, each with one interface and one public IP address") and added a follow-up bullet: "In Google Cloud, model those two peer gateways as one external VPN gateway resource with two interfaces."

The wording now cleanly separates the physical topology (two independent VyOS edges) from the Google Cloud data-model representation (one external VPN gateway resource with two interfaces). Google supports either encoding for this scenario, and being explicit about the choice is an improvement — it also matches the singular external VPN gateway resource assumed throughout the rest of the doc. ✅

Issues

None. All three items previously flagged are now resolved:

  • dead-peer-detection timeout '120' — removed in 367585e
  • disable-route-autoinstall on both edges — added in 6c3f55a
  • Topology wording — reconciled in 7662f4c

Needs Verification

None.

Stats

  • Validated 2 MyST files.
  • Skipped 0 RST files awaiting MyST migration.
  • Files reviewed: docs/configexamples/gcp-ha-vpn-bgp.md (+297), docs/configexamples/index.md (+1).
  • This pass focused on the delta between 6c3f55a and 7662f4c (7 lines changed in the Prerequisites and Google Cloud configuration sections); the base-commit review's findings on ~45 CLI paths against .vyos-1x/current still stand and were not re-checked line-by-line.
  • Branch reviewed: rolling (vyos-1x: current).
    · Branch: docs-gcp-ha-vpn-bgp-example

@jeleel-muibi

Copy link
Copy Markdown
Contributor Author

Hi maintainers, checking whether any further changes are needed for the GCP HA VPN example. The earlier automated findings have been resolved, and I’m happy to address any additional feedback. Thanks.

@sever-sever
sever-sever requested review from dmbaturin and zdc August 11, 2026 17:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Development

Successfully merging this pull request may close these issues.

1 participant