infra

package
v0.0.0-...-f4df126 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 4, 2020 License: Apache-2.0 Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterInfragrpcServer

func RegisterInfragrpcServer(s *grpc.Server, srv InfragrpcServer)

Types

type DriverSide

type DriverSide struct {
	// operationID to match response with asynchronous requests
	OperationID int32 `protobuf:"varint,1,opt,name=operationID" json:"operationID,omitempty"`
	// operationType can be register, create, delete, getVMs
	OperationType string `protobuf:"bytes,2,opt,name=operationType" json:"operationType,omitempty"`
	// Types that are valid to be assigned to Response:
	//	*DriverSide_RegisterResp
	//	*DriverSide_Createresponse
	//	*DriverSide_Deleteresponse
	//	*DriverSide_Listresponse
	Response             isDriverSide_Response `protobuf_oneof:"response"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

The message containing driver side structures

func (*DriverSide) Descriptor

func (*DriverSide) Descriptor() ([]byte, []int)

func (*DriverSide) GetCreateresponse

func (m *DriverSide) GetCreateresponse() *DriverSideCreateResp

func (*DriverSide) GetDeleteresponse

func (m *DriverSide) GetDeleteresponse() *DriverSideDeleteResp

func (*DriverSide) GetListresponse

func (m *DriverSide) GetListresponse() *DriverSideListResp

func (*DriverSide) GetOperationID

func (m *DriverSide) GetOperationID() int32

func (*DriverSide) GetOperationType

func (m *DriverSide) GetOperationType() string

func (*DriverSide) GetRegisterResp

func (m *DriverSide) GetRegisterResp() *DriverSideRegisterationResp

func (*DriverSide) GetResponse

func (m *DriverSide) GetResponse() isDriverSide_Response

func (*DriverSide) ProtoMessage

func (*DriverSide) ProtoMessage()

func (*DriverSide) Reset

func (m *DriverSide) Reset()

func (*DriverSide) String

func (m *DriverSide) String() string

func (*DriverSide) XXX_DiscardUnknown

func (m *DriverSide) XXX_DiscardUnknown()

func (*DriverSide) XXX_Marshal

func (m *DriverSide) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*DriverSide) XXX_Merge

func (dst *DriverSide) XXX_Merge(src proto.Message)

func (*DriverSide) XXX_OneofFuncs

func (*DriverSide) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{})

XXX_OneofFuncs is for the internal use of the proto package.

func (*DriverSide) XXX_Size

func (m *DriverSide) XXX_Size() int

func (*DriverSide) XXX_Unmarshal

func (m *DriverSide) XXX_Unmarshal(b []byte) error

type DriverSideCreateResp

type DriverSideCreateResp struct {
	ProviderID           string   `protobuf:"bytes,1,opt,name=providerID" json:"providerID,omitempty"`
	Nodename             string   `protobuf:"bytes,2,opt,name=nodename" json:"nodename,omitempty"`
	Error                string   `protobuf:"bytes,3,opt,name=error" json:"error,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*DriverSideCreateResp) Descriptor

func (*DriverSideCreateResp) Descriptor() ([]byte, []int)

func (*DriverSideCreateResp) GetError

func (m *DriverSideCreateResp) GetError() string

func (*DriverSideCreateResp) GetNodename

func (m *DriverSideCreateResp) GetNodename() string

func (*DriverSideCreateResp) GetProviderID

func (m *DriverSideCreateResp) GetProviderID() string

func (*DriverSideCreateResp) ProtoMessage

func (*DriverSideCreateResp) ProtoMessage()

func (*DriverSideCreateResp) Reset

func (m *DriverSideCreateResp) Reset()

func (*DriverSideCreateResp) String

func (m *DriverSideCreateResp) String() string

func (*DriverSideCreateResp) XXX_DiscardUnknown

func (m *DriverSideCreateResp) XXX_DiscardUnknown()

func (*DriverSideCreateResp) XXX_Marshal

func (m *DriverSideCreateResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*DriverSideCreateResp) XXX_Merge

func (dst *DriverSideCreateResp) XXX_Merge(src proto.Message)

func (*DriverSideCreateResp) XXX_Size

func (m *DriverSideCreateResp) XXX_Size() int

func (*DriverSideCreateResp) XXX_Unmarshal

func (m *DriverSideCreateResp) XXX_Unmarshal(b []byte) error

type DriverSideDeleteResp

type DriverSideDeleteResp struct {
	Error                string   `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*DriverSideDeleteResp) Descriptor

func (*DriverSideDeleteResp) Descriptor() ([]byte, []int)

func (*DriverSideDeleteResp) GetError

func (m *DriverSideDeleteResp) GetError() string

func (*DriverSideDeleteResp) ProtoMessage

func (*DriverSideDeleteResp) ProtoMessage()

func (*DriverSideDeleteResp) Reset

func (m *DriverSideDeleteResp) Reset()

func (*DriverSideDeleteResp) String

func (m *DriverSideDeleteResp) String() string

func (*DriverSideDeleteResp) XXX_DiscardUnknown

func (m *DriverSideDeleteResp) XXX_DiscardUnknown()

func (*DriverSideDeleteResp) XXX_Marshal

func (m *DriverSideDeleteResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*DriverSideDeleteResp) XXX_Merge

func (dst *DriverSideDeleteResp) XXX_Merge(src proto.Message)

func (*DriverSideDeleteResp) XXX_Size

func (m *DriverSideDeleteResp) XXX_Size() int

func (*DriverSideDeleteResp) XXX_Unmarshal

func (m *DriverSideDeleteResp) XXX_Unmarshal(b []byte) error

type DriverSideListResp

type DriverSideListResp struct {
	List                 []*DriverSideMachine `protobuf:"bytes,1,rep,name=list" json:"list,omitempty"`
	Error                string               `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (*DriverSideListResp) Descriptor

func (*DriverSideListResp) Descriptor() ([]byte, []int)

func (*DriverSideListResp) GetError

func (m *DriverSideListResp) GetError() string

func (*DriverSideListResp) GetList

func (m *DriverSideListResp) GetList() []*DriverSideMachine

func (*DriverSideListResp) ProtoMessage

func (*DriverSideListResp) ProtoMessage()

func (*DriverSideListResp) Reset

func (m *DriverSideListResp) Reset()

func (*DriverSideListResp) String

func (m *DriverSideListResp) String() string

func (*DriverSideListResp) XXX_DiscardUnknown

func (m *DriverSideListResp) XXX_DiscardUnknown()

func (*DriverSideListResp) XXX_Marshal

func (m *DriverSideListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*DriverSideListResp) XXX_Merge

func (dst *DriverSideListResp) XXX_Merge(src proto.Message)

func (*DriverSideListResp) XXX_Size

func (m *DriverSideListResp) XXX_Size() int

func (*DriverSideListResp) XXX_Unmarshal

func (m *DriverSideListResp) XXX_Unmarshal(b []byte) error

type DriverSideMachine

type DriverSideMachine struct {
	MachineID            string   `protobuf:"bytes,1,opt,name=machineID" json:"machineID,omitempty"`
	MachineName          string   `protobuf:"bytes,2,opt,name=machineName" json:"machineName,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*DriverSideMachine) Descriptor

func (*DriverSideMachine) Descriptor() ([]byte, []int)

func (*DriverSideMachine) GetMachineID

func (m *DriverSideMachine) GetMachineID() string

func (*DriverSideMachine) GetMachineName

func (m *DriverSideMachine) GetMachineName() string

func (*DriverSideMachine) ProtoMessage

func (*DriverSideMachine) ProtoMessage()

func (*DriverSideMachine) Reset

func (m *DriverSideMachine) Reset()

func (*DriverSideMachine) String

func (m *DriverSideMachine) String() string

func (*DriverSideMachine) XXX_DiscardUnknown

func (m *DriverSideMachine) XXX_DiscardUnknown()

func (*DriverSideMachine) XXX_Marshal

func (m *DriverSideMachine) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*DriverSideMachine) XXX_Merge

func (dst *DriverSideMachine) XXX_Merge(src proto.Message)

func (*DriverSideMachine) XXX_Size

func (m *DriverSideMachine) XXX_Size() int

func (*DriverSideMachine) XXX_Unmarshal

func (m *DriverSideMachine) XXX_Unmarshal(b []byte) error

type DriverSideRegisterationResp

type DriverSideRegisterationResp struct {
	Name                 string   `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	Group                string   `protobuf:"bytes,2,opt,name=group" json:"group,omitempty"`
	Kind                 string   `protobuf:"bytes,3,opt,name=kind" json:"kind,omitempty"`
	Version              string   `protobuf:"bytes,4,opt,name=version" json:"version,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*DriverSideRegisterationResp) Descriptor

func (*DriverSideRegisterationResp) Descriptor() ([]byte, []int)

func (*DriverSideRegisterationResp) GetGroup

func (m *DriverSideRegisterationResp) GetGroup() string

func (*DriverSideRegisterationResp) GetKind

func (m *DriverSideRegisterationResp) GetKind() string

func (*DriverSideRegisterationResp) GetName

func (m *DriverSideRegisterationResp) GetName() string

func (*DriverSideRegisterationResp) GetVersion

func (m *DriverSideRegisterationResp) GetVersion() string

func (*DriverSideRegisterationResp) ProtoMessage

func (*DriverSideRegisterationResp) ProtoMessage()

func (*DriverSideRegisterationResp) Reset

func (m *DriverSideRegisterationResp) Reset()

func (*DriverSideRegisterationResp) String

func (m *DriverSideRegisterationResp) String() string

func (*DriverSideRegisterationResp) XXX_DiscardUnknown

func (m *DriverSideRegisterationResp) XXX_DiscardUnknown()

func (*DriverSideRegisterationResp) XXX_Marshal

func (m *DriverSideRegisterationResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*DriverSideRegisterationResp) XXX_Merge

func (dst *DriverSideRegisterationResp) XXX_Merge(src proto.Message)

func (*DriverSideRegisterationResp) XXX_Size

func (m *DriverSideRegisterationResp) XXX_Size() int

func (*DriverSideRegisterationResp) XXX_Unmarshal

func (m *DriverSideRegisterationResp) XXX_Unmarshal(b []byte) error

type DriverSide_Createresponse

type DriverSide_Createresponse struct {
	Createresponse *DriverSideCreateResp `protobuf:"bytes,4,opt,name=createresponse,oneof"`
}

type DriverSide_Deleteresponse

type DriverSide_Deleteresponse struct {
	Deleteresponse *DriverSideDeleteResp `protobuf:"bytes,5,opt,name=deleteresponse,oneof"`
}

type DriverSide_Listresponse

type DriverSide_Listresponse struct {
	Listresponse *DriverSideListResp `protobuf:"bytes,6,opt,name=listresponse,oneof"`
}

type DriverSide_RegisterResp

type DriverSide_RegisterResp struct {
	RegisterResp *DriverSideRegisterationResp `protobuf:"bytes,3,opt,name=registerResp,oneof"`
}

type InfragrpcClient

type InfragrpcClient interface {
	// infra operations
	Register(ctx context.Context, opts ...grpc.CallOption) (Infragrpc_RegisterClient, error)
	// Get Machine Class
	GetMachineClass(ctx context.Context, in *MachineClassMeta, opts ...grpc.CallOption) (*MachineClass, error)
	// Get Cloud Config
	GetSecret(ctx context.Context, in *SecretMeta, opts ...grpc.CallOption) (*Secret, error)
}

InfragrpcClient is the client API for Infragrpc service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.

func NewInfragrpcClient

func NewInfragrpcClient(cc *grpc.ClientConn) InfragrpcClient

type InfragrpcServer

type InfragrpcServer interface {
	// infra operations
	Register(Infragrpc_RegisterServer) error
	// Get Machine Class
	GetMachineClass(context.Context, *MachineClassMeta) (*MachineClass, error)
	// Get Cloud Config
	GetSecret(context.Context, *SecretMeta) (*Secret, error)
}

InfragrpcServer is the server API for Infragrpc service.

type Infragrpc_RegisterClient

type Infragrpc_RegisterClient interface {
	Send(*DriverSide) error
	Recv() (*MCMside, error)
	grpc.ClientStream
}

type Infragrpc_RegisterServer

type Infragrpc_RegisterServer interface {
	Send(*MCMside) error
	Recv() (*DriverSide, error)
	grpc.ServerStream
}

type MCMside

type MCMside struct {
	// operationID to match response with asynchronous requests
	OperationID int32 `protobuf:"varint,1,opt,name=operationID" json:"operationID,omitempty"`
	// operationType can be register, create, delete, getVMs
	OperationType        string                  `protobuf:"bytes,2,opt,name=operationType" json:"operationType,omitempty"`
	Operationparams      *MCMsideOperationParams `protobuf:"bytes,3,opt,name=operationparams" json:"operationparams,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
	XXX_unrecognized     []byte                  `json:"-"`
	XXX_sizecache        int32                   `json:"-"`
}

The message containing the MCM side structures

func (*MCMside) Descriptor

func (*MCMside) Descriptor() ([]byte, []int)

func (*MCMside) GetOperationID

func (m *MCMside) GetOperationID() int32

func (*MCMside) GetOperationType

func (m *MCMside) GetOperationType() string

func (*MCMside) GetOperationparams

func (m *MCMside) GetOperationparams() *MCMsideOperationParams

func (*MCMside) ProtoMessage

func (*MCMside) ProtoMessage()

func (*MCMside) Reset

func (m *MCMside) Reset()

func (*MCMside) String

func (m *MCMside) String() string

func (*MCMside) XXX_DiscardUnknown

func (m *MCMside) XXX_DiscardUnknown()

func (*MCMside) XXX_Marshal

func (m *MCMside) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*MCMside) XXX_Merge

func (dst *MCMside) XXX_Merge(src proto.Message)

func (*MCMside) XXX_Size

func (m *MCMside) XXX_Size() int

func (*MCMside) XXX_Unmarshal

func (m *MCMside) XXX_Unmarshal(b []byte) error

type MCMsideOperationParams

type MCMsideOperationParams struct {
	MachineClassMetaData *MachineClassMeta `protobuf:"bytes,1,opt,name=machineClassMetaData" json:"machineClassMetaData,omitempty"`
	Credentials          string            `protobuf:"bytes,2,opt,name=credentials" json:"credentials,omitempty"`
	MachineID            string            `protobuf:"bytes,3,opt,name=machineID" json:"machineID,omitempty"`
	MachineName          string            `protobuf:"bytes,4,opt,name=machineName" json:"machineName,omitempty"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (*MCMsideOperationParams) Descriptor

func (*MCMsideOperationParams) Descriptor() ([]byte, []int)

func (*MCMsideOperationParams) GetCredentials

func (m *MCMsideOperationParams) GetCredentials() string

func (*MCMsideOperationParams) GetMachineClassMetaData

func (m *MCMsideOperationParams) GetMachineClassMetaData() *MachineClassMeta

func (*MCMsideOperationParams) GetMachineID

func (m *MCMsideOperationParams) GetMachineID() string

func (*MCMsideOperationParams) GetMachineName

func (m *MCMsideOperationParams) GetMachineName() string

func (*MCMsideOperationParams) ProtoMessage

func (*MCMsideOperationParams) ProtoMessage()

func (*MCMsideOperationParams) Reset

func (m *MCMsideOperationParams) Reset()

func (*MCMsideOperationParams) String

func (m *MCMsideOperationParams) String() string

func (*MCMsideOperationParams) XXX_DiscardUnknown

func (m *MCMsideOperationParams) XXX_DiscardUnknown()

func (*MCMsideOperationParams) XXX_Marshal

func (m *MCMsideOperationParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*MCMsideOperationParams) XXX_Merge

func (dst *MCMsideOperationParams) XXX_Merge(src proto.Message)

func (*MCMsideOperationParams) XXX_Size

func (m *MCMsideOperationParams) XXX_Size() int

func (*MCMsideOperationParams) XXX_Unmarshal

func (m *MCMsideOperationParams) XXX_Unmarshal(b []byte) error

type MachineClass

type MachineClass struct {
	Data                 string   `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"`
	Error                string   `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*MachineClass) Descriptor

func (*MachineClass) Descriptor() ([]byte, []int)

func (*MachineClass) GetData

func (m *MachineClass) GetData() string

func (*MachineClass) GetError

func (m *MachineClass) GetError() string

func (*MachineClass) ProtoMessage

func (*MachineClass) ProtoMessage()

func (*MachineClass) Reset

func (m *MachineClass) Reset()

func (*MachineClass) String

func (m *MachineClass) String() string

func (*MachineClass) XXX_DiscardUnknown

func (m *MachineClass) XXX_DiscardUnknown()

func (*MachineClass) XXX_Marshal

func (m *MachineClass) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*MachineClass) XXX_Merge

func (dst *MachineClass) XXX_Merge(src proto.Message)

func (*MachineClass) XXX_Size

func (m *MachineClass) XXX_Size() int

func (*MachineClass) XXX_Unmarshal

func (m *MachineClass) XXX_Unmarshal(b []byte) error

type MachineClassMeta

type MachineClassMeta struct {
	Name                 string   `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	Revision             int32    `protobuf:"varint,2,opt,name=revision" json:"revision,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*MachineClassMeta) Descriptor

func (*MachineClassMeta) Descriptor() ([]byte, []int)

func (*MachineClassMeta) GetName

func (m *MachineClassMeta) GetName() string

func (*MachineClassMeta) GetRevision

func (m *MachineClassMeta) GetRevision() int32

func (*MachineClassMeta) ProtoMessage

func (*MachineClassMeta) ProtoMessage()

func (*MachineClassMeta) Reset

func (m *MachineClassMeta) Reset()

func (*MachineClassMeta) String

func (m *MachineClassMeta) String() string

func (*MachineClassMeta) XXX_DiscardUnknown

func (m *MachineClassMeta) XXX_DiscardUnknown()

func (*MachineClassMeta) XXX_Marshal

func (m *MachineClassMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*MachineClassMeta) XXX_Merge

func (dst *MachineClassMeta) XXX_Merge(src proto.Message)

func (*MachineClassMeta) XXX_Size

func (m *MachineClassMeta) XXX_Size() int

func (*MachineClassMeta) XXX_Unmarshal

func (m *MachineClassMeta) XXX_Unmarshal(b []byte) error

type Secret

type Secret struct {
	Data                 string   `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"`
	Error                string   `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*Secret) Descriptor

func (*Secret) Descriptor() ([]byte, []int)

func (*Secret) GetData

func (m *Secret) GetData() string

func (*Secret) GetError

func (m *Secret) GetError() string

func (*Secret) ProtoMessage

func (*Secret) ProtoMessage()

func (*Secret) Reset

func (m *Secret) Reset()

func (*Secret) String

func (m *Secret) String() string

func (*Secret) XXX_DiscardUnknown

func (m *Secret) XXX_DiscardUnknown()

func (*Secret) XXX_Marshal

func (m *Secret) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Secret) XXX_Merge

func (dst *Secret) XXX_Merge(src proto.Message)

func (*Secret) XXX_Size

func (m *Secret) XXX_Size() int

func (*Secret) XXX_Unmarshal

func (m *Secret) XXX_Unmarshal(b []byte) error

type SecretMeta

type SecretMeta struct {
	SecretName           string   `protobuf:"bytes,1,opt,name=secretName" json:"secretName,omitempty"`
	NameSpace            string   `protobuf:"bytes,2,opt,name=nameSpace" json:"nameSpace,omitempty"`
	Revision             int32    `protobuf:"varint,3,opt,name=revision" json:"revision,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*SecretMeta) Descriptor

func (*SecretMeta) Descriptor() ([]byte, []int)

func (*SecretMeta) GetNameSpace

func (m *SecretMeta) GetNameSpace() string

func (*SecretMeta) GetRevision

func (m *SecretMeta) GetRevision() int32

func (*SecretMeta) GetSecretName

func (m *SecretMeta) GetSecretName() string

func (*SecretMeta) ProtoMessage

func (*SecretMeta) ProtoMessage()

func (*SecretMeta) Reset

func (m *SecretMeta) Reset()

func (*SecretMeta) String

func (m *SecretMeta) String() string

func (*SecretMeta) XXX_DiscardUnknown

func (m *SecretMeta) XXX_DiscardUnknown()

func (*SecretMeta) XXX_Marshal

func (m *SecretMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*SecretMeta) XXX_Merge

func (dst *SecretMeta) XXX_Merge(src proto.Message)

func (*SecretMeta) XXX_Size

func (m *SecretMeta) XXX_Size() int

func (*SecretMeta) XXX_Unmarshal

func (m *SecretMeta) XXX_Unmarshal(b []byte) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL