123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- /*
- Copyright 2017 The Kubernetes Authors.
- 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 dockershim
- import (
- "encoding/json"
- "k8s.io/kubernetes/pkg/kubelet/checkpointmanager"
- "k8s.io/kubernetes/pkg/kubelet/checkpointmanager/checksum"
- )
- const (
- // default directory to store pod sandbox checkpoint files
- sandboxCheckpointDir = "sandbox"
- protocolTCP = Protocol("tcp")
- protocolUDP = Protocol("udp")
- protocolSCTP = Protocol("sctp")
- schemaVersion = "v1"
- )
- type DockershimCheckpoint interface {
- checkpointmanager.Checkpoint
- GetData() (string, string, string, []*PortMapping, bool)
- }
- type Protocol string
- // PortMapping is the port mapping configurations of a sandbox.
- type PortMapping struct {
- // Protocol of the port mapping.
- Protocol *Protocol `json:"protocol,omitempty"`
- // Port number within the container.
- ContainerPort *int32 `json:"container_port,omitempty"`
- // Port number on the host.
- HostPort *int32 `json:"host_port,omitempty"`
- // Host ip to expose.
- HostIP string `json:"host_ip,omitempty"`
- }
- // CheckpointData contains all types of data that can be stored in the checkpoint.
- type CheckpointData struct {
- PortMappings []*PortMapping `json:"port_mappings,omitempty"`
- HostNetwork bool `json:"host_network,omitempty"`
- }
- // PodSandboxCheckpoint is the checkpoint structure for a sandbox
- type PodSandboxCheckpoint struct {
- // Version of the pod sandbox checkpoint schema.
- Version string `json:"version"`
- // Pod name of the sandbox. Same as the pod name in the PodSpec.
- Name string `json:"name"`
- // Pod namespace of the sandbox. Same as the pod namespace in the PodSpec.
- Namespace string `json:"namespace"`
- // Data to checkpoint for pod sandbox.
- Data *CheckpointData `json:"data,omitempty"`
- // Checksum is calculated with fnv hash of the checkpoint object with checksum field set to be zero
- Checksum checksum.Checksum `json:"checksum"`
- }
- func NewPodSandboxCheckpoint(namespace, name string, data *CheckpointData) DockershimCheckpoint {
- return &PodSandboxCheckpoint{
- Version: schemaVersion,
- Namespace: namespace,
- Name: name,
- Data: data,
- }
- }
- func (cp *PodSandboxCheckpoint) MarshalCheckpoint() ([]byte, error) {
- cp.Checksum = checksum.New(*cp.Data)
- return json.Marshal(*cp)
- }
- func (cp *PodSandboxCheckpoint) UnmarshalCheckpoint(blob []byte) error {
- return json.Unmarshal(blob, cp)
- }
- func (cp *PodSandboxCheckpoint) VerifyChecksum() error {
- return cp.Checksum.Verify(*cp.Data)
- }
- func (cp *PodSandboxCheckpoint) GetData() (string, string, string, []*PortMapping, bool) {
- return cp.Version, cp.Name, cp.Namespace, cp.Data.PortMappings, cp.Data.HostNetwork
- }
|