Skip to content

docs: update onboarding docs - #27

Open
yanksyoon wants to merge 6 commits into
mainfrom
docs/update-onboarding-docs
Open

docs: update onboarding docs#27
yanksyoon wants to merge 6 commits into
mainfrom
docs/update-onboarding-docs

Conversation

@yanksyoon

@yanksyoon yanksyoon commented Sep 10, 2026

Copy link
Copy Markdown
Member

What this PR does

  • Completes the Cloudflared Operators onboarding documentation.
  • Replaces the remaining starter-pack placeholder content in the published documentation.
  • Adds how-to guidance for exposing a frontend application and using the configurator.
  • Documents the actual charm configuration, actions, relations, COS metrics, lifecycle events, security model, and deployment flow.
  • Updates the tutorials and indexes so the new and existing pages are discoverable.
  • Keeps the contribution guide structure and links it to the repository sources.
  • Adds the local Vale vocabulary and Lychee configuration needed for the documentation checks.

Why we need it

The documentation still contained generic charm-template text and incomplete references. It also did not clearly explain that cloudflared is a subordinate machine charm, how it relates to a principal application, or how the configurator passes tunnel settings. This PR gives operators source-backed instructions for deploying, configuring, integrating, troubleshooting, and upgrading the charms.

Test plan

  • make -f Makefile.docs docs-check
    • Vale: 0 errors, 0 warnings, and 0 suggestions.
    • Lychee: 0 errors.
  • Strict Sphinx dummy build with warnings treated as errors: passed.
  • git diff --check: passed.
  • Verified that all documentation toctree and cross-reference targets resolve.
  • Verified that no TODO or starter-template placeholder markers remain under docs/.

Review focus

  • Confirm that the documented cloudflared-route, juju-info, ingress, and cos-agent relation directions match the charm metadata.
  • Confirm that the deployment and DNS guidance reflects a subordinate machine charm rather than a Kubernetes-only workload.
  • Confirm that the action and metrics descriptions remain aligned with the current charm source.
  • Confirm that the expanded onboarding content is appropriate for the project’s intended users.

Potential breaking changes

None. This PR changes documentation and documentation lint configuration only. It does not change charm runtime behavior, interfaces, configuration keys, or workflows.

Dependencies, APIs, and workflow changes

No runtime dependencies or APIs are added. lychee.toml configures the existing documentation link checker, and the local Vale vocabulary adds project-specific terms.

Checklist

  • I followed the contributing guide
  • I added or updated the documentation.
  • No separate release note is required; this is a documentation-only change.
  • I used AI to assist with preparing this PR.
  • I ran the relevant documentation checks.
  • I added or updated tests as needed (not applicable to this documentation-only change).

@github-actions github-actions 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.

license-eye has checked 116 files.

Valid Invalid Ignored Fixed
32 1 83 0
Click to see the invalid file list
  • lychee.toml
Use this command to fix any missing license headers
```bash

docker run -it --rm -v $(pwd):/github/workspace apache/skywalking-eyes header fix

</details>

Comment thread lychee.toml

@github-actions github-actions 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.

license-eye has checked 116 files.

Valid Invalid Ignored Fixed
32 1 83 0
Click to see the invalid file list
  • lychee.toml
Use this command to fix any missing license headers
```bash

docker run -it --rm -v $(pwd):/github/workspace apache/skywalking-eyes header fix

</details>

Comment thread lychee.toml

@yanksyoon yanksyoon left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Initial review

Comment thread .vale/styles/config/vocabularies/local/accept.txt
Comment thread docs/explanation/security.rst Outdated
Comment thread docs/how-to/configure-dns.rst Outdated
Comment thread docs/how-to/contribute.rst
Comment thread docs/reference/actions.rst Outdated
Comment thread docs/reference/charm-architecture.rst Outdated
Comment thread docs/tutorial/basic-deployment.rst
Comment thread docs/tutorial/basic-deployment.rst
Comment thread docs/tutorial/index.rst Outdated
yanksyoon and others added 2 commits September 10, 2026 05:21
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@yanksyoon
yanksyoon marked this pull request as ready for review September 10, 2026 06:18
@yanksyoon
yanksyoon requested a review from a team as a code owner September 10, 2026 06:18
@yanksyoon
yanksyoon requested a lite review from Copilot September 10, 2026 06:18

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Changes recommended

CONTRIBUTING.md contains incorrect/non-existent build instructions (and an incorrect clone URL), and a couple of DNS “fallback” claims in docs don’t reliably match the current charm implementation.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR refreshes the Cloudflared Operators documentation to replace charm-template placeholders with source-aligned onboarding material, including tutorials, how-to guides, and reference/explanation pages, plus documentation-lint configuration.

Changes:

  • Rewrites tutorial, how-to, reference, and explanation content to document the cloudflared (subordinate machine) and cloudflare-configurator charms and their relations/configuration.
  • Updates docs navigation (indexes/toctrees) and adds new how-to pages (expose frontend, use configurator).
  • Adds documentation-check configuration (Lychee config + local Vale vocabulary).
File summaries
File Description
README.md Adjusts repository README heading.
lychee.toml Adds Lychee exclusions for internal doc URLs.
docs/index.rst Replaces template landing page text and updates navigation/table links.
docs/tutorial/index.rst Updates tutorial index copy and toctree entries.
docs/tutorial/basic-deployment.rst Replaces placeholder tutorial with machine-model deployment/integration steps.
docs/tutorial/advanced-deployment.rst Adds advanced operational guidance (DNS, multiple tunnels, snap channels, COS).
docs/how-to/index.rst Adds/updates how-to index entries.
docs/how-to/configure-dns.rst Documents DNS resolution behavior and nameserver option usage.
docs/how-to/expose-frontend.rst New guide for exposing a frontend via ingress.
docs/how-to/use-configurator.rst New guide for configurator usage and secret handling.
docs/how-to/integrate-with-cos.rst Documents COS integration via cos-agent.
docs/how-to/redeploy.rst Documents redeploy workflow in a new model.
docs/how-to/upgrade.rst Documents refresh/upgrade workflow for both charms.
docs/how-to/troubleshoot.rst Adds troubleshooting checks for relations/config/secrets.
docs/how-to/terraform.rst States Terraform is not currently supported and gives alternative path.
docs/how-to/back-up-restore.rst Describes what to preserve (topology/config/secrets) given no DB.
docs/how-to/contribute.rst Updates contribution links to repository sources and issue tracker.
docs/reference/index.rst Replaces template reference index copy with Cloudflared-specific structure.
docs/reference/actions.rst Links to Charmhub actions page for configurator.
docs/reference/configurations.rst Documents charm configuration keys and intent.
docs/reference/relation-endpoints.rst Documents relation endpoints, directions, and example integrate commands.
docs/reference/metrics.rst Documents COS metrics exposure and port allocation scheme.
docs/reference/juju-events.rst Documents observed Juju events for both charms.
docs/reference/high-level-deployment.rst Documents deployment model and relation topology (subordinate + configurator).
docs/reference/charm-architecture.rst Replaces template architecture text with snap/subordinate architecture overview.
docs/reference/cryptographic-overview.rst Documents security boundary (Juju secrets + Cloudflare tunnel).
docs/reference/terraform.rst Notes absence of Terraform modules in repo and links to Juju deployment path.
docs/release-notes/index.rst Replaces template release-notes landing page with project-specific policy/links.
docs/explanation/index.rst Updates explanation index to Cloudflared-specific context.
docs/explanation/charm-design.rst Explains the split between workload execution and configuration provider.
docs/explanation/security.rst Documents secret flow and points to upstream Cloudflare guidance.
docs/changelog.rst Adds/links a changelog page in docs navigation.
CONTRIBUTING.md Updates contribution guide links and commands.
.vale/styles/config/vocabularies/local/accept.txt Adds project terms to Vale local vocabulary.
Review details
  • Files reviewed: 34/34 changed files
  • Comments generated: 5
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread CONTRIBUTING.md Outdated
Comment thread CONTRIBUTING.md Outdated
Comment thread docs/how-to/configure-dns.rst Outdated
Comment thread docs/reference/configurations.rst Outdated
Comment thread docs/changelog.rst Outdated
@yanksyoon yanksyoon added the no-release-note This PR does not require a change artifact label Sep 10, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Test results for commit 3792efa

Test coverage for 3792efa

Name           Stmts   Miss Branch BrPart  Cover   Missing
----------------------------------------------------------
src/charm.py      69      0     20      0   100%
----------------------------------------------------------
TOTAL             69      0     20      0   100%

Static code analysis report

Run started:2026-09-10 06:36:45.104325+00:00

Test results:
  No issues identified.

Code scanned:
  Total lines of code: 509
  Total lines skipped (#nosec): 0
  Total potential issues skipped due to specifically being disabled (e.g., #nosec BXXX): 0

Run metrics:
  Total issues (by severity):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
  Total issues (by confidence):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
Files skipped (0):

@github-actions

Copy link
Copy Markdown
Contributor

Test results for commit 3792efa

Test coverage for 3792efa

Name           Stmts   Miss Branch BrPart  Cover   Missing
----------------------------------------------------------
src/charm.py     159     62     52      5    57%   88-89, 112->114, 117-156, 164, 176-185, 212, 221-226, 234-247, 256-266, 283-293, 303-306, 325
----------------------------------------------------------
TOTAL            159     62     52      5    57%

Static code analysis report

Run started:2026-09-10 06:36:46.283696+00:00

Test results:
  No issues identified.

Code scanned:
  Total lines of code: 800
  Total lines skipped (#nosec): 7
  Total potential issues skipped due to specifically being disabled (e.g., #nosec BXXX): 0

Run metrics:
  Total issues (by severity):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
  Total issues (by confidence):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
Files skipped (0):

@erinecon erinecon added the documentation Improvements or additions to documentation label Sep 10, 2026

@erinecon erinecon 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.

Thanks so much for all your work on expanding this documentation set 🚀 I've gone through the explanation material (no comments) and how-to guides today. Thanks for your patience on the remaining pages :)

Comment on lines +18 to +19
Set a custom DNS resolver
-------------------------

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.

Nit: I'm not convinced that this section header adds anything to the guide, I would remove it

@@ -0,0 +1,49 @@
.. meta::
:description: Expose an application through a Cloudflare Tunnel managed by Juju.

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.

Suggested change
:description: Expose an application through a Cloudflare Tunnel managed by Juju.
:description: Learn how to expose an application through a Cloudflare Tunnel managed by Juju.

nit, I think it's good practice to phrase how-to metadata descriptions as a learning/instruction-based experience

``ingress`` interface and provides ``juju-info``.
- The ``cloudflared`` and ``cloudflare-configurator`` charms are deployed and
integrated.
- A tunnel token is configured on ``cloudflare-configurator``.

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.

Is this configuration covered here https://github.com/canonical/cloudflared-operators/blob/3792efa488f304e5f3427945127934836a2bc425/docs/how-to/use-configurator.rst#update-tunnel-credentials ?

I think it would be good to link a guide here so users are empowered to complete the prerequisites independently. You could either reference the full guide using how_to_use_configurator, or add a target above the Update tunnel credentials header to reference the specific section.

@@ -1,11 +1,26 @@
.. meta::
:description: How to integrate the __charm_name__ charm with the Canonical Observability Stack (COS).
:description: Integrate the cloudflared charm with the Canonical Observability Stack.

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.

Suggested change
:description: Integrate the cloudflared charm with the Canonical Observability Stack.
:description: Learn how to integrate the cloudflared charm with the Canonical Observability Stack.

Comment on lines +9 to +11
The ``cloudflared`` charm provides the ``cos-agent`` relation. It publishes the
metrics endpoints for its installed ``charmed-cloudflared`` snap instances and
its Grafana dashboard through this relation.

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.

Nit: I think it would be a nice enhancement to explicitly mention the Canonical Observability Stack in this intro (thus defining the COS acronym) and link to https://documentation.ubuntu.com/observability/latest/

Comment on lines +29 to +30
* Check the configured snap channel when a snap instance cannot be installed or
refreshed.

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.

Nit: This item breaks consistency with the rest of the list. The rest of the list is framed as conditions to check or meet, while this item is an instruction in the event something went wrong. I would place this text in the paragraph below

Comment thread docs/how-to/upgrade.rst
Comment on lines +18 to +21
.. code-block:: bash

juju refresh cloudflared
juju refresh cloudflare-configurator

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.

I have a question about refreshing these charms in the same deployment. Are they upgraded together, or are specific combinations of revisions checked? If I refresh cloudflared only, will I run into any breaking changes or revision mismatches?

I'm wondering whether we should recommend/instruct users to refresh both charms simultaneously, or warn users that refreshing only one charm might cause conflicts with the un-refreshed charm

Comment on lines +14 to +18
Prerequisites
-------------

Deploy and integrate both charms. The :ref:`basic deployment tutorial
<tutorial_basic_deployment>` shows the complete relation setup.

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.

Not really sure that this section adds much value, it's an underlying assumption in the how-to guides that you have these charms deployed. I would remove the section


.. code-block:: bash

juju config cloudflare-configurator domain="$CLOUDFLARE_PUBLIC_HOSTNAME"

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.

Nit: Since you've opted for an environment variable rather than a placeholder like <Cloudflare public hostname>, consider surfacing that explicitly in the instruction above, something like

Save the hostname that should be published to the related frontend application to ``CLOUDFLARE_PUBLIC_HOSTNAME``, then set the hostname:

Comment on lines +63 to +64
Do not put the token directly in a documentation example or public
configuration file.

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.

Suggested change
Do not put the token directly in a documentation example or public
configuration file.
Do not put the token directly in a public configuration file.

nit, for conciseness (not really sure we need to reference docs here)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation Libraries: Out of sync no-release-note This PR does not require a change artifact

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants