Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for protobuf serialization for plugin communication #13120

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

nywilken
Copy link
Contributor

In HashiCorp Packer 1.12, we are working to remove Packer's reliance on gob encoding for its plugin system architecture. We will introduce protos and custom HCL ObjectSpec wrappers for sending ObjectSpecs types over the wire using protobufs.

This work will look similar to the work already done for Nomad. The first implementation will use an environment variable to support the protocol switching server for the existing net/RPC implementation. Users of a plugin via the environment can toggle net/rpc with gob or net/rpc with protobuf communication for any supported Platform. Since Packer can not mix and match serialization formats at runtime, Packer will determine the supported formats by each plugin and use the appropriate wire protocol. If all plugins support the new serialization, protobuf/msgpack will be selected as the wire protocol. If the most compatible format is gob then the old serialization protocol will be used. Users wishing to force the old serialization for compatibility reasons can specify the PACKER_FORCE_GOB environment variable to turn off protobuf and msgpack serialization detection.

@nywilken nywilken requested a review from a team as a code owner July 24, 2024 21:01
@nywilken nywilken marked this pull request as draft July 24, 2024 21:01
@nywilken nywilken marked this pull request as ready for review July 24, 2024 21:01
@nywilken nywilken added this to the 1.12.0 milestone Jul 24, 2024
@lbajolet-hashicorp lbajolet-hashicorp force-pushed the feature/protobuf-serialization branch from cf5cf79 to 1fb5b20 Compare August 6, 2024 15:29
@lbajolet-hashicorp lbajolet-hashicorp force-pushed the feature/protobuf-serialization branch 2 times, most recently from e3a2f63 to c567587 Compare August 13, 2024 19:06
@lbajolet-hashicorp lbajolet-hashicorp force-pushed the feature/protobuf-serialization branch from f668d07 to 9ff6fe7 Compare August 22, 2024 14:28
@lbajolet-hashicorp lbajolet-hashicorp force-pushed the feature/protobuf-serialization branch from 57739d9 to 7bb4c19 Compare September 13, 2024 18:13
@lbajolet-hashicorp lbajolet-hashicorp force-pushed the feature/protobuf-serialization branch from 7bb4c19 to 4b1c912 Compare December 16, 2024 16:32
lbajolet-hashicorp and others added 3 commits December 17, 2024 11:47
As we're trying to move away from gob for serialising data over the
wire, this commit adds the capability for Packer to pick dynamically
between gob or protobuf for the serialisation format to communicate with
plugins.

As it stands, if all the plugins discovered are compatible with
protobuf, and we have not forced gob usage, protobuf will be the
serialisation format picked.

If any plugin is not compatible with protobuf, gob will be used for
communicating with all the plugins that will be used over the course of
a command.
With the draft to support both gob and protobuf as serialisation formats
for Packer, along with the SDK changes that propel them, we add a series
of tests that make sure the logic that picks which protocol is solid and
functional.

These tests rely on building several versions of the tester plugin, with
and without protobuf support, to then install them in the tests as
needed to test the logic of Packer using packer build with them, and
templates that require multiple plugins.
@lbajolet-hashicorp lbajolet-hashicorp force-pushed the feature/protobuf-serialization branch from 4b1c912 to 78cfe63 Compare December 17, 2024 16:47
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.

2 participants