Skip to content

feat(packer): restore packer-manifest.json state across blueprint regenerations#5847

Open
kadupoornima wants to merge 2 commits into
GoogleCloudPlatform:developfrom
kadupoornima:fix/packer-restore-state
Open

feat(packer): restore packer-manifest.json state across blueprint regenerations#5847
kadupoornima wants to merge 2 commits into
GoogleCloudPlatform:developfrom
kadupoornima:fix/packer-restore-state

Conversation

@kadupoornima

Copy link
Copy Markdown
Contributor

Implement State Restoration for Packer Images (restoreState)

The Problem

The moduleWriter interface defines a restoreState method, which is intended to transfer state files from a previous deployment run when a user regenerates their blueprint (preventing state loss).

While TFWriter.restoreState is fully implemented and restores .tfstate and .tfstate.backup files, PackerWriter.restoreState is currently a no-op:

func (w PackerWriter) restoreState(deploymentDir string) error {
	// TODO: restore packer-manifest.json if it exists
	return nil
}

When a user modifies their blueprint and runs ghpc create again, the toolkit rewrites the deployment directories. Because Packer's state (packer-manifest.json, which tracks built image IDs) is not restored, the toolkit loses track of the images built in the previous run. This forces the toolkit to rebuild the Packer images from scratch, even if their configuration did not change.

The Solution

Implement PackerWriter.restoreState to copy the packer-manifest.json file from the backup directory (.ghpc/previous_system/ or equivalent) into the newly generated Packer deployment directory.

The Impact

  • Developer Experience: Avoids extremely time-consuming, redundant VM image builds when iterating on blueprints.
  • Efficiency: Saves compute resources and time by preserving the cache of already-built Packer images across blueprint updates.

@kadupoornima kadupoornima requested a review from a team as a code owner June 24, 2026 12:10
@kadupoornima kadupoornima added the release-improvements Added to release notes under the "Improvements" heading. label Jun 24, 2026
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses an issue where Packer image state was lost during blueprint regeneration, causing unnecessary and time-consuming rebuilds. By implementing the restoreState logic for Packer, the toolkit now correctly identifies and preserves existing image manifests, significantly improving developer efficiency and resource usage.

Highlights

  • State Restoration Implementation: Implemented the restoreState method in PackerWriter to copy packer-manifest.json from previous deployment directories to the current one.
  • Efficiency Improvements: Prevents redundant Packer image builds by preserving the image manifest across blueprint regenerations.
  • Testing: Added a new unit test TestRestorePackerState to verify that the manifest file is correctly located and copied during the restoration process.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@kadupoornima kadupoornima enabled auto-merge (squash) June 24, 2026 12:11

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request implements the restoration of packer-manifest.json files from previous deployment groups in PackerWriter.restoreState and adds a corresponding unit test. The review feedback points out that checking err == nil on os.Stat silently ignores unexpected system errors (like permission issues); it suggests explicitly checking for os.ErrNotExist to skip restoration and returning other errors.

Comment thread pkg/modulewriter/packerwriter.go Outdated
.
Change-Id: I68063de5dfc0a3c9ea01c7769febf5a1cc2f0097
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release-improvements Added to release notes under the "Improvements" heading.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants