Skip to content

Commit b80b33a

Browse files
Adding related links short code and using it (#13799)
* Add Pipenv support and a script to list recent blog posts * Refactor related content section in blog posts to use a new shortcode and YAML for better management and consistency. * Rename related-external shortcode to related-posts and update blog references accordingly. * Add Azure and Kubernetes tags to related.yaml; update related-posts shortcode for better post linking logic. * Add generate-related-tags target and script to create tag-based related posts YAML file. * Refactor YAML structure and update tag generation logic. Add new tags to 'related.yaml' and adjust ordering of sections in output. * Update tag-based related posts generation in Makefile and consolidate related posts data. Removed temporary files and improved output messaging. * Add related posts section to blog and refine post filtering logic; enhance YAML generation script for tags. Adjust default post count in recent posts script. * Update related.yaml with numerous additions and improvements to tags, enhancing content organization and incorporating new entries across various categories. * Add related-posts section to various blog articles for improved navigation and content discovery.
1 parent 8f57434 commit b80b33a

File tree

18 files changed

+1656
-28
lines changed

18 files changed

+1656
-28
lines changed

.gitignore

+5
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ node_modules
2727
# Python's virtual env dir.
2828
venv/
2929

30+
# Pipenv
31+
.env
32+
Pipfile.lock
33+
.python-version
34+
3035
# Ignore the Stencil component bundle.
3136
/static/js/components.js
3237
/static/js/components/

Makefile

+11
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@ serve:
3131
serve-static:
3232
yarn run http-server public
3333

34+
.PHONY: recent-posts
35+
recent-posts:
36+
@echo -e "\033[0;32mRecent blog posts:\033[0m"
37+
cd scripts/python && pipenv install && pipenv run python list_recent_posts.py --format full
38+
39+
.PHONY: generate-related-tags
40+
generate-related-tags:
41+
@echo -e "\033[0;32mGenerating tag-based related posts...\033[0m"
42+
cd scripts/python && pipenv install && pipenv run python generate_tag_related.py
43+
@echo -e "\033[0;32mDone! Updated data/related.yaml\033[0m"
44+
3445
.PHONY: generate
3546
generate:
3647
@echo -e "\033[0;32mGENERATE:\033[0m"

content/blog/copilot-lessons/index.md

+2
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ The eval suite keeps getting more robust, which means that when new AI models dr
111111

112112
So, while hallucinations are now much rarer, what about that one with the `--force` flag? Yes, it's "just another bug," but it taught us something fascinating about these AI errors.
113113

114+
{{< related-posts >}}
115+
114116
## LLMs think like humans (sort of)
115117

116118
The `--force` hallucination wasn't totally wrong - it was revealing what users intuitively expect from the CLI, and the LLM accidentally showed us what was missing. Force deletion is a common pattern across developer tools, and the LLM, trained on vast amounts of documentation and code, simply reflects these established conventions.

content/blog/cursed-container-iceberg/index.md

+1-9
Original file line numberDiff line numberDiff line change
@@ -94,15 +94,7 @@ Let's plunge deeper. Because one Kubernetes cluster is never enough, why not spr
9494
- **Nutanix Karbon** - Because regular Kubernetes wasn't converged enough
9595
- **Metal Stack Cloud Kubernetes** - For when virtual machines are too virtual
9696

97-
{{% notes type="tip" %}}
98-
99-
**You might also like:**
100-
101-
- [Unified and Programmatic Approach to Infrastructure Management at BMW Using Pulumi](/blog/unified-programmatic-approach-infrastructure-management-bmw-using-pulumi/)
102-
- [Introducing the new Docker Build provider](/blog/docker-build/)
103-
- [Getting Started with ECS Anywhere](/blog/ecs-anywhere-launch/)
104-
105-
{{% /notes %}}
97+
{{< related-posts >}}
10698

10799
## Middle of the iceberg – Serverless and function containers – Now you see me, now you don't
108100

content/blog/fargate-vs-ec2/index.md

+1-9
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,7 @@ Fargate on EKS could be a great solution for this type of chunky, resource-heavy
145145

146146
But there are lots of situations where Fargate is less of a fit.
147147

148-
{{% notes type="tip" %}}
149-
150-
**You might also like:**
151-
152-
- [Pulumi for AWS: Automate, Secure, and Manage Your Cloud](/blog/pulumi-for-aws-automate-secure-manage/)
153-
- [Easy LangServe Apps with Pulumi on AWS](/blog/easy-ai-apps-with-langserve-and-pulumi/)
154-
- [Advanced AWS Networking, Part 2](/blog/advanced-aws-networking-part-2/)
155-
156-
{{% /notes %}}
148+
{{< related-posts >}}
157149

158150
## Example: Go Services for E-commerce
159151

content/blog/hidden-costs-of-infrastructure-management/index.md

+2
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ Pulumi Cloud further enhances security with [Pulumi ESC](/product/secrets-manage
8585

8686
As your organization grows, you need an IaC backend that scales with the organization and makes it easy to onboard new teams. Pulumi IaC brings your development, infrastructure and security teams together. Your infrastructure teams can define and manage common infrastructure across the organization, collaborate with security teams to establish security and compliance guardrails, and enable easy self-service of infrastructure through custom developer platforms or shared infrastructure libraries. Teams that prefer not to program can use YAML, while those who do can leverage Python, TypeScript, Golang, or C# to define organization-wide components.
8787

88+
{{< related-posts >}}
89+
8890
With Pulumi IaC, your teams can tackle the growing complexity of modern architectures using familiar software engineering principles. Programming languages offer loops, conditional logic, class inheritance, and object-oriented design, allowing your organization to craft more sophisticated infrastructure compared to legacy IaC tools.
8991

9092
When you’re scaling your organization, you’ll need an IaC backend that makes team onboarding efficient. DIY backends often involve ad-hoc onboarding with bespoke identity solutions, requiring custom documentation and training to troubleshoot unique problems. This can slow down onboarding and reduce end-user productivity. Additionally, DIY backends place the internal support burden on your team, requiring them to assist users in navigating the system.

content/blog/how-secrets-sprawl-is-slowing-you-down/index.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ authors:
1212
- engin-diri
1313

1414
tags:
15+
- esc
1516
- secrets-management
1617
- secrets-sprawl
17-
- esc
1818
- pulumi
1919

2020

@@ -84,6 +84,8 @@ But what if the company grows even more and the team decides to use multiple clo
8484

8585
Sticking to the built-in secrets managers of the cloud providers is not a good idea as it will lead to secrets sprawl.
8686

87+
{{< related-posts >}}
88+
8789
### Why Pulumi ESC is the right choice for centralized multi-cloud secrets management
8890

8991
Pulumi ESC is the right choice for centralized multi-cloud capable secrets management as it reduces secrets sprawl by centralizing secrets storage with a lot of integrations for a wide range of platforms.

content/blog/master-kubernetes-secrets-with-pulumi-esc-secrets-store-csi-driver/index.md

+2
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,8 @@ We can check that the secret was successfully synchronized by running:
284284
kubectl get secretproviderclasses example-provider-pulumi-esc
285285
```
286286

287+
{{< related-posts >}}
288+
287289
### Step 3: Deploy an Application and Mount the Secret
288290

289291
Now, we can deploy an application that references the secret from the Kubernetes cluster. I am going to use `busybox` that reads mounted file in.

content/blog/python-for-devops/index.md

+2
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ def index():
8585
</figcaption>
8686
</span>
8787

88+
{{< related-posts >}}
89+
8890
### Task scheduling and orchestration
8991

9092
Sometimes you need to run things on a schedule. And while I love cron, sometimes you need more. Maybe you need to coordinate multiple tasks, handle retries, or manage complex job dependencies. Here's where Python can help:

content/blog/when-to-use-azure-cosmos-db/index.md

+1-9
Original file line numberDiff line numberDiff line change
@@ -199,15 +199,7 @@ See also [Cosmos DB vs MongoDB, Know The Differences](/what-is/cosmos-db-vs-mong
199199

200200
After learning about partitioning and seeing the Cassandra API, you might think Cosmos DB is basically managed by Cassandra. And there are some key similarities. In many ways, Cosmos DB is Cassandra-inspired, but there are key differences.
201201

202-
{{% notes type="tip" %}}
203-
204-
**You might also like:**
205-
206-
- [Pulumi + Azure Deployment Environments: Better Together for Enterprise Developers](/blog/azure-deployment-environments/)
207-
- [Infrastructure Testing Best Practices of Sam Cogan, Puluminary & Azure MVP](/blog/sam-cogan-testing-best-practices/)
208-
- [Azure Native Provider 2.0: Streamlined, Expanded, and More Powerful than Ever](/blog/introducing-azure-native-v2/)
209-
210-
{{% /notes %}}
202+
{{< related-posts >}}
211203

212204
### How Cosmos DB and Cassandra Relate
213205

content/blog/why-every-platform-engineer-should-care-about-kubernetes-operators/index.md

+2
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,8 @@ Or use Pulumi:
322322

323323
CloudNativePG Operator is a great way to deploy and manage PostgreSQL databases on Kubernetes. It simplifies a wide range of tasks, including backups, high availability, and scaling, making it a must-have for PostgreSQL users.
324324

325+
{{< related-posts >}}
326+
325327
### Flux Operator
326328

327329
{{< figure alt="Flux Operator Credit: fluxcd.control-plane.io/operator" src="flux-operator.png" caption="Flux Operator Credit: fluxcd.control-plane.io/operator" width=100% >}}

content/blog/yaml-terraform-pulumi-whats-the-smart-choice-for-deployment-automation-with-kubernetes/index.md

+2
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,8 @@ but you can of course use any of the Pulumi supported languages.
350350

351351
In this example, you can see how easy it is to define multiple `Deployment` objects with variables and loops syntax provided by `TypeScript`. This is a big advantage over plain YAML files and Terraform HCL. Blending the full power of a general-purpose programming language with the Kubernetes API is a natural process. Consider the possibilities of creating reusable functions, classes, and modules. You could share them across multiple projects and teams.
352352

353+
{{< related-posts >}}
354+
353355
### Pros and Cons of Pulumi
354356

355357
#### Pros

content/blog/your-perfect-infrastructure/index.md

+4
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ Many teams fall into a common trap: they try to design systems that anticipate e
7777

7878
In 2008, Netflix faced a choice: build the perfect data center that could handle all their anticipated future needs, or move to the cloud with a simpler architecture that could evolve. They chose the latter, focusing on making their system easy to change rather than trying to make it perfect. Smart move — unlike those my past self made who probably would’ve insisted on building a data center capable of streaming to Mars, just in case Elon asked nicely.
7979

80+
{{< related-posts >}}
81+
8082
## The Core Principles of Change-Ready Architecture
8183

8284
Through both failures and successes, I’ve identified three principles that define truly adaptable architecture:
@@ -96,3 +98,5 @@ The biggest pushback I hear is, “But what if we need to scale?” or “What a
9698
That over-engineered system I was so proud of in 2018? Its most significant flaw wasn’t in what it got wrong about the future — it was that it tried too hard to be right about the future in the first place. It’s like bringing a fully packed suitcase to a first date. Today, I know that the best architecture isn’t one that anticipates every need, but one that makes it easy to respond to needs as they emerge.
9799

98100
The next time you’re tempted to design for every possible future scenario, remember: the goal isn’t to build a perfect system, but to build one that’s perfectly easy to change. And if someone tells you they’ve designed the perfect future-proof architecture, they’re either lying, or they’ve discovered time travel — and in that case, they should be sharing lottery numbers, not system designs.
101+
102+
{{< related-posts >}}

0 commit comments

Comments
 (0)