diff --git a/changelogs/unreleased/1319-carlisia b/changelogs/unreleased/1319-carlisia new file mode 100644 index 000000000..afe1f2636 --- /dev/null +++ b/changelogs/unreleased/1319-carlisia @@ -0,0 +1 @@ +Bump plugin ProtocolVersion to version 2 \ No newline at end of file diff --git a/pkg/plugin/clientmgmt/client_builder.go b/pkg/plugin/clientmgmt/client_builder.go index 2cf4e77da..6d0140ab8 100644 --- a/pkg/plugin/clientmgmt/client_builder.go +++ b/pkg/plugin/clientmgmt/client_builder.go @@ -60,7 +60,7 @@ func newLogrusAdapter(pluginLogger logrus.FieldLogger, logLevel logrus.Level) *l func (b *clientBuilder) clientConfig() *hcplugin.ClientConfig { return &hcplugin.ClientConfig{ - HandshakeConfig: framework.Handshake, + HandshakeConfig: framework.Handshake(), AllowedProtocols: []hcplugin.Protocol{hcplugin.ProtocolGRPC}, Plugins: map[string]hcplugin.Plugin{ string(framework.PluginKindBackupItemAction): framework.NewBackupItemActionPlugin(framework.ClientLogger(b.clientLogger)), diff --git a/pkg/plugin/clientmgmt/client_builder_test.go b/pkg/plugin/clientmgmt/client_builder_test.go index b92cd89ea..6b00bd83e 100644 --- a/pkg/plugin/clientmgmt/client_builder_test.go +++ b/pkg/plugin/clientmgmt/client_builder_test.go @@ -49,7 +49,7 @@ func TestClientConfig(t *testing.T) { cb := newClientBuilder("velero", logger, logLevel) expected := &hcplugin.ClientConfig{ - HandshakeConfig: framework.Handshake, + HandshakeConfig: framework.Handshake(), AllowedProtocols: []hcplugin.Protocol{hcplugin.ProtocolGRPC}, Plugins: map[string]hcplugin.Plugin{ string(framework.PluginKindBackupItemAction): framework.NewBackupItemActionPlugin(framework.ClientLogger(logger)), diff --git a/pkg/plugin/framework/handshake.go b/pkg/plugin/framework/handshake.go new file mode 100644 index 000000000..8802633ea --- /dev/null +++ b/pkg/plugin/framework/handshake.go @@ -0,0 +1,32 @@ +/* +Copyright 2019 the Velero contributors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package framework + +import plugin "github.com/hashicorp/go-plugin" + +// Handshake returns the configuration information that allows go-plugin clients and servers to perform a handshake. +func Handshake() plugin.HandshakeConfig { + return plugin.HandshakeConfig{ + // The ProtocolVersion is the version that must match between Velero framework + // and Velero client plugins. This should be bumped whenever a change happens in + // one or the other that makes it so that they can't safely communicate. + ProtocolVersion: 2, + + MagicCookieKey: "VELERO_PLUGIN", + MagicCookieValue: "hello", + } +} diff --git a/pkg/plugin/framework/server.go b/pkg/plugin/framework/server.go index aef6acd43..cff148980 100644 --- a/pkg/plugin/framework/server.go +++ b/pkg/plugin/framework/server.go @@ -28,16 +28,6 @@ import ( "github.com/heptio/velero/pkg/util/logging" ) -// Handshake is configuration information that allows go-plugin clients and servers to perform a handshake. -// -// TODO(ncdc): this should probably be a function so it can't be mutated, and we should probably move it to -// handshake.go. -var Handshake = plugin.HandshakeConfig{ - ProtocolVersion: 1, - MagicCookieKey: "ARK_PLUGIN", - MagicCookieValue: "hello", -} - // Server serves registered plugin implementations. type Server interface { // BindFlags defines the plugin server's command-line flags @@ -188,7 +178,7 @@ func (s *server) Serve() { pluginLister := NewPluginLister(pluginIdentifiers...) plugin.Serve(&plugin.ServeConfig{ - HandshakeConfig: Handshake, + HandshakeConfig: Handshake(), Plugins: map[string]plugin.Plugin{ string(PluginKindBackupItemAction): s.backupItemAction, string(PluginKindVolumeSnapshotter): s.volumeSnapshotter,