Skip to content

Conversation

@gberenice
Copy link
Member

@gberenice gberenice commented Feb 5, 2025

what

  • Adds "Steps to Break Up a Terralith" blog post resources.

why

  • This is an update for March release.

references

Summary by CodeRabbit

  • Documentation

    • Added a comprehensive guide on breaking up a Terralith, addressing challenges and considerations for transitioning from a monolithic infrastructure setup to a modular configuration.
    • The guide includes a step-by-step migration process, best practices for validating new modules, and tips for automating the migration while coordinating with teams to minimize conflicts.
    • Included a checklist for breaking up a Terralith and a callout for assistance.
  • Style

    • Adjusted CSS styles for improved readability and layout clarity, including consistent font sizes and spacing for paragraphs, list elements, and images.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 5, 2025

Walkthrough

A new file, content/updates/steps-to-break-up-a-terralith.md, has been added. This document provides a structured guide for breaking up a monolithic Terraform architecture (Terralith). It includes metadata, a table of contents, and detailed sections covering the symptoms of a Terralith, considerations for migration, and a step-by-step migration process. The guide emphasizes careful planning, resource migration using Terraform 1.5+, and best practices for ensuring infrastructure integrity.

Changes

File Change Summary
content/updates/steps-to-break-up-a-terralith.md New file added that offers a detailed guide on breaking up a monolithic Terralith setup. The document covers planning, backup creation, module restructuring, resource migration, and validation steps.
assets/css/custom.scss Modified CSS styles, specifically adjusting font-size, margin-top, and margin-bottom for p, ul, and li elements to ensure consistent spacing and formatting.

Sequence Diagram(s)

sequenceDiagram
    participant O as Operator
    participant G as Guide
    participant T as Terraform CLI
    O->>G: Open migration guide for breaking up Terralith
    G->>O: Present steps for plan validation, backup, and modularization
    O->>T: Execute clean plan and perform backup
    T-->>O: Confirm clean state and backup completion
    O->>T: Initiate resource migration and module restructuring
    T-->>O: Return migration status
    O->>G: Validate changes and run tests based on guide recommendations
Loading

Possibly related PRs

  • chore(blog): add case study link to Terralith article #37: The changes in the main PR, which focus on creating a comprehensive guide for breaking down a Terralith, are related to the retrieved PR that enhances the Terralith article by adding a case study link, as both address the Terralith architecture and its challenges.

Suggested reviewers

  • Gowiem
  • oycyc

📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8f1b1f8 and ea0a26e.

📒 Files selected for processing (1)
  • assets/css/custom.scss (6 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • assets/css/custom.scss
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@netlify
Copy link

netlify bot commented Feb 5, 2025

Deploy Preview for masterpoint ready!

Name Link
🔨 Latest commit ea0a26e
🔍 Latest deploy log https://app.netlify.com/sites/masterpoint/deploys/67b4ed27d925ff000889b57d
😎 Deploy Preview https://deploy-preview-46--masterpoint.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 41
Accessibility: 89
Best Practices: 83
SEO: 80
PWA: 70
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify site configuration.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (12)
content/updates/steps-to-break-up-a-terralith.md (12)

1-12: Front Matter and Metadata Block

The YAML front matter is well structured and includes all necessary metadata. One minor suggestion: in the callout on line 11, the HTML snippet uses an opening <b> tag without a corresponding closing </b>. For proper HTML semantics and to avoid rendering issues, please close the tag.

Example diff:

- callout: <p>👋 <b>If you're ready to take your infrastructure to the next level, we're here to help. We love to work together with engineering teams to help them build well-documented, scalable, automated IaC that make their jobs easier. <a href='/contact'>Get in touch!</a></p>
+ callout: <p>👋 <b>If you're ready to take your infrastructure to the next level, we're here to help. We love to work together with engineering teams to help them build well-documented, scalable, automated IaC that make their jobs easier.</b> <a href='/contact'>Get in touch!</a></p>

14-23: Commented-Out Table of Contents

There's a large commented-out block (lines 14–23) containing a Table of Contents. If it’s no longer needed or will be removed soon, consider deleting it to keep the file clean. If it’s intended for future use, adding a brief note clarifying its purpose could be helpful.


33-37: Terminology Consistency for “Antipattern”

On line 35, the term “anti-pattern” is used. Some style guides prefer spelling it as “antipattern” (a single word). Please verify your project’s naming conventions for consistency.

🧰 Tools
🪛 LanguageTool

[misspelling] ~35-~35: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


41-43: Tone and Informality in List Items

The use of “congrats” in the “Slow Plan/Apply Times” (line 41) and “High Blast Radius” (line 43) items introduces a very informal tone. Consider a more neutral phrasing such as “if your plan regularly takes 10 minutes or more, it might indicate you are facing a Terralith” and “this situation increases operational risk.” This enhances the professional tone of the document.

🧰 Tools
🪛 LanguageTool

[style] ~41-~41: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... B. - Slow Plan/Apply Times: Having a large number of resources in a single state file can ca...

(LARGE_NUMBER_OF)


67-71: Clarify Grouping Descriptions

In the “Identify Logical Groupings” section (lines 67–71), the phrase “a large number of resources” appears again. For consistency and brevity, consider replacing it with “many resources.”

🧰 Tools
🪛 LanguageTool

[style] ~71-~71: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


116-122: Rephrase Organizational Questions

The questions under “Key Organizational and Team Questions” are critical, but the phrasing on line 120 (“Do we have a clear understanding of every step in the migration process? Do affected teams?”) feels a bit ambiguous. Consider rephrasing it to something like:

“Do we have a clear, documented process for the migration, and is it well understood by all affected teams?”
This change enhances clarity.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~120-~120: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short).
Context: ... them? - Should we pause all IaC changes so the breakup can be scheduled? If so, wh...

(COMMA_COMPOUND_SENTENCE_2)


[style] ~121-~121: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


134-135: Markdown List Indentation

The unordered list items in the “Confirm a Clean Plan” section (lines 134–135) are indented with extra spaces. For better markdown consistency and to satisfy linting tools (e.g., MD007), adjust the list indentation to use zero or consistent spacing.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

134-134: Unordered list indentation
Expected: 0; Actual: 3

(MD007, ul-indent)


135-135: Unordered list indentation
Expected: 0; Actual: 3

(MD007, ul-indent)


158-161: Possessive Form for Module State

The sentence on line 161 ("...import resources into the new root modules state...") could be clearer regarding possession. If referring to a single module’s state, consider using “new root module’s state” (adding an apostrophe). If multiple modules are meant, then “modules’ state” might be preferable. Please verify the intended meaning and update accordingly.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~161-~161: It seems likely that a singular genitive (’s) apostrophe is missing.
Context: ...s to import resources into the new root modules state and then declaratively remove the...

(AI_HYDRA_LEO_APOSTROPHE_S_XS)


207-208: Avoid Repetitive Sentence Openings

At the beginning of the “Removing resources” section (line 207), two successive sentences start similarly (“To remove them from the code… To remove them from the state…”). Consider merging or varying the sentence structure to improve flow. For example,

“First, delete the resource or module blocks from the Terralith root module that are no longer needed. Then, to remove them from the state without destroying the underlying resources, utilize the [removed] block.”

🧰 Tools
🪛 LanguageTool

[style] ~207-~207: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...you imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


237-288: Shell Script Portability

In the provided migration script (lines 237–288), the shebang indicates #!/bin/bash. For greater portability across systems, consider using #!/usr/bin/env bash instead.

Example diff:

- #!/bin/bash
+ #!/usr/bin/env bash

293-300: Handling Quotes in Code Snippets

In the “Importing and Removing resources” section, the example snippet on line 298 uses double quotes for both the HCL syntax and the resource names. To avoid potential parsing issues, consider using single quotes for the outer string or escaping the inner quotes. For example:

- tofu import module.github_repos["foo"] "foo-repo"
+ tofu import module.github_repos['foo'] 'foo-repo'

338-344: Conclusion Section Enhancements

Several minor improvements can enhance the conclusion’s clarity and tone:

  • Line 338: After “Hence,” add a comma for proper punctuation: “Hence, our emphasis…”
  • Line 342: The phrase “We’ve done this dozens of times…” might be better expressed as “We’ve performed this migration many times…” or “We’ve done this extensively…”
  • Line 344: Instead of “Feel free to reach out…”, consider a more formal call-to-action such as “Contact us with your thoughts, stories, or questions about breaking up Terraliths.”

These adjustments can tighten the prose and better suit a professional audience.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~338-~338: A comma may be missing after the conjunctive/linking adverb ‘Hence’.
Context: ...ill complexity and potential for error. Hence our emphasis on scripts, backups, caref...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)


[grammar] ~342-~342: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~344-~344: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e2cc3b1 and dd3c5cc.

⛔ Files ignored due to path filters (4)
  • static/img/updates/steps-to-break-up-a-terralith/checklist.png is excluded by !**/*.png
  • static/img/updates/steps-to-break-up-a-terralith/decomposition.png is excluded by !**/*.png
  • static/img/updates/steps-to-break-up-a-terralith/main.png is excluded by !**/*.png
  • static/img/updates/steps-to-break-up-a-terralith/preview.png is excluded by !**/*.png
📒 Files selected for processing (1)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~35-~35: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~39-~39: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large State File(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[grammar] ~39-~39: After “between”, use “and”, not “to”.
Context: .... However, our experience suggests that between 30 to 100 resources per state file is the ran...

(BETWEEN_TO_AND)


[style] ~41-~41: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... B. - Slow Plan/Apply Times: Having a large number of resources in a single state file can ca...

(LARGE_NUMBER_OF)


[style] ~71-~71: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[uncategorized] ~120-~120: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short).
Context: ... them? - Should we pause all IaC changes so the breakup can be scheduled? If so, wh...

(COMMA_COMPOUND_SENTENCE_2)


[style] ~121-~121: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~129-~129: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[uncategorized] ~161-~161: It seems likely that a singular genitive (’s) apostrophe is missing.
Context: ...s to import resources into the new root modules state and then declaratively remove the...

(AI_HYDRA_LEO_APOSTROPHE_S_XS)


[style] ~207-~207: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...you imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~217-~217: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~309-~309: The word “backup” is a noun. The verb is spelled with a space.
Context: ...e there any caveats?** - Always backup your state files before performing any ...

(NOUN_VERB_CONFUSION)


[uncategorized] ~338-~338: A comma may be missing after the conjunctive/linking adverb ‘Hence’.
Context: ...ill complexity and potential for error. Hence our emphasis on scripts, backups, caref...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)


[grammar] ~342-~342: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~344-~344: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

134-134: Unordered list indentation
Expected: 0; Actual: 3

(MD007, ul-indent)


135-135: Unordered list indentation
Expected: 0; Actual: 3

(MD007, ul-indent)


163-163: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


210-210: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


219-219: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


312-312: Inconsistent indentation for list items at the same level
Expected: 3; Actual: 0

(MD005, list-indent)


331-331: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint

@gberenice gberenice force-pushed the feature/break-up-terralith branch from f1c144a to acb83ae Compare February 6, 2025 16:58
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (2)
content/updates/steps-to-break-up-a-terralith.md (2)

25-28: 🛠️ Refactor suggestion

Clarify the Opening Sentence
The opening sentence on line 27 (“Do you manage you’ve been managing your infrastructure…”) contains a redundancy. For clarity, consider rephrasing it. For example:

- Do you manage you’ve been managing your infrastructure with Terraform or OpenTofu (collectively referred to from here on out as TF)?
+ Have you been managing your infrastructure with Terraform or OpenTofu (collectively referred to from here on out as TF)?

39-39: 🛠️ Refactor suggestion

Correct Numerical Range Phrasing
The phrase “between 30 to 100 resources per state file” should use “and” instead of “to” for clarity and grammatical correctness. For example:

- ... our experience suggests that between 30 to 100 resources per state file ...
+ ... our experience suggests that between 30 and 100 resources per state file ...
🧰 Tools
🪛 LanguageTool

[style] ~39-~39: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[grammar] ~39-~39: After “between”, use “and”, not “to”.
Context: ...However, our experience suggests that between 30 to 100 resources per state file is the range...

(BETWEEN_TO_AND)

🧹 Nitpick comments (2)
content/updates/steps-to-break-up-a-terralith.md (2)

14-23: Commented Table of Contents Block
A block of HTML for a Table of Contents is commented out. If it’s no longer needed, consider removing it to reduce noise in the file. Otherwise, leave a brief note explaining its future purpose.


338-338: Adjust Heading Spacing
The heading on line 338 has extra spaces after the hash. Consistent atx heading style recommends a single space. For example:

- ##  Grab Our Terralith Breakup Checklist
+ ## Grab Our Terralith Breakup Checklist
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

338-338: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between dd3c5cc and f1c144a.

📒 Files selected for processing (1)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~35-~35: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~39-~39: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[grammar] ~39-~39: After “between”, use “and”, not “to”.
Context: ...However, our experience suggests that between 30 to 100 resources per state file is the range...

(BETWEEN_TO_AND)


[style] ~41-~41: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...low plan/apply operations**: Having a large number of resources in a single state file can ca...

(LARGE_NUMBER_OF)


[style] ~71-~71: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[uncategorized] ~122-~122: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short).
Context: ... them? - Should we pause all IaC changes so the breakup can be scheduled? If so, wh...

(COMMA_COMPOUND_SENTENCE_2)


[style] ~123-~123: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~131-~131: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[uncategorized] ~347-~347: A comma may be missing after the conjunctive/linking adverb ‘Hence’.
Context: ...ill complexity and potential for error. Hence our emphasis on scripts, backups, caref...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)


[grammar] ~351-~351: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~353-~353: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

137-137: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


138-138: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


168-168: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


170-170: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


238-238: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


321-321: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


338-338: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint
🔇 Additional comments (3)
content/updates/steps-to-break-up-a-terralith.md (3)

1-12: Front Matter Formatting Review
The YAML front matter is well structured and declares all the necessary metadata. For consistency and to protect HTML content, you might consider quoting fields that include inline HTML (e.g. the callout value).


316-316: Use the Correct Verb Form for “Backup”
On line 316, the phrase “Always backup your state files…” uses “backup” as a noun, but as a verb it should be written as “back up.” Consider updating this for clarity:

- Always backup your state files before performing any state manipulations.
+ Always back up your state files before performing any state manipulations.

347-354: Refine Conclusion Phrasing and Punctuation
There are a few small issues in the conclusion section:

  • On line 347, add a comma after “Hence” for correct punctuation.
  • On line 351, “We’ve done this dozens of times…” can be confusing; consider rephrasing to “We’ve done it dozens of times…” for clarity.
  • On line 353, consider replacing “Feel free to reach out…” with a more assertive invitation such as “Don’t hesitate to share your thoughts…” to sound more professional. For example:
- Hence our emphasis on scripts, backups, careful planning, and validation.
+ Hence, our emphasis on scripts, backups, careful planning, and validation.
- We’ve done this dozens of times and can help guide you through breaking up your Terralith...
+ We’ve done it dozens of times and can help guide you through breaking up your Terralith...
- Feel free to reach out with your thoughts, stories, and experiences about breaking up Terraliths!
+ Don't hesitate to share your thoughts, stories, and experiences about breaking up Terraliths!
🧰 Tools
🪛 LanguageTool

[uncategorized] ~347-~347: A comma may be missing after the conjunctive/linking adverb ‘Hence’.
Context: ...ill complexity and potential for error. Hence our emphasis on scripts, backups, caref...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)


[grammar] ~351-~351: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~353-~353: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (9)
content/updates/steps-to-break-up-a-terralith.md (9)

1-12: Front Matter Validation
The frontmatter is well-structured and clearly defines metadata for the blog post. Consider quoting complex values (like the HTML in the callout field) to ensure YAML parsing consistency.


14-23: Commented Table of Contents
There is a sizable commented-out section for the Table of Contents. If this is intended as a placeholder for future content, consider adding a clarifying note; otherwise, it might be cleaner to remove it to reduce visual clutter.


25-32: Overview Section Clarity
The introduction effectively outlines the post’s purpose and the challenges involved. For improved readability, you might consider simplifying the explanation around the TF abbreviation (e.g., “Terraform or OpenTofu”) into a more concise form.


33-44: Grammar Improvement in "Why Is It a Problem?"
On line 39, change “between 30 to 100 resources per state file” to “between 30 and 100 resources per state file” for grammatical accuracy.

- However, our experience suggests that **between 30 to 100 resources per state file** is the range that strikes a good balance...
+ However, our experience suggests that **between 30 and 100 resources per state file** is the range that strikes a good balance...
🧰 Tools
🪛 LanguageTool

[misspelling] ~35-~35: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~39-~39: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[grammar] ~39-~39: After “between”, use “and”, not “to”.
Context: ...However, our experience suggests that between 30 to 100 resources per state file is the range...

(BETWEEN_TO_AND)


[style] ~41-~41: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...low plan/apply operations**: Having a large number of resources in a single state file can ca...

(LARGE_NUMBER_OF)


65-97: Conciseness in "Identify Logical Groupings"
On line 71, consider replacing “a large number of resources” with “many resources” to enhance conciseness.

🧰 Tools
🪛 LanguageTool

[style] ~71-~71: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


113-127: Clarification in Organizational Questions
In the list of key organizational questions, particularly around line 123, rephrase “Do affected teams?” to “Do the affected teams have a clear understanding of the migration process?” This will improve clarity and ensure the question stands as a complete thought.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~122-~122: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short).
Context: ... them? - Should we pause all IaC changes so the breakup can be scheduled? If so, wh...

(COMMA_COMPOUND_SENTENCE_2)


[style] ~123-~123: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


207-216: Consolidate Resource Removal Instructions
In Step 5 under "Migrating to Modular Terraform," the instructions for removing resources from the configuration are repeated (lines 211 and 215). Consider consolidating them into one clear statement to avoid redundancy.


178-205: Code Block Formatting for HCL Example
The HCL code snippet demonstrating the use of an import block is informative. To ensure consistency across the document, verify that this snippet is rendered using fenced code block formatting per markdown standards.


346-354: Conclusion Section Refinements

  • Insert a comma after “Hence” on line 347 (i.e., “Hence, our emphasis…”).
  • Rephrase “we’ve done this dozens of times” to “we’ve done this many times” for grammatical accuracy.
  • Consider adopting a more formal closing statement instead of “Feel free to reach out…” to better match the professional tone of the post.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~347-~347: A comma may be missing after the conjunctive/linking adverb ‘Hence’.
Context: ...ill complexity and potential for error. Hence our emphasis on scripts, backups, caref...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)


[grammar] ~351-~351: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~353-~353: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f1c144a and acb83ae.

📒 Files selected for processing (1)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~35-~35: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~39-~39: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[grammar] ~39-~39: After “between”, use “and”, not “to”.
Context: ...However, our experience suggests that between 30 to 100 resources per state file is the range...

(BETWEEN_TO_AND)


[style] ~41-~41: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...low plan/apply operations**: Having a large number of resources in a single state file can ca...

(LARGE_NUMBER_OF)


[style] ~71-~71: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[uncategorized] ~122-~122: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short).
Context: ... them? - Should we pause all IaC changes so the breakup can be scheduled? If so, wh...

(COMMA_COMPOUND_SENTENCE_2)


[style] ~123-~123: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~131-~131: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[uncategorized] ~347-~347: A comma may be missing after the conjunctive/linking adverb ‘Hence’.
Context: ...ill complexity and potential for error. Hence our emphasis on scripts, backups, caref...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)


[grammar] ~351-~351: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~353-~353: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

137-137: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


138-138: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


168-168: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


170-170: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


238-238: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


321-321: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


338-338: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint

@gberenice gberenice force-pushed the feature/break-up-terralith branch 2 times, most recently from 1c8c9c8 to a3d39a6 Compare February 7, 2025 13:31
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (10)
content/updates/steps-to-break-up-a-terralith.md (10)

31-38: Overview Section – Clarify the Opening Sentence
Consider rephrasing the opening sentence for improved clarity. For example, instead of:
"Do you manage your infrastructure with Terraform or OpenTofu (collectively referred to from here on out as TF)?"
you could use:
"Do you manage your infrastructure using Terraform or OpenTofu (TF)?"
This tighter wording enhances readability.


39-50: Refine Description in the “Why Is It a Problem?” Section
In line 45, the phrase "a large number of resources" can be made more concise. Consider:

- A large number of resources are stuffed into a single `.tfstate` state file.
+ Many resources are stuffed into a single `.tfstate` state file.

This small change improves readability without altering the meaning.

🧰 Tools
🪛 LanguageTool

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


77-77: Streamline Wording in Logical Groupings
In the discussion of functional root modules, consider replacing "a large number of resources" with "many resources" to avoid wordiness. For instance:

- ... might still result in a large number of resources within a single module, ...
+ ... might still result in many resources within a single module, ...
🧰 Tools
🪛 LanguageTool

[style] ~77-~77: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


125-132: Punctuation & Clarity in Organizational Questions
In the questions section, a slight punctuation adjustment can improve clarity. For example, consider adding a comma before "so":

- Should we pause all IaC changes so the breakup can be scheduled?
+ Should we pause all IaC changes, so the breakup can be scheduled?

Alternatively, a rephrasing (e.g., "Should we pause all IaC changes and schedule the breakup at a specific time?") might be even clearer.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~128-~128: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short).
Context: ... them? - Should we pause all IaC changes so the breakup can be scheduled? If so, wh...

(COMMA_COMPOUND_SENTENCE_2)


[style] ~129-~129: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


149-154: Enhance Code Block Formatting for Shell Commands
In the “Create a Backup” section, the shell command is presented in an indented block. To improve compatibility with markdownlint and clarity in code rendering, consider using fenced code blocks. For example:

-    tofu state pull > $(date +%F)-terraform-state-backup.tfstate
+```sh
+tofu state pull > $(date +%F)-terraform-state-backup.tfstate
+```

This approach helps ensure proper syntax highlighting and consistency across tools.


252-304: Shell Script Formatting and Best Practices
The migration script is detailed and clear. To further improve readability and satisfy markdownlint recommendations, replace any indented code blocks within this section with fenced code blocks. This adjustment ensures consistency in how code snippets are rendered.


359-359: Grammar Improvement in Conclusion
In the conclusion, the phrase "We’ve done this dozens of times" should be adjusted for grammatical agreement. Consider:

- We’ve done this dozens of times
+ We’ve done these dozens of times
🧰 Tools
🪛 LanguageTool

[grammar] ~359-~359: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


361-362: Refine the Informal Tone in Conclusion
Rather than using the informal "Feel free to reach out with your thoughts, stories, and experiences about breaking up Terraliths!" consider a more formal invitation such as:
"We welcome your feedback and inquiries regarding the Terralith breakup process."
This revision helps maintain a professional tone throughout the post.

🧰 Tools
🪛 LanguageTool

[style] ~361-~361: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)


107-112: Markdown Formatting: Unordered List Indentation
Ensure that unordered list items adhere to markdownlint guidelines regarding indentation. For example, list items in sections like "Assess Dependencies" should start at zero indentation if that is the project standard—this avoids MD007 warnings.


176-178: Consistent Fenced Code Blocks
To address markdownlint warnings (MD046) across the document, consider using fenced code blocks consistently for all code examples instead of any indented blocks. This change enhances readability and tooling compatibility.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

176-176: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


178-178: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between acb83ae and a3d39a6.

📒 Files selected for processing (1)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~77-~77: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[uncategorized] ~128-~128: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short).
Context: ... them? - Should we pause all IaC changes so the breakup can be scheduled? If so, wh...

(COMMA_COMPOUND_SENTENCE_2)


[style] ~129-~129: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~137-~137: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[grammar] ~359-~359: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~361-~361: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

143-143: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


144-144: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


176-176: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


178-178: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


246-246: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


329-329: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


346-346: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint
🔇 Additional comments (3)
content/updates/steps-to-break-up-a-terralith.md (3)

1-12: Metadata Front Matter is Well-Formatted
The YAML front matter is correctly set up with the necessary fields. One minor suggestion: if possible, use YAML-safe formatting for embedded HTML (e.g., in the callout field) to ensure consistent rendering across different static site generators.


15-30: Clear Table of Contents Structure
The table of contents is comprehensive and clearly outlines the document’s sections, making navigation straightforward.


352-362: Overall Readability and Consistency
The guide is comprehensive and clearly outlines the steps to break up a Terralith. Addressing the minor wording, punctuation, and formatting suggestions above will further enhance the document’s clarity and professionalism.

🧰 Tools
🪛 LanguageTool

[grammar] ~359-~359: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~361-~361: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

@gberenice gberenice force-pushed the feature/break-up-terralith branch from a3d39a6 to 3b6d3d4 Compare February 7, 2025 13:40
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (5)
content/updates/steps-to-break-up-a-terralith.md (5)

39-50: Content Refinement in the Problem Statement

  • On line 41, the phrase “Terralith anti-pattern” is used. Consider verifying if the industry standard prefers “antipattern” as one word; if so, update for consistency.
  • On line 45, the wording “a large number of resources” could be made more concise by using an expression such as “many resources” or “numerous resources.”
🧰 Tools
🪛 LanguageTool

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


125-133: Clarification of Team-Related Questions
In the preparatory questions (especially around line 130), the question “Do we have a clear understanding of every step in the migration process? Do affected teams?” comes off as ambiguous. Consider rephrasing it for clarity—for example:
"Are all affected teams fully briefed on each step of the migration process?"
This change will enhance readability and ensure the question targets actionable insight.

🧰 Tools
🪛 LanguageTool

[style] ~130-~130: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


151-155: Consistent Code Block Styling
Several code snippets throughout the document (e.g., the shell script on lines 151–155 and the HCL examples on lines 185–214) are formatted using indented blocks rather than fenced code blocks. For improved consistency and to meet markdownlint recommendations, consider converting these to fenced code blocks (using triple backticks).

Also applies to: 185-214, 245-248, 328-328


345-345: Markdown Heading Formatting
On line 345, there are extra spaces following the heading markers. To adhere to markdown style guidelines, remove the additional spaces. For example, change:
  - "## Grab Our Terralith Breakup Checklist"
  + "## Grab Our Terralith Breakup Checklist"

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

345-345: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)


353-361: Conclusion Section Refinement

  • On line 358, the phrasing “we’ve done this dozens of times” can be improved for grammatical correctness. Consider replacing it with “we’ve done this many times.”
  • On line 360, the informal phrase “Feel free to reach out…” might be rephrased to a more professional tone (for example, “We welcome your thoughts and inquiries…”).
🧰 Tools
🪛 LanguageTool

[grammar] ~358-~358: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~360-~360: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a3d39a6 and 3b6d3d4.

📒 Files selected for processing (1)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~77-~77: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~130-~130: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~138-~138: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[grammar] ~358-~358: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~360-~360: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

173-173: Inconsistent indentation for list items at the same level
Expected: 0; Actual: 2

(MD005, list-indent)


175-175: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


177-177: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


245-245: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


328-328: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


345-345: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint
🔇 Additional comments (3)
content/updates/steps-to-break-up-a-terralith.md (3)

1-12: Metadata and Front Matter Integrity
The YAML front matter is well-structured and provides all the essential metadata for the new blog post. Please double-check that details such as the publication date, slug, and callout message match your intended publication details.


15-30: Table of Contents Structure
The table of contents is clear and helps readers navigate through the post effectively.


31-38: Overview Section Clarity
The "Overview" section introduces the concept of a Terralith in an engaging manner by posing direct questions. This approach is effective at drawing in the reader.

@gberenice gberenice force-pushed the feature/break-up-terralith branch from 3b6d3d4 to 2b52285 Compare February 7, 2025 18:05
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (9)
content/updates/steps-to-break-up-a-terralith.md (9)

15-30: Use Consistent Heading Syntax for the Table of Contents
The Table of Contents is currently rendered using an HTML

tag. For consistency with the rest of the Markdown document, consider replacing it with Markdown header syntax (e.g., “## Table of Contents”).


39-50: Clear Explanation of the Terralith Problem
The “Why Is It a Problem?” section clearly outlines the issues related to monolithic TF architectures. As a minor refinement, consider simplifying phrases like “a large number of resources” to “many resources” to improve conciseness.

🧰 Tools
🪛 LanguageTool

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


71-77: Streamline Language in the “Identify Logical Groupings” Section
The grouping strategy is well explained. You might consider reducing wordiness—for instance, replacing “a large number of resources” with “many resources”—to improve clarity and readability.

🧰 Tools
🪛 LanguageTool

[style] ~77-~77: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


227-232: Refine Comments in the “Removed” Block
The example for removing resources using a removed block is clear. Consider rephrasing the inline comments to avoid repetitive sentence beginnings and to improve flow.


236-244: Caveats Section (Option 1) is Informative
The caveats about provider limitations and immediate removal are clearly communicated. It would be helpful to verify that the bullet indentation complies with markdownlint guidelines for enhanced readability.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

240-240: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


241-241: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


242-242: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


254-306: Shell Script for CLI-Based Migration is Well Structured
The migration script is detailed and includes useful comments. For robustness, consider adding error handling around the state pull and push commands or validating that the required tools (like tofu) are installed and in the expected PATH.


324-327: Adjust Bullet List Indentation in the Second “Are There Any Caveats?” Section
The bullet list here appears to have inconsistent indentation compared to standard Markdown practices (see markdownlint MD007). Correcting the indentation will improve the document’s consistency and readability.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

326-326: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


327-327: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


354-365: Conclusion Section – Tone and Word Choice Refinements
The concluding remarks are clear and offer a good summary. As a minor suggestion, consider replacing “dozens” with “many” (to align with standard tone) and using a more formal invitation rather than “Feel free to reach out” to maintain a professional tone.

🧰 Tools
🪛 LanguageTool

[grammar] ~362-~362: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~364-~364: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)


15-365: Overall Markdown Styling and Linting Adjustments
Throughout the document, several static analysis hints (e.g., MD036 for heading styling, MD007 for unordered list indentation, and MD019 for spacing issues) were flagged. Addressing these markdownlint suggestions—such as using consistent Markdown headers instead of emphasis for section titles and ensuring proper bullet list indentation—will improve the overall consistency and professionalism of the document.

🧰 Tools
🪛 LanguageTool

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~77-~77: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~131-~131: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~139-~139: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[style] ~225-~225: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...u imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~234-~234: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~362-~362: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~364-~364: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)

176-176: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


180-180: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


219-219: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


240-240: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


241-241: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


242-242: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


246-246: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


308-308: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


314-314: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


315-315: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


320-320: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


326-326: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


327-327: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


348-348: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3b6d3d4 and 2b52285.

📒 Files selected for processing (1)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~77-~77: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~131-~131: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~139-~139: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[style] ~225-~225: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...u imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~234-~234: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~362-~362: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~364-~364: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

176-176: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


180-180: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


219-219: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


240-240: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


241-241: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


242-242: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


246-246: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


308-308: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


314-314: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


315-315: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


320-320: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


326-326: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


327-327: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


348-348: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint
🔇 Additional comments (4)
content/updates/steps-to-break-up-a-terralith.md (4)

1-12: Frontmatter Metadata is Solid
The frontmatter contains all the required keys (visible, draft, title, author, slug, date, description, image, preview_image, callout) and appears well structured. Ensure that these keys align with your site generator’s expectations.


31-38: Overview Section is Clear and Informative
The “Overview” section succinctly introduces the Terralith problem and sets up the guide effectively. No changes required here.


206-216: Import Block Configuration Looks Good
The import block is well structured and provides a clear example of how to iterate over resources for import.


308-318: Importing and Removing Resources Example is Concise
The provided HCL examples for importing and then removing resources from state demonstrate best practices effectively. No changes are required here.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

308-308: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


314-314: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


315-315: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)

@gberenice gberenice force-pushed the feature/break-up-terralith branch from 2b52285 to 79301a1 Compare February 7, 2025 18:13
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (7)
content/updates/steps-to-break-up-a-terralith.md (7)

39-42: Consistent Spelling for ‘Antipattern’
On line 41 the term "anti-pattern" is used. Typically, it’s spelled as a single compound word ("antipattern"). Consider unifying the spelling throughout the document.

🧰 Tools
🪛 LanguageTool

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


43-45: Reduce Wordiness in Describing Resource Counts
In line 45, the phrase "a large number of resources" could be simplified (e.g. “many resources”) to improve clarity and reduce verbosity.

🧰 Tools
🪛 LanguageTool

[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


71-77: Clarify Language in Logical Groupings Section
Within the explanation of Functional Root Modules (around line 77), consider replacing “a large number of resources” with “many resources” for brevity and improved readability.

🧰 Tools
🪛 LanguageTool

[style] ~77-~77: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


136-138: Enhance Introductory Punctuation in Migration Section
In the opening of the "Migrating to Modular Terraform" section (line 138), a comma is missing after “experience.” Inserting a comma there will improve the flow of the sentence.

🧰 Tools
🪛 LanguageTool

[typographical] ~138-~138: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


220-226: Vary Sentence Openings in Removal Instructions
In the explanation for removing resources (lines 220-226), multiple sentences start similarly. Consider rephrasing one or more sentences (for example, by varying the introductory words) to improve readability and avoid repetitive structure.

🧰 Tools
🪛 LanguageTool

[style] ~226-~226: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


235-235: Punctuation Improvement in Migration Summary Sentence
At line 235, insert a comma before “and” to properly separate the independent clauses in the sentence.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~235-~235: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


349-358: Refine Conclusion's Tone and Grammar
In the Conclusion section, consider revising “We’ve done this dozens of times…” to either “We’ve done it dozens of times…” or “We’ve done this many times…” for grammatical agreement. Additionally, the informal phrase “Feel free to reach out…” could be rephrased to a slightly more professional tone (e.g. “We welcome your insights and feedback on breaking up Terraliths”).

🧰 Tools
🪛 LanguageTool

[grammar] ~355-~355: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~357-~357: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2b52285 and 79301a1.

📒 Files selected for processing (1)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~77-~77: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~130-~130: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~138-~138: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[style] ~226-~226: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~235-~235: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~355-~355: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~357-~357: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

341-341: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint
🔇 Additional comments (5)
content/updates/steps-to-break-up-a-terralith.md (5)

1-12: Metadata Block is Well-Structured
The YAML metadata is clear and complete. All keys (visible, draft, title, author, etc.) are provided, and the external asset paths (images, callout HTML) appear correctly formatted.


15-29: Table of Contents Looks Organized
The Table of Contents is appropriately structured with a clear list linking to the subsequent sections. Please verify that the generated anchor links (case-sensitive and punctuation) match your section headers when rendered.


31-38: Overview Section Provides a Concise Introduction
The introductory questions and context effectively set up the topic. The writing is clear and engages the reader by outlining the issues (slow plan/apply, blast radius, etc.).


189-194: Standardize Quotes in Terraform Code Block
Within the HCL example (lines 192-194), typographic (curly) quotes are used around resource descriptions. Replace them with straight ASCII double quotes to ensure proper parsing by Terraform.


247-317: CLI Migration Option is Detailed and Practical
The "Migration Using CLI Commands" section, including the example shell script, is comprehensive and clearly explains the migration process. Verify that the environment assumptions (e.g. directory structure and tool availability) match your deployment context.

@gberenice gberenice force-pushed the feature/break-up-terralith branch from 79301a1 to 83097f6 Compare February 7, 2025 18:18
@gberenice gberenice requested a review from a team February 7, 2025 18:18
@gberenice gberenice force-pushed the feature/break-up-terralith branch from 83097f6 to e290464 Compare February 10, 2025 13:42
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (4)
content/updates/steps-to-break-up-a-terralith.md (4)

15-29: Table of Contents Structure

The Table of Contents is well-organized and gives a clear outline of the post. Note that markdown linters (MD007) may flag the current bullet indentations; consider adjusting them if needed.


71-97: Identifying Logical Groupings

This section provides practical strategies for splitting a Terralith into functional or fine-grained root modules.
Suggestion: Some phrases (e.g., "a large number of resources") could be streamlined (for instance, using "numerous" or specifying numbers where possible) to reduce wordiness.

🧰 Tools
🪛 LanguageTool

[style] ~77-~77: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


229-230: Concluding Step 5

The sentence concluding step 5 could benefit from a slight punctuation tweak—for example, inserting a comma before "and" to improve readability.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~230-~230: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


344-349: Checklist Heading Formatting

There are extra spaces after the hash in the "Grab Our Terralith Breakup Checklist" heading. This can be cleaned up to meet markdown style guidelines.

Proposed diff:

-##  Grab Our Terralith Breakup Checklist
+## Grab Our Terralith Breakup Checklist
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

344-344: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 79301a1 and e290464.

📒 Files selected for processing (1)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~77-~77: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~130-~130: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~138-~138: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[style] ~221-~221: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~230-~230: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~358-~358: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~360-~360: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

158-158: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


159-159: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


160-160: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


322-322: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


323-323: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


344-344: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint
🔇 Additional comments (21)
content/updates/steps-to-break-up-a-terralith.md (21)

1-12: Front Matter and Metadata Validation

The front matter includes all the essential metadata (visibility, draft flag, title, author, date, image paths, etc.) needed for the post. Please confirm that the values (e.g., the draft flag and date) match your publication requirements.


31-38: Overview Section Clarity

The "Overview" section clearly introduces the problem of managing infrastructure in a monolithic Terraform setup. The questions posed engage the reader effectively.


39-54: Problem Statement and Symptoms

The "Why Is It a Problem?" section provides a compelling description of the Terralith anti-pattern and its symptoms. The explanation is clear and detailed.

🧰 Tools
🪛 LanguageTool

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


55-60: Pre-Migration Preparation

The section "Before You Get Started — What You Need to Think About" introduces crucial preparatory considerations and includes a relevant image. The content is informative and well laid out.


61-69: Version Selection Guidance

The section on version selection clearly advises readers to upgrade to Terraform/OpenTofu 1.5+ (preferably 1.7+) for the benefits of new language features. The recommendations and link references are spot on.


98-102: Update Frequency Consideration

The bullet point discussing update frequency is clear and effectively highlights the rationale for splitting resources based on how often they change.


104-113: Dependency Analysis Explanation

The "Assess Dependencies" section outlines actionable steps to review dependencies—such as using text searches and Terraform’s graph commands. This guidance is practical and easy to follow.


114-119: State Management Recommendations

The instructions for managing multiple state files (including using cloud storage and versioning) are well-described and supported by a useful reference.


120-134: Organizational and Team Considerations

The list of key questions regarding organizational changes and team coordination is comprehensive. It effectively highlights non-technical challenges associated with migrating from a Terralith.

🧰 Tools
🪛 LanguageTool

[style] ~130-~130: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


136-146: Clean Plan Verification

Under "Migrating to Modular Terraform," the first step emphasizes confirming that your Terraform plan is clean before proceeding. This clear directive helps ensure a smooth migration.

🧰 Tools
🪛 LanguageTool

[typographical] ~138-~138: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


147-155: State Backup Procedure

The backup instructions (with the example using tofu state pull and a timestamped file) are clear and follow best practices to protect state integrity.


156-161: New Module Structure Setup

The directions for creating new module structures are straightforward. They clearly state to move configurations into new directories and initialize them.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

158-158: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


159-159: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


160-160: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


162-167: Inter-Module Communication Guidance

The explanation on updating inter-module dependencies and recommending the use of data sources (instead of terraform_remote_state) is very helpful.


184-213: HCL Import Block Example – Quote Standardization

The sample HCL configuration demonstrates how to import multiple GitHub repositories using a for_each loop. Important: The description values in lines 188–189 use curly (typographic) quotes. Terraform expects standard straight quotes to avoid potential parsing issues.

Proposed diff:

-      "repo-foo": { description = “Our repo foo” },
-      "repo-bar": { description = “Our repo bar” },
+      "repo-foo": { description = "Our repo foo" },
+      "repo-bar": { description = "Our repo bar" },

223-228: Removal Block Clarity

The removed block is clearly shown and explains how to declaratively remove resources from the state without destroying them. Ensure rigorous testing of this process to avoid unintended state modifications.


242-300: CLI-Based Migration Script

The alternative migration approach using CLI commands is well documented. The shell script is clear, uses best practices (set -eu -o pipefail), and provides useful comments for each step. Great job.


304-319: Importing and Removing Resources via CLI

The two command examples showing how to import and remove resources using tofu commands are concise and well presented.


325-329: New Modules Validation Step

The recommendation to run terraform plan in the new modules for validation is essential and clearly stated.


330-336: Final Infrastructure Check

The "Final Check" section appropriately emphasizes automated testing and monitoring. The actionable tips provided here help ensure ongoing infrastructure integrity.


337-343: Final Tips Summary

The final tips are practical and cover automation, testing in lower environments, and team coordination. They effectively round out the guide.


352-360: Conclusion Section – Tone and Grammar

The concluding section summarizes the essential points well. A couple of improvements are suggested:

  • Rephrase “We’ve done this dozens of times…” to something like “We’ve done this many times…” to improve noun–determiner agreement.
  • Consider a more professional alternative to “Feel free to reach out…” such as “We welcome your feedback on your experiences and insights.”

Proposed diff:

- We also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, and experiences about breaking up Terraliths!
+ We are passionate about this topic and welcome your feedback on your experiences and insights regarding breaking up Terraliths.
🧰 Tools
🪛 LanguageTool

[grammar] ~358-~358: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~360-~360: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

@gberenice gberenice force-pushed the feature/break-up-terralith branch from e290464 to 51d0528 Compare February 10, 2025 13:54
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (6)
content/updates/steps-to-break-up-a-terralith.md (6)

43-52: Symptom Description Enhancements
The bullet point addressing "Large state file(s)" is informative. For brevity and clarity, consider replacing “a large number of resources” with “many resources.”

🧰 Tools
🪛 LanguageTool

[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


75-83: Functional Root Modules Description
The explanation for Functional Root Modules is clear. A minor suggestion is to use “many” instead of “a large number” to enhance conciseness.

🧰 Tools
🪛 LanguageTool

[style] ~77-~77: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


124-132: Team Coordination Questions
The list of organizational questions is valuable. However, the question “Do affected teams?” is ambiguous. Consider rephrasing it to “Are all affected teams aware of the migration steps?” for improved clarity.

🧰 Tools
🪛 LanguageTool

[style] ~130-~130: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


217-222: Clarification in State Removal Instructions
The text refers to “the new root modules state.” For greater clarity, consider using a possessive form (e.g., “the new root module’s state”) if only one module is implied, or clarify if multiple modules are involved.

🧰 Tools
🪛 LanguageTool

[style] ~221-~221: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


223-230: Punctuation for Enhanced Readability
Within the removal instructions, adding a comma before “and” to separate independent clauses would improve readability.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~230-~230: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


350-361: Conclusion and Call to Action
The conclusion effectively summarizes the guide while reinforcing the benefits of a modular approach. Two minor language suggestions:

  • Consider rephrasing “We’ve done this dozens of times” to “We’ve done this many times” for grammatical accuracy.
  • Instead of “feel free to reach out with your thoughts,” a more formal invitation such as “please contact us for further discussion” might better suit the tone.
🧰 Tools
🪛 LanguageTool

[grammar] ~358-~358: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~360-~360: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e290464 and 51d0528.

📒 Files selected for processing (1)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~45-~45: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~77-~77: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~130-~130: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~138-~138: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[uncategorized] ~174-~174: It seems likely that a singular genitive (’s) apostrophe is missing.
Context: ...s to import resources into the new root modules state and then declaratively remove the...

(AI_HYDRA_LEO_APOSTROPHE_S_XS)


[style] ~221-~221: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~230-~230: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~358-~358: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~360-~360: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

344-344: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint
🔇 Additional comments (21)
content/updates/steps-to-break-up-a-terralith.md (21)

15-30: Table of Contents Structure
The table of contents is comprehensive and logically organized, making it easy for readers to navigate the document.


31-38: Overview Section Clarity
The introduction clearly sets the stage for the post by outlining the challenges with Terraliths. It succinctly raises relevant questions that engage the reader.


39-42: Problem Definition
The "Why Is It a Problem?" section effectively explains the issues associated with a monolithic Terralith. The use of descriptive language, such as "insidious," helps underscore the gradual impact of the problem.

🧰 Tools
🪛 LanguageTool

[misspelling] ~41-~41: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


85-97: Fine-Grained Root Modules Explanation
The section on Fine-Grained Root Modules effectively outlines the benefits and trade-offs of breaking down resources into smaller, specialized modules. No changes are needed.


98-102: Update Frequency Insight
The guidance on segregating resources based on their update frequency is presented clearly and will be beneficial for readers planning their migration.


104-113: Assessing Dependencies
The steps for identifying inter-resource dependencies are thorough and actionable, ensuring that potential migration pitfalls are addressed early on.


114-120: State Management Recommendations
The advice on managing multiple state files and using reliable cloud storage for state management is practical and well-articulated.


136-146: Migration Process – Confirm a Clean Plan
The first step emphatically explains the importance of starting with a clean state (via terraform plan) before initiating any migration activities. The instructions are clear and actionable.

🧰 Tools
🪛 LanguageTool

[typographical] ~138-~138: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


147-155: Migration Process – Create a Backup
The backup instructions emphasize safeguarding state files and are clearly detailed. This step is especially critical in preventing data loss.


156-161: Migration Process – Create New Module Structures
The guidance on setting up separate directories for new root modules and ensuring they are properly initialized is straightforward and easy to follow.


162-167: Migration Process – Inter-Module Communication
The recommendations for handling inter-module dependencies and preferring data sources over terraform_remote_state are practical and strengthen module autonomy.


184-213: HCL Code Block – Importing Existing Resources
In the HCL code snippet, typographic (curly) quotes are used in the repository definitions (lines 188–189). Replace these with standard ASCII double quotes (") to ensure compatibility with Terraform parsing.


232-240: Caveats for Resource Migration
The section comprehensively outlines the potential caveats, making readers aware of important limitations and best practices.


241-247: CLI-Based Migration Option
The alternative approach for resource migration using CLI commands is well-explained and provides a solid fallback when declarative imports are not available.


250-302: Shell Script for Migration
The migration script is robust and well-documented, with proper error handling (set -eu -o pipefail). It clearly demonstrates the migration process and serves as an excellent reference.


304-319: Importing and Removing Resources via CLI
The examples provided for importing and removing resources are precise and help illustrate the command usage effectively.


320-324: Additional Caveats
The reiterated caveats reinforce safe practices during migration. They are clear and stress the importance of thorough backups and careful resource identification.


325-329: Validation of New Modules
The importance of validating the new module setups with terraform plan is adequately stressed. This step is crucial to ensure that no inadvertent changes are made during migration.


330-336: Final Check and Validation
The section on the final check, which includes automated testing and monitoring practices, is well-structured and complete.


337-343: Final Tips
The final tips provide actionable advice for a smooth migration. They succinctly summarize key best practices, ensuring that readers are well-prepared for potential challenges.


344-349: Terralith Breakup Checklist Section
The checklist section is enhanced by the inclusion of a relevant image, which aids in visualizing the process. The presentation is clear and engaging.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

344-344: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

@gberenice gberenice removed the request for review from a team February 11, 2025 15:45
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (2)
content/updates/steps-to-break-up-a-terralith.md (2)

1-12: ⚠️ Potential issue

Fix unclosed HTML tag in callout field.

The <b> tag in the callout field is not closed, which may lead to unexpected HTML formatting.

Apply this diff to fix the HTML tag:

-callout: <p>👋 <b>If you're ready to take your infrastructure to the next level, we're here to help. We love to work together with engineering teams to help them build well-documented, scalable, automated IaC that make their jobs easier. <a href='/contact'>Get in touch!</a></p>
+callout: <p>👋 <b>If you're ready to take your infrastructure to the next level, we're here to help.</b> We love to work together with engineering teams to help them build well-documented, scalable, automated IaC that make their jobs easier. <a href='/contact'>Get in touch!</a></p>

196-197: ⚠️ Potential issue

Replace curly quotes with straight quotes in HCL.

The repository descriptions use typographic (curly) quotes which could cause parsing issues in Terraform/OpenTofu.

Apply this diff to fix the quotes:

-    "repo-foo": { description = "Our repo foo" },
-    "repo-bar": { description = "Our repo bar" },
+    "repo-foo": { description = "Our repo foo" },
+    "repo-bar": { description = "Our repo bar" },
🧹 Nitpick comments (4)
content/updates/steps-to-break-up-a-terralith.md (4)

39-39: Improve sentence clarity.

The opening sentence contains redundant phrasing: "Do you manage your infrastructure with Terraform or OpenTofu (collectively referred to from here on out as TF)? Have you noticed long plan and apply durations?"

Apply this diff to improve readability:

-Do you manage your infrastructure with Terraform or OpenTofu (collectively referred to from here on out as TF)? Have you noticed long `plan` and `apply` durations?
+Do you manage your infrastructure with Terraform or OpenTofu (collectively referred to as TF)? Have you noticed long `plan` and `apply` durations?

51-51: Improve grammar and reduce wordiness.

The sentence has two issues:

  1. The phrase "between 30 to 100" should be "between 30 and 100"
  2. "A large number of" can be simplified to "many"

Apply this diff to improve the sentence:

-**Large state file(s)**: A large number of resources are stuffed into a single `.tfstate` state file. There's no universally correct file size or resource count for TF. However, our experience suggests that **between 30 to 100 resources per state file** is the range that strikes a good balance
+**Large state file(s)**: Many resources are stuffed into a single `.tfstate` state file. There's no universally correct file size or resource count for TF. However, our experience suggests that **between 30 and 100 resources per state file** is the range that strikes a good balance
🧰 Tools
🪛 LanguageTool

[style] ~51-~51: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


227-227: Fix typo in resource block reference.

There's a typo in the text: "delete the resource of module" should be "delete the resource or module".

Apply this diff to fix the typo:

-To remove them from the code, simply delete the `resource` of `module` blocks from the Terralith root module that you imported into the new root module.
+To remove them from the code, simply delete the `resource` or `module` blocks from the Terralith root module that you imported into the new root module.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~227-~227: “of” seems less likely than “or” (‘either … or’).
Context: ... the code, simply delete the resource of module blocks from the Terralith root...

(AI_HYDRA_LEO_CP_OF_OR)


330-330: Fix verb form in caveats section.

The word "backup" is used as a verb, but it should be "back up" (two words) when used as a verb.

Apply this diff to fix the grammar:

-Always backup your state files before performing any state manipulations.
+Always back up your state files before performing any state manipulations.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 51d0528 and 54cd83f.

📒 Files selected for processing (2)
  • assets/css/custom.scss (2 hunks)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~47-~47: This word is normally spelled as one.
Context: ... # Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~51-~51: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~83-~83: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~137-~137: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~145-~145: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[uncategorized] ~227-~227: “of” seems less likely than “or” (‘either … or’).
Context: ... the code, simply delete the resource of module blocks from the Terralith root...

(AI_HYDRA_LEO_CP_OF_OR)


[style] ~228-~228: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...you imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~238-~238: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~366-~366: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~368-~368: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

97-97: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


98-98: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


184-184: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


223-223: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


312-312: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


335-335: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


352-352: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint
🔇 Additional comments (1)
assets/css/custom.scss (1)

119-119: LGTM! Consistent spacing for text elements.

Setting margin-bottom: 1rem for paragraphs, unordered lists, and list items provides consistent spacing throughout the document.

@gberenice gberenice force-pushed the feature/break-up-terralith branch from 54cd83f to e33166b Compare February 12, 2025 18:01
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (2)
content/updates/steps-to-break-up-a-terralith.md (2)

11-11: ⚠️ Potential issue

Fix unclosed HTML tag in callout field.

The <b> tag in the callout field is not properly closed, which could cause HTML rendering issues.

-callout: <p>👋 <b>If you're ready to take your infrastructure to the next level, we're here to help. We love to work together with engineering teams to help them build well-documented, scalable, automated IaC that make their jobs easier. <a href='/contact'>Get in touch!</a></p>
+callout: <p>👋 <b>If you're ready to take your infrastructure to the next level, we're here to help.</b> We love to work together with engineering teams to help them build well-documented, scalable, automated IaC that make their jobs easier. <a href='/contact'>Get in touch!</a></p>

196-197: ⚠️ Potential issue

Replace typographic quotes with straight quotes in HCL code.

The repository descriptions use typographic (curly) quotes which could cause parsing issues with Terraform.

-    "repo-foo": { description = "Our repo foo" },
-    "repo-bar": { description = "Our repo bar" },
+    "repo-foo": { description = "Our repo foo" },
+    "repo-bar": { description = "Our repo bar" },
🧹 Nitpick comments (1)
content/updates/steps-to-break-up-a-terralith.md (1)

335-335: Maintain consistent code block formatting.

The code block is using indentation instead of fence markers (```). This inconsistency could affect rendering.

-    After moving resources into their new root modules and state files, run `terraform plan` in each module to check for any surprises. You should have a clean plan. Ensure that Terraform recognizes all resources correctly and doesn't attempt to re-create or destroy anything inadvertently.
+After moving resources into their new root modules and state files, run `terraform plan` in each module to check for any surprises. You should have a clean plan. Ensure that Terraform recognizes all resources correctly and doesn't attempt to re-create or destroy anything inadvertently.
+
+```hcl
+terraform plan
+```
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

335-335: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 54cd83f and e33166b.

📒 Files selected for processing (2)
  • assets/css/custom.scss (2 hunks)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • assets/css/custom.scss
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~47-~47: This word is normally spelled as one.
Context: ... # Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~51-~51: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~83-~83: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~137-~137: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~145-~145: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[uncategorized] ~227-~227: “of” seems less likely than “or” (‘either … or’).
Context: ... the code, simply delete the resource of module blocks from the Terralith root...

(AI_HYDRA_LEO_CP_OF_OR)


[style] ~228-~228: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...you imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~238-~238: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~366-~366: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~368-~368: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

97-97: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


98-98: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


184-184: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


223-223: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


312-312: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


335-335: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


352-352: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint
🔇 Additional comments (1)
content/updates/steps-to-break-up-a-terralith.md (1)

1-369: Well-structured and comprehensive guide!

The document provides clear, actionable guidance for breaking up Terraform monoliths, with excellent examples and proper safety considerations. The migration steps are thorough and the code examples demonstrate best practices.

🧰 Tools
🪛 LanguageTool

[misspelling] ~47-~47: This word is normally spelled as one.
Context: ... # Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~51-~51: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ... Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~83-~83: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~137-~137: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~145-~145: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[uncategorized] ~227-~227: “of” seems less likely than “or” (‘either … or’).
Context: ... the code, simply delete the resource of module blocks from the Terralith root...

(AI_HYDRA_LEO_CP_OF_OR)


[style] ~228-~228: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...you imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~238-~238: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~366-~366: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~368-~368: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)

97-97: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


98-98: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


184-184: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


223-223: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


312-312: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


335-335: Code block style
Expected: fenced; Actual: indented

(MD046, code-block-style)


352-352: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

@gberenice gberenice force-pushed the feature/break-up-terralith branch 3 times, most recently from 70916c2 to 49af14a Compare February 12, 2025 18:35
@gberenice gberenice force-pushed the feature/break-up-terralith branch from f46ea44 to 52c7de3 Compare February 13, 2025 10:27
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (3)
content/updates/steps-to-break-up-a-terralith.md (3)

187-188: ⚠️ Potential issue

Replace typographic quotes with straight quotes in HCL.

The HCL code block uses typographic (curly) quotes which could cause parsing issues.

-      "repo-foo": { description = "Our repo foo" },
-      "repo-bar": { description = "Our repo bar" },
+      "repo-foo": { description = "Our repo foo" },
+      "repo-bar": { description = "Our repo bar" },

218-218: ⚠️ Potential issue

Fix typo in resource removal instructions.

There's a typo in the conjunction used.

-To remove them from the code, simply delete the `resource` of `module` blocks from the Terralith root module that you imported into the new root module.
+To remove them from the code, simply delete the `resource` or `module` blocks from the Terralith root module that you imported into the new root module.

11-11: ⚠️ Potential issue

Fix unclosed HTML tag in callout field.

The <b> tag in the callout field is not closed, which may lead to unexpected HTML formatting.

-callout: <p>👋 <b>If you're ready to take your infrastructure to the next level, we're here to help. We love to work together with engineering teams to help them build well-documented, scalable, automated IaC that make their jobs easier. <a href='/contact'>Get in touch!</a></p>
+callout: <p>👋 <b>If you're ready to take your infrastructure to the next level, we're here to help.</b> We love to work together with engineering teams to help them build well-documented, scalable, automated IaC that make their jobs easier. <a href='/contact'>Get in touch!</a></p>
🧹 Nitpick comments (2)
content/updates/steps-to-break-up-a-terralith.md (2)

48-48: Enhance resource count recommendation with additional context.

While the recommendation of "between 30 and 100 resources per state file" is a good starting point, it would be helpful to provide more context about factors that might influence this range, such as resource complexity, provider operations, and state file size limits.

-However, our experience suggests that **between 30 and 100 resources per state file** is the range that strikes a good balance between optimal performance and manageability.
+However, our experience suggests that **between 30 and 100 resources per state file** is the range that strikes a good balance between optimal performance and manageability. This range may vary based on factors such as resource complexity, provider operations, and state file size limits.
🧰 Tools
🪛 LanguageTool

[style] ~48-~48: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...a Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


118-118: Enhance state management security guidance.

While the section mentions encryption and IAM, it would be beneficial to add specific recommendations about encryption at rest, in transit, and access logging.

-This solution offers versioning, encryption and enforces access control using IAM.
+This solution offers versioning, encryption (both at rest and in transit), access logging capabilities, and enforces access control using IAM. We recommend enabling default encryption using KMS keys and configuring access logs to track state file operations.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f46ea44 and 52c7de3.

📒 Files selected for processing (2)
  • assets/css/custom.scss (2 hunks)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • assets/css/custom.scss
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~45-~45: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~48-~48: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...a Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~80-~80: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~131-~131: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~139-~139: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[style] ~220-~220: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...u imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~229-~229: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~353-~353: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~355-~355: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

233-233: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


234-234: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


235-235: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


338-338: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint

@gberenice gberenice force-pushed the feature/break-up-terralith branch 3 times, most recently from 980eebd to 2fbf5a6 Compare February 13, 2025 10:58
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
content/updates/steps-to-break-up-a-terralith.md (2)

251-303: Consider making the migration script more dynamic and reusable.

The current script has hardcoded resource names which limits its reusability. Consider enhancing it to:

  1. Accept resource names as command-line arguments
  2. Read resource names from a configuration file
  3. Use pattern matching to identify resources to migrate

Example enhancement:

 #!/bin/bash
+# Read resources from a config file
+RESOURCES_FILE="resources_to_migrate.txt"
+
 function main() {
     # ... existing initialization code ...
 
-    # Move resources
-    mv_resource "github_repository.foo"
-    mv_resource "github_repository.bar"
+    # Read and move resources dynamically
+    while IFS= read -r resource; do
+        [[ "$resource" =~ ^#.*$ ]] && continue  # Skip comments
+        [[ -z "$resource" ]] && continue        # Skip empty lines
+        mv_resource "$resource"
+    done < "$RESOURCES_FILE"

339-342: Enhance testing recommendations with concrete examples.

The testing section could benefit from specific examples of test cases using Terratest.

Consider adding a code example like:

func TestTerraformModule(t *testing.T) {
    t.Parallel()

    terraformOptions := &terraform.Options{
        TerraformDir: "../examples/complete",
        Vars: map[string]interface{}{
            "environment": "test",
        },
    }

    // Clean up resources when the test is complete
    defer terraform.Destroy(t, terraformOptions)

    // Run `terraform init` and `terraform apply`
    terraform.InitAndApply(t, terraformOptions)

    // Validate the outputs
    output := terraform.Output(t, terraformOptions, "example_output")
    assert.NotEmpty(t, output)
}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 52c7de3 and 2fbf5a6.

📒 Files selected for processing (2)
  • assets/css/custom.scss (3 hunks)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • assets/css/custom.scss
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~45-~45: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~48-~48: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...a Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~80-~80: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~131-~131: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~139-~139: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[style] ~223-~223: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...u imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~232-~232: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~358-~358: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~360-~360: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

343-343: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint

@gberenice gberenice force-pushed the feature/break-up-terralith branch from 2fbf5a6 to 69c6600 Compare February 13, 2025 14:26
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (1)
content/updates/steps-to-break-up-a-terralith.md (1)

151-154: 🛠️ Refactor suggestion

Enhance security considerations for state file backups.

The current backup command stores state files without encryption. Consider adding encryption and secure storage recommendations.

-tofu state pull > $(date +%F)-terraform-state-backup.tfstate
+# Encrypt and store state backup securely
+BACKUP_FILE="$(date +%F)-terraform-state-backup.tfstate"
+tofu state pull | gpg --symmetric --output "${BACKUP_FILE}.gpg"
+
+# Optional: Move to secure storage
+aws s3 cp "${BACKUP_FILE}.gpg" "s3://your-secure-bucket/state-backups/"
+rm "${BACKUP_FILE}.gpg"  # Clean up local copy
🧹 Nitpick comments (2)
content/updates/steps-to-break-up-a-terralith.md (2)

340-343: Add specific testing tools and monitoring recommendations.

The testing and monitoring section could benefit from more specific recommendations.

Consider adding:

  1. Specific Terratest examples
  2. Recommended monitoring metrics (e.g., Terraform plan/apply duration, error rates)
  3. Key log patterns to watch for
  4. Integration with specific monitoring platforms (e.g., DataDog, CloudWatch)

166-168: Expand on data source patterns.

While recommending data sources over terraform_remote_state is good advice, consider adding specific patterns for handling common cross-module dependencies.

Consider adding examples for:

  1. Using data sources with tags for dynamic resource discovery
  2. Implementing service discovery patterns
  3. Handling circular dependencies between modules
  4. Managing shared resources across multiple modules
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2fbf5a6 and 69c6600.

📒 Files selected for processing (2)
  • assets/css/custom.scss (3 hunks)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • assets/css/custom.scss
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~45-~45: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~48-~48: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...a Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~81-~81: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~132-~132: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~140-~140: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[uncategorized] ~176-~176: It seems likely that a singular genitive (’s) apostrophe is missing.
Context: ...s to import resources into the new root modules state and then declaratively remove the...

(AI_HYDRA_LEO_APOSTROPHE_S_XS)


[style] ~224-~224: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...u imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~233-~233: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~359-~359: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~361-~361: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

69-69: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


344-344: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint
🔇 Additional comments (1)
content/updates/steps-to-break-up-a-terralith.md (1)

7-7: Verify the future publication date.

The article's date is set to March 6, 2025. Please confirm if this future date is intentional.

@gberenice gberenice force-pushed the feature/break-up-terralith branch from 69c6600 to 553de36 Compare February 13, 2025 14:32
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (1)
content/updates/steps-to-break-up-a-terralith.md (1)

151-154: 🛠️ Refactor suggestion

Enhance security for state file backups.

The current backup command stores state files without encryption. Consider encrypting sensitive state data.

🧹 Nitpick comments (3)
content/updates/steps-to-break-up-a-terralith.md (3)

253-304: Add error handling and validation to the migration script.

The script could benefit from additional safeguards:

  1. Validate environment variables
  2. Add checkpoints to verify successful state operations
  3. Include cleanup of temporary state files

Here's an enhanced version:

 #!/bin/bash
 ###
 ### `github_repos_migration.sh` script purpose is to migrate the state to a new GitHub repositories root module.
 ### This script must be run from your root-modules directory, see below for the expected directory structure.
 ### └── root-modules
 ###            ├── terralith # legacy root module ($SRC_ROOT_MODULE)
 ###            └── github-repos # new root module ($DESTINATION_ROOT_MODULE)
 
 set -eu -o pipefail
+
+# Cleanup function
+cleanup() {
+    echo "Cleaning up temporary files..."
+    rm -f "$DESTINATION_STATE_FILE" "$SRC_STATE_FILE"
+}
+
+# Set trap for cleanup
+trap cleanup EXIT
 
 SRC_ROOT_MODULE="terralith"
 DESTINATION_ROOT_MODULE="github-repos"
 DATE=$(date +"%Y-%m-%d")
 DESTINATION_STATE_FILE="github-repos-state-$DATE.tfstate"
 SRC_STATE_FILE="terralith-state-$DATE.tfstate"
+
+# Validate required commands
+command -v tofu >/dev/null 2>&1 || { echo "OpenTofu is required but not installed. Aborting." >&2; exit 1; }
 
 function mv_resource() {
+    echo "Moving resource: $1"
     if ! tofu state mv -state-out="../$DESTINATION_ROOT_MODULE/$DESTINATION_STATE_FILE" "$1" "$1"; then
         echo "Check if the resource exists in the source state with: tofu state list | grep $1"
         exit 1
     fi
 }
 
 function main() {
     echo "⏳ Starting migration..."
+    
+    # Validate directories exist
+    for dir in "$SRC_ROOT_MODULE" "$DESTINATION_ROOT_MODULE"; do
+        if [ ! -d "$dir" ]; then
+            echo "Directory $dir not found. Aborting." >&2
+            exit 1
+        fi
+    done
+    
     # Change into destination root module so we can pull state file and confirm initialized
     cd "$DESTINATION_ROOT_MODULE"
     tofu init
 
     # Pull the destination state into a local file so we can move resources to it
     tofu state pull > "$DESTINATION_STATE_FILE"
+    if [ ! -s "$DESTINATION_STATE_FILE" ]; then
+        echo "Failed to pull destination state. Aborting." >&2
+        exit 1
+    fi
 
     # Confirm the source root module is initialized
     cd "../$SRC_ROOT_MODULE"
     tofu init
 
     # Pull the source state into a local file as a backup
     tofu state pull > "$SRC_STATE_FILE"
+    if [ ! -s "$SRC_STATE_FILE" ]; then
+        echo "Failed to pull source state. Aborting." >&2
+        exit 1
+    fi
 
     # Move resources
     mv_resource "github_repository.foo"
     mv_resource "github_repository.bar"
 
     # Push the updated state file
     cd "../$DESTINATION_ROOT_MODULE"
-    tofu state push "$DESTINATION_STATE_FILE"
+    if ! tofu state push "$DESTINATION_STATE_FILE"; then
+        echo "Failed to push state. Please check the state file and try again." >&2
+        exit 1
+    fi
 
     echo "Migration completed 🎉"
 }
 
 main

166-168: Enhance data source recommendation with examples.

While recommending data sources over terraform_remote_state is good advice, it would be helpful to provide a concrete example.

Add a code example showing both approaches:

# Not recommended: Using terraform_remote_state
data "terraform_remote_state" "network" {
  backend = "s3"
  config = {
    bucket = "terraform-state"
    key    = "network/terraform.tfstate"
    region = "us-west-2"
  }
}

# Recommended: Using AWS data source
data "aws_subnets" "private" {
  filter {
    name   = "tag:Tier"
    values = ["Private"]
  }
}

340-343: Add specific testing tool recommendations.

The testing section could benefit from more specific tool recommendations and examples.

Consider adding:

  1. Links to popular testing tools
  2. A basic Terratest example
  3. Common test scenarios
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 69c6600 and 553de36.

📒 Files selected for processing (2)
  • assets/css/custom.scss (3 hunks)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • assets/css/custom.scss
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~45-~45: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~48-~48: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...a Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~81-~81: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~132-~132: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~140-~140: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[style] ~224-~224: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...u imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~233-~233: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~359-~359: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~361-~361: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

69-69: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


344-344: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint
🔇 Additional comments (2)
content/updates/steps-to-break-up-a-terralith.md (2)

7-7: Verify the future publication date.

The post is dated March 6, 2025. Please confirm if this future date is intentional for scheduled publication.


71-71:

Details

✅ Verification successful

Verify OpenTofu version compatibility.

The post mentions OpenTofu 1.7+ features. Let's verify if these features are indeed available in OpenTofu.


🌐 Web query:

Does OpenTofu 1.7 support the 'removed' block feature like Terraform?

💡 Result:

OpenTofu 1.7 does include a "removed" block feature that serves a similar purpose to Terraform's implementation but was developed independently under open-source licensing[1][3][4][7]. This functionality allows users to remove OpenTofu-managed resources from state files while preserving infrastructure[3][4][7].

Implementation Details

The "removed" block:

  • Marks resources for state removal during planning phase
  • Requires explicit declaration in configuration files
  • Preserves actual cloud infrastructure when applied
  • Uses syntax similar to existing "moved" blocks[4][7]

Example usage:

resource "aws_vpc" "this" {
  cidr_block = "10.0.0.0/16"
}

removed {
  from = aws_vpc.this
}

After applying this configuration, OpenTofu removes the VPC resource from its state tracking while leaving the AWS infrastructure intact[4][7].

Development Background

The feature was implemented through:

  • Community-driven development starting December 2023[10]
  • Alpha release in March 2024[1]
  • Full release in OpenTofu 1.7 (April-July 2024)[3][4][7]
  • Independent implementation based on MPL-2.0 licensed code from older Terraform versions[2][8]

Despite HashiCorp's copyright claims in April 2024[1][5], third-party analysis confirmed OpenTofu's implementation differs from Terraform's BSL-licensed code through:

  • Divergent test structures[2]
  • Alternative code architecture[2]
  • Different variable declarations[2]
  • Separate development timeline[1][10]

The OpenTofu team maintains their implementation was created without accessing HashiCorp's proprietary code[2][8].

Citations:


Final Verification: OpenTofu 1.7 'removed' Block Confirmed

The information provided in the snippet is accurate. Web queries confirm that OpenTofu 1.7 indeed introduces a "removed" block feature with functionality comparable to Terraform’s implementation. No changes are necessary for this section.

@gberenice gberenice requested a review from Gowiem February 13, 2025 15:01
@gberenice
Copy link
Member Author

@Gowiem I'm satisfied with css changes at this point (not perfect, but much better). Let me know your thoughts.

Copy link
Member

@Gowiem Gowiem left a comment

Choose a reason for hiding this comment

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

@gberenice this is awesome -- looking forward to shipping this. I'll do final approve following the tiny tiny suggestions I made. Thanks for the hard work on this one!

gberenice and others added 2 commits February 16, 2025 14:17
Co-authored-by: Matt Gowie <[email protected]>
Co-authored-by: Matt Gowie <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (1)
content/updates/steps-to-break-up-a-terralith.md (1)

11-11: ⚠️ Potential issue

Fix unclosed HTML tag in metadata callout.
The <b> tag in the callout field isn’t closed, which could lead to unexpected HTML rendering. Please add a closing </b> tag.

🧹 Nitpick comments (8)
content/updates/steps-to-break-up-a-terralith.md (8)

48-48: Streamline wording in “Large state file(s)” bullet.
Consider using a more concise expression instead of “a large number of resources.” For example, replacing it with “numerous resources” reduces wordiness while retaining clarity.

Suggested diff:

- **Large state file(s)**: A large number of resources are stuffed into a single `.tfstate` state file.
+ **Large state file(s)**: Numerous resources are stuffed into a single `.tfstate` state file.
🧰 Tools
🪛 LanguageTool

[style] ~48-~48: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...a Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


81-81: Refine phrasing for resource grouping.
The phrase “a large number of resources” can be simplified to “many resources” for brevity.

Suggested diff:

- While this approach might still result in a large number of resources within a single module,
+ While this approach might still result in many resources within a single module,
🧰 Tools
🪛 LanguageTool

[style] ~81-~81: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


176-176: Clarify genitive form in Option 1 description.
The phrase “into the new root modules state” is ambiguous. If referring to multiple modules, use an apostrophe as in “new root modules’ state.”

Suggested diff:

- ... to import resources into the new root modules state ...
+ ... to import resources into the new root modules’ state ...
🧰 Tools
🪛 LanguageTool

[uncategorized] ~176-~176: It seems likely that a singular genitive (’s) apostrophe is missing.
Context: ...s to import resources into the new root modules state and then declaratively remove the...

(AI_HYDRA_LEO_APOSTROPHE_S_XS)


224-224: Vary sentence openings for improved style.
Several consecutive sentences in this section begin similarly. Consider rephrasing to enhance variety and readability.

🧰 Tools
🪛 LanguageTool

[style] ~224-~224: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...u imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


233-233: Enhance clarity with appropriate punctuation.
In the sentence “Once the new root module manages the existing resources and they have been successfully removed from the Terralith codebase and state file, the migration of those resources is complete,” adding a comma to better separate the clauses could improve clarity.

Suggested diff:

- Once the new root module manages the existing resources and they have been successfully removed from the Terralith codebase and state file, the migration of those resources is complete.
+ Once the new root module manages the existing resources, and they have been successfully removed from the Terralith codebase and state file, the migration of those resources is complete.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~233-~233: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


344-344: Fix heading formatting.
There appear to be extra spaces after the hash in the “Grab Our Terralith Breakup Checklist” heading. Removing these extra spaces will ensure consistent markdown styling.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

344-344: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)


359-359: Improve phrasing in conclusion regarding experience.
The phrase “We’ve done this dozens of times” might read awkwardly. Consider rephrasing to “We’ve done this many times” or “numerous times” for better flow.

Suggested diff:

- We’ve done this dozens of times and can help guide you through breaking up your Terralith...
+ We’ve done this many times and can help guide you through breaking up your Terralith...
🧰 Tools
🪛 LanguageTool

[grammar] ~359-~359: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


361-361: Refine call-to-action language.
The phrase “Feel free to reach out…” is somewhat informal and overused. Consider an alternative such as “Please reach out with your thoughts, stories, and experiences…” to maintain a professional tone.

Suggested diff:

- We also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, and experiences about breaking up Terraliths!
+ We also enjoy discussing this subject in depth. Please reach out with your thoughts, stories, and experiences about breaking up Terraliths!
🧰 Tools
🪛 LanguageTool

[style] ~361-~361: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 553de36 and 230e5f7.

📒 Files selected for processing (1)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~45-~45: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~48-~48: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...a Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~81-~81: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~132-~132: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~140-~140: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[uncategorized] ~176-~176: It seems likely that a singular genitive (’s) apostrophe is missing.
Context: ...s to import resources into the new root modules state and then declaratively remove the...

(AI_HYDRA_LEO_APOSTROPHE_S_XS)


[uncategorized] ~222-~222: “of” seems less likely than “or” (‘either … or’).
Context: ... the code, simply delete the resource of module blocks from the Terralith root...

(AI_HYDRA_LEO_CP_OF_OR)


[style] ~224-~224: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...u imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~233-~233: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~359-~359: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~361-~361: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

28-28: Link fragments should be valid
null

(MD051, link-fragments)


69-69: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


344-344: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

🔇 Additional comments (2)
content/updates/steps-to-break-up-a-terralith.md (2)

190-191: Standardize quotes in HCL code block.
The repository descriptions are using typographic (curly) quotes. Replace them with standard ASCII double quotes to prevent potential parsing issues.

Suggested diff:

-      "repo-foo": { description = “Our repo foo” },
-      "repo-bar": { description = “Our repo bar” },
+      "repo-foo": { description = "Our repo foo" },
+      "repo-bar": { description = "Our repo bar" },

222-222: Correct resource removal phrasing.
The instruction says “delete the resource of module blocks” which appears to be a typo. It should read “delete the resource or module blocks” to accurately reflect the intended action.

Suggested diff:

- To remove them from the code, simply delete the `resource` of `module` blocks from the Terralith root module that you imported into the new root module.
+ To remove them from the code, simply delete the `resource` or `module` blocks from the Terralith root module that you imported into the new root module.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~222-~222: “of” seems less likely than “or” (‘either … or’).
Context: ... the code, simply delete the resource of module blocks from the Terralith root...

(AI_HYDRA_LEO_CP_OF_OR)

@westonplatter
Copy link
Member

westonplatter commented Feb 18, 2025

@gberenice I like the specific and concrete steps around migrating state from the terralith to smaller modules. This is really helpful for the Disaster Recovery work I have in flight.

I had a couple ideas around the content -

  1. (Formatting) Our blog width cuts of codeblock text at 75 characters. In the screenshot, readers loose the code after local.reposi. My idea was for code readability, adjust the code block css content to move text to a new line after 75 chars so users don't awkwardly scroll over. I personally loose track of where I was during horizontal scrolls and have a harder time ingesting the content.

I went ahead and pushed up a css change to try this out. - 8f1b1f8

CleanShot 2025-02-18 at 12 27 55@2x

  1. (Moonshot Idea) In the future, maybe we translate the 6 step checklist into an AI system prompt that has the AI be the sounding board for a platform engineer to plan and execute the suggested steps. I've used AI a couple times as a rubber duck for planning out system changes or web application architecure and it's been more helpful than not.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (4)
content/updates/steps-to-break-up-a-terralith.md (4)

43-53: Consider rephrasing for conciseness in the “Why Is It a Problem?” section.

In the bullet on line 48, the phrase “a large number of resources” could be streamlined to “numerous resources” to reduce wordiness.

🧰 Tools
🪛 LanguageTool

[misspelling] ~45-~45: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~48-~48: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...a Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


75-101: Logical Groupings section is comprehensive.

The strategies for dividing the Terralith into functional and fine-grained modules come across effectively. As a minor suggestion, consider replacing “a large number of resources” on line 81 with “numerous resources” for brevity.

🧰 Tools
🪛 LanguageTool

[style] ~81-~81: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


221-224: Clarify deletion instruction phrasing in the migration process.

On lines 221–222, the instruction reads:

"To remove them from the code, simply delete the resource of module blocks from the Terralith root module that you imported into the new root module."

Although prior discussions confirmed the intent, the phrasing “resource of module blocks” might be misinterpreted. Consider clarifying—perhaps by explicitly stating that both resource blocks and module blocks may be removed—to align with the learning that both can be deleted.

🧰 Tools
🪛 LanguageTool

[style] ~224-~224: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...u imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


353-362: Refine concluding remarks for improved clarity and tone.

At line 359, consider changing “we’ve done this dozens of times” to “we’ve done these dozens of times” for correct grammatical agreement. Also, rephrase “Feel free to reach out with your thoughts, stories, and experiences…” (line 361) to a more formal invitation such as “Please reach out with your insights” to maintain a consistent professional tone.

🧰 Tools
🪛 LanguageTool

[grammar] ~359-~359: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~361-~361: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 230e5f7 and 8f1b1f8.

📒 Files selected for processing (2)
  • assets/css/custom.scss (6 hunks)
  • content/updates/steps-to-break-up-a-terralith.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • assets/css/custom.scss
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: gberenice
PR: masterpointio/masterpoint.io#46
File: content/updates/steps-to-break-up-a-terralith.md:0-0
Timestamp: 2025-02-16T12:25:44.771Z
Learning: During Terralith migration, both resource blocks and module blocks can be deleted from the original Terralith root module after they have been imported into the new root module.
content/updates/steps-to-break-up-a-terralith.md (1)
Learnt from: gberenice
PR: masterpointio/masterpoint.io#46
File: content/updates/steps-to-break-up-a-terralith.md:0-0
Timestamp: 2025-02-16T12:25:44.771Z
Learning: During Terralith migration, both resource blocks and module blocks can be deleted from the original Terralith root module after they have been imported into the new root module.
🪛 LanguageTool
content/updates/steps-to-break-up-a-terralith.md

[misspelling] ~45-~45: This word is normally spelled as one.
Context: ... ## Why Is It a Problem? The Terralith anti-pattern is insidious. It might not cause immedi...

(EN_COMPOUNDS_ANTI_PATTERN)


[style] ~48-~48: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...a Terralith: - Large state file(s): A large number of resources are stuffed into a single `.t...

(LARGE_NUMBER_OF)


[style] ~81-~81: To reduce wordiness, try specifying a number or using “many” or “numerous” instead.
Context: ...ile this approach might still result in a large number of resources within a single module, group...

(LARGE_NUMBER_OF)


[style] ~132-~132: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


[typographical] ~140-~140: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


[style] ~224-~224: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...u imported into the new root module. To remove them from the state, utilize the...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[uncategorized] ~233-~233: Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short).
Context: ...ot module manages the existing resources and they have been successfully removed fro...

(COMMA_COMPOUND_SENTENCE)


[grammar] ~359-~359: The singular determiner ‘this’ may not agree with the plural noun ‘dozens’. Did you mean “these”?
Context: ...re the go-to experts in IaC. We’ve done this dozens of times and can help guide you ...

(THIS_NNS)


[style] ~361-~361: The phrase ‘feel free to’ is used quite frequently. Consider using a less frequent alternative to set your writing apart from others and make it sound more professional.
Context: ...also love to nerd out about this stuff. Feel free to reach out with your thoughts, stories, ...

(FEEL_FREE_TO_STYLE_ME)

🪛 markdownlint-cli2 (0.17.2)
content/updates/steps-to-break-up-a-terralith.md

28-28: Link fragments should be valid
null

(MD051, link-fragments)


69-69: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


344-344: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Redirect rules - masterpoint
  • GitHub Check: Header rules - masterpoint
  • GitHub Check: Pages changed - masterpoint
🔇 Additional comments (20)
content/updates/steps-to-break-up-a-terralith.md (20)

1-12: Metadata Front Matter is well-structured.

The YAML block correctly defines the document’s visibility, title, author, date, images, and callout message. Everything appears in order.


14-33: Table of Contents is clear and organized.

The TOC provides a detailed breakdown of sections, which should greatly enhance navigation through the post.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

28-28: Link fragments should be valid
null

(MD051, link-fragments)


35-42: Overview Section reads effectively.

The introduction sets the context by explaining what a Terralith is and why it matters, engaging the reader immediately.


58-65: “Before You Get Started” section is clear and actionable.

The introductory guidance and use of a descriptive image (line 62) provide a solid setup for the upcoming instructions.


65-73: Version Selection guidance is well articulated.

The recommendations for upgrading to Terraform/OpenTofu versions 1.5+ or 1.7+ are clear and provide actionable advice.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

69-69: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


107-116: Assess Dependencies section is detailed and actionable.

The checklist for identifying dependencies—through code searches, dependency graphs, and state analysis—is practical for readers.


117-122: State Management guidance is clear and on point.

The recommendation to use a secure cloud storage backend with versioning and encryption is well noted.


123-137: Key Organizational and Team Questions are well-framed.

The list prompts important operational and communication considerations that are crucial during a migration.

🧰 Tools
🪛 LanguageTool

[style] ~132-~132: This phrasing can be wordy. Consider using a more active and concise tone.
Context: ... can be scheduled? If so, when? - Do we have a clear understanding of every step in the migration process? Do...

(CLEARLY_UNDERSTAND)


138-141: Migration Overview introduces the process effectively.

The high-level summary transitioning from planning to a step-by-step guide sets a strong foundation.

🧰 Tools
🪛 LanguageTool

[typographical] ~140-~140: It appears that a comma is missing.
Context: ...earned from our experience. While every migration we’ve worked on has taken a unique path...

(DURING_THAT_TIME_COMMA)


142-148: Step #1: Confirm a Clean Plan is clearly presented.

Ensuring a clean plan before making any changes is a practical and necessary precaution.


149-157: Step #2: Create a Backup is well explained.

The shell snippet for pulling the Terraform state is straightforward. You might later consider emphasizing secure storage for the backup files.


158-163: Step #3: Create New Module Structures is succinct.

The bullet points clearly outline the actions required to set up new directories and initialize the new modules.


164-169: Step #4: Implement Inter-Module Communication is concise.

The recommendation to use data sources over terraform_remote_state is a best practice that helps reduce coupling between modules.


227-231: removed Block Example is correctly configured.

The provided HCL snippet clearly shows how to use the removed block to finalize state removal.


244-250: CLI Migration Option is well documented.

The alternative method outlined for using CLI commands is succinct and offers a viable fallback for environments where the newer TF features are unavailable.


251-304: Migration Script Example is robust.

The bash script employs best practices (using set -eu -o pipefail) and clearly separates functionality into helper functions. Consider adding a note about ensuring that the expected directory structure exists and that the script is executed with proper permissions.


306-320: Importing and Removing Resources Commands are clear.

The shell examples for using tofu import and tofu state rm provide useful concise references for practitioners.


326-330: Step #6: Validate the New Modules is straightforward.

The instruction to run a terraform plan for validation is practical and reinforces the importance of ensuring a clean state after migration.


331-343: Final Checks and Tips offer practical insights.

The tips emphasizing automation, testing, and team coordination are comprehensive and valuable for a smooth migration.


344-349: Checklist Section enhances engagement.

The integration of the checklist image adds a nice visual element to reinforce the key points covered.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

344-344: Multiple spaces after hash on atx style heading
null

(MD019, no-multiple-space-atx)

Copy link
Contributor

@oycyc oycyc left a comment

Choose a reason for hiding this comment

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

LGTM on the preview!

@gberenice
Copy link
Member Author

@westonplatter, sorry, I completely missed your comment. Thanks a lot for your contribution to a better code block! ❤️

Copy link
Member

@Gowiem Gowiem left a comment

Choose a reason for hiding this comment

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

:shipit: I'm going to be posting on LinkedIn + sharing out in certain communities tomorrow 💯

@Gowiem Gowiem merged commit 7e7d60a into master Mar 5, 2025
5 checks passed
@Gowiem Gowiem deleted the feature/break-up-terralith branch March 5, 2025 20:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants