Documentation
¶
Overview ¶
+kubebuilder:object:generate=true +groupName=distributedportgroup.vsphere.upbound.io +versionName=v1alpha1
Index ¶
- Constants
- Variables
- type PortGroup
- func (in *PortGroup) DeepCopy() *PortGroup
- func (in *PortGroup) DeepCopyInto(out *PortGroup)
- func (in *PortGroup) DeepCopyObject() runtime.Object
- func (mg *PortGroup) GetCondition(ct xpv1.ConditionType) xpv1.Condition
- func (tr *PortGroup) GetConnectionDetailsMapping() map[string]string
- func (mg *PortGroup) GetDeletionPolicy() xpv1.DeletionPolicy
- func (tr *PortGroup) GetID() string
- func (tr *PortGroup) GetObservation() (map[string]any, error)
- func (tr *PortGroup) GetParameters() (map[string]any, error)
- func (mg *PortGroup) GetProviderConfigReference() *xpv1.Reference
- func (mg *PortGroup) GetProviderReference() *xpv1.Reference
- func (mg *PortGroup) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo
- func (mg *PortGroup) GetTerraformResourceType() string
- func (tr *PortGroup) GetTerraformSchemaVersion() int
- func (mg *PortGroup) GetWriteConnectionSecretToReference() *xpv1.SecretReference
- func (tr *PortGroup) LateInitialize(attrs []byte) (bool, error)
- func (mg *PortGroup) SetConditions(c ...xpv1.Condition)
- func (mg *PortGroup) SetDeletionPolicy(r xpv1.DeletionPolicy)
- func (tr *PortGroup) SetObservation(obs map[string]any) error
- func (tr *PortGroup) SetParameters(params map[string]any) error
- func (mg *PortGroup) SetProviderConfigReference(r *xpv1.Reference)
- func (mg *PortGroup) SetProviderReference(r *xpv1.Reference)
- func (mg *PortGroup) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo)
- func (mg *PortGroup) SetWriteConnectionSecretToReference(r *xpv1.SecretReference)
- type PortGroupList
- type PortGroupObservation
- type PortGroupParameters
- type PortGroupSpec
- type PortGroupStatus
- type VlanRangeObservation
- type VlanRangeParameters
Constants ¶
const ( CRDGroup = "distributedportgroup.vsphere.upbound.io" CRDVersion = "v1alpha1" )
Package type metadata.
Variables ¶
var ( // CRDGroupVersion is the API Group Version used to register the objects CRDGroupVersion = schema.GroupVersion{Group: CRDGroup, Version: CRDVersion} // SchemeBuilder is used to add go types to the GroupVersionKind scheme SchemeBuilder = &scheme.Builder{GroupVersion: CRDGroupVersion} // AddToScheme adds the types in this group-version to the given scheme. AddToScheme = SchemeBuilder.AddToScheme )
var ( PortGroup_Kind = "PortGroup" PortGroup_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: PortGroup_Kind}.String() PortGroup_KindAPIVersion = PortGroup_Kind + "." + CRDGroupVersion.String() PortGroup_GroupVersionKind = CRDGroupVersion.WithKind(PortGroup_Kind) )
Repository type metadata.
Functions ¶
This section is empty.
Types ¶
type PortGroup ¶
type PortGroup struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec PortGroupSpec `json:"spec"` Status PortGroupStatus `json:"status,omitempty"` }
PortGroup is the Schema for the PortGroups API. Provides a vSphere distributed port group resource. This can be used to create and manage port groups on a vSphere Distributed Switch. +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +kubebuilder:subresource:status +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,vsphere}
func (*PortGroup) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortGroup.
func (*PortGroup) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*PortGroup) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*PortGroup) GetCondition ¶
func (mg *PortGroup) GetCondition(ct xpv1.ConditionType) xpv1.Condition
GetCondition of this PortGroup.
func (*PortGroup) GetConnectionDetailsMapping ¶
GetConnectionDetailsMapping for this PortGroup
func (*PortGroup) GetDeletionPolicy ¶
func (mg *PortGroup) GetDeletionPolicy() xpv1.DeletionPolicy
GetDeletionPolicy of this PortGroup.
func (*PortGroup) GetObservation ¶
GetObservation of this PortGroup
func (*PortGroup) GetParameters ¶
GetParameters of this PortGroup
func (*PortGroup) GetProviderConfigReference ¶
GetProviderConfigReference of this PortGroup.
func (*PortGroup) GetProviderReference ¶
GetProviderReference of this PortGroup. Deprecated: Use GetProviderConfigReference.
func (*PortGroup) GetPublishConnectionDetailsTo ¶
func (mg *PortGroup) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo
GetPublishConnectionDetailsTo of this PortGroup.
func (*PortGroup) GetTerraformResourceType ¶
GetTerraformResourceType returns Terraform resource type for this PortGroup
func (*PortGroup) GetTerraformSchemaVersion ¶
GetTerraformSchemaVersion returns the associated Terraform schema version
func (*PortGroup) GetWriteConnectionSecretToReference ¶
func (mg *PortGroup) GetWriteConnectionSecretToReference() *xpv1.SecretReference
GetWriteConnectionSecretToReference of this PortGroup.
func (*PortGroup) LateInitialize ¶
LateInitialize this PortGroup using its observed tfState. returns True if there are any spec changes for the resource.
func (*PortGroup) SetConditions ¶
SetConditions of this PortGroup.
func (*PortGroup) SetDeletionPolicy ¶
func (mg *PortGroup) SetDeletionPolicy(r xpv1.DeletionPolicy)
SetDeletionPolicy of this PortGroup.
func (*PortGroup) SetObservation ¶
SetObservation for this PortGroup
func (*PortGroup) SetParameters ¶
SetParameters for this PortGroup
func (*PortGroup) SetProviderConfigReference ¶
SetProviderConfigReference of this PortGroup.
func (*PortGroup) SetProviderReference ¶
SetProviderReference of this PortGroup. Deprecated: Use SetProviderConfigReference.
func (*PortGroup) SetPublishConnectionDetailsTo ¶
func (mg *PortGroup) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo)
SetPublishConnectionDetailsTo of this PortGroup.
func (*PortGroup) SetWriteConnectionSecretToReference ¶
func (mg *PortGroup) SetWriteConnectionSecretToReference(r *xpv1.SecretReference)
SetWriteConnectionSecretToReference of this PortGroup.
type PortGroupList ¶
type PortGroupList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []PortGroup `json:"items"` }
PortGroupList contains a list of PortGroups
func (*PortGroupList) DeepCopy ¶
func (in *PortGroupList) DeepCopy() *PortGroupList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortGroupList.
func (*PortGroupList) DeepCopyInto ¶
func (in *PortGroupList) DeepCopyInto(out *PortGroupList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*PortGroupList) DeepCopyObject ¶
func (in *PortGroupList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*PortGroupList) GetItems ¶
func (l *PortGroupList) GetItems() []resource.Managed
GetItems of this PortGroupList.
type PortGroupObservation ¶
type PortGroupObservation struct { // : The current version of the port group configuration, // incremented by subsequent updates to the port group. // Version string of the configuration that this spec is trying to change. ConfigVersion *string `json:"configVersion,omitempty" tf:"config_version,omitempty"` // : The managed object reference ID of the created // port group. ID *string `json:"id,omitempty" tf:"id,omitempty"` // : The generated UUID of the port group. // The generated UUID of the portgroup. Key *string `json:"key,omitempty" tf:"key,omitempty"` }
func (*PortGroupObservation) DeepCopy ¶
func (in *PortGroupObservation) DeepCopy() *PortGroupObservation
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortGroupObservation.
func (*PortGroupObservation) DeepCopyInto ¶
func (in *PortGroupObservation) DeepCopyInto(out *PortGroupObservation)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PortGroupParameters ¶
type PortGroupParameters struct { // List of active uplinks used for load balancing, matching the names of the uplinks assigned in the DVS. // +kubebuilder:validation:Optional ActiveUplinks []*string `json:"activeUplinks,omitempty" tf:"active_uplinks,omitempty"` // Controls whether or not the virtual network adapter is allowed to send network traffic with a different MAC address than that of its own. // +kubebuilder:validation:Optional AllowForgedTransmits *bool `json:"allowForgedTransmits,omitempty" tf:"allow_forged_transmits,omitempty"` // Controls whether or not the Media Access Control (MAC) address can be changed. // +kubebuilder:validation:Optional AllowMacChanges *bool `json:"allowMacChanges,omitempty" tf:"allow_mac_changes,omitempty"` // Enable promiscuous mode on the network. This flag indicates whether or not all traffic is seen on a given port. // +kubebuilder:validation:Optional AllowPromiscuous *bool `json:"allowPromiscuous,omitempty" tf:"allow_promiscuous,omitempty"` // Allows the port group to create additional ports // past the limit specified in number_of_ports if necessary. Default: true. // Auto-expands the port group beyond the port count configured in number_of_ports when necessary. // +kubebuilder:validation:Optional AutoExpand *bool `json:"autoExpand,omitempty" tf:"auto_expand,omitempty"` // Indicates whether to block all ports by default. // +kubebuilder:validation:Optional BlockAllPorts *bool `json:"blockAllPorts,omitempty" tf:"block_all_ports,omitempty"` // Allow the port shutdown // policy to be overridden on an individual port. // Allow the blocked setting of an individual port to override the setting in the portgroup. // +kubebuilder:validation:Optional BlockOverrideAllowed *bool `json:"blockOverrideAllowed,omitempty" tf:"block_override_allowed,omitempty"` // Enable beacon probing on the ports this policy applies to. // +kubebuilder:validation:Optional CheckBeacon *bool `json:"checkBeacon,omitempty" tf:"check_beacon,omitempty"` // Map of custom attribute ids to attribute // value string to set for port group. See here // for a reference on how to set values for custom attributes. // A list of custom attributes to set on this resource. // +kubebuilder:validation:Optional CustomAttributes map[string]*string `json:"customAttributes,omitempty" tf:"custom_attributes,omitempty"` // An optional description for the port group. // The description of the portgroup. // +kubebuilder:validation:Optional Description *string `json:"description,omitempty" tf:"description,omitempty"` // Allow VMDirectPath Gen2 on the ports this policy applies to. // +kubebuilder:validation:Optional DirectpathGen2Allowed *bool `json:"directpathGen2Allowed,omitempty" tf:"directpath_gen2_allowed,omitempty"` // The ID of the VDS to add the // port group to. Forces a new resource if changed. // The UUID of the DVS to attach this port group to. // +kubebuilder:validation:Required DistributedVirtualSwitchUUID *string `json:"distributedVirtualSwitchUuid" tf:"distributed_virtual_switch_uuid,omitempty"` // The average egress bandwidth in bits per second if egress shaping is enabled on the port. // +kubebuilder:validation:Optional EgressShapingAverageBandwidth *float64 `json:"egressShapingAverageBandwidth,omitempty" tf:"egress_shaping_average_bandwidth,omitempty"` // The maximum egress burst size allowed in bytes if egress shaping is enabled on the port. // +kubebuilder:validation:Optional EgressShapingBurstSize *float64 `json:"egressShapingBurstSize,omitempty" tf:"egress_shaping_burst_size,omitempty"` // True if the traffic shaper is enabled for egress traffic on the port. // +kubebuilder:validation:Optional EgressShapingEnabled *bool `json:"egressShapingEnabled,omitempty" tf:"egress_shaping_enabled,omitempty"` // The peak egress bandwidth during bursts in bits per second if egress traffic shaping is enabled on the port. // +kubebuilder:validation:Optional EgressShapingPeakBandwidth *float64 `json:"egressShapingPeakBandwidth,omitempty" tf:"egress_shaping_peak_bandwidth,omitempty"` // If true, the teaming policy will re-activate failed interfaces higher in precedence when they come back up. // +kubebuilder:validation:Optional Failback *bool `json:"failback,omitempty" tf:"failback,omitempty"` // The average ingress bandwidth in bits per second if ingress shaping is enabled on the port. // +kubebuilder:validation:Optional IngressShapingAverageBandwidth *float64 `json:"ingressShapingAverageBandwidth,omitempty" tf:"ingress_shaping_average_bandwidth,omitempty"` // The maximum ingress burst size allowed in bytes if ingress shaping is enabled on the port. // +kubebuilder:validation:Optional IngressShapingBurstSize *float64 `json:"ingressShapingBurstSize,omitempty" tf:"ingress_shaping_burst_size,omitempty"` // True if the traffic shaper is enabled for ingress traffic on the port. // +kubebuilder:validation:Optional IngressShapingEnabled *bool `json:"ingressShapingEnabled,omitempty" tf:"ingress_shaping_enabled,omitempty"` // The peak ingress bandwidth during bursts in bits per second if ingress traffic shaping is enabled on the port. // +kubebuilder:validation:Optional IngressShapingPeakBandwidth *float64 `json:"ingressShapingPeakBandwidth,omitempty" tf:"ingress_shaping_peak_bandwidth,omitempty"` // Whether or not to enable LACP on all uplink ports. // +kubebuilder:validation:Optional LacpEnabled *bool `json:"lacpEnabled,omitempty" tf:"lacp_enabled,omitempty"` // The uplink LACP mode to use. Can be one of active or passive. // +kubebuilder:validation:Optional LacpMode *string `json:"lacpMode,omitempty" tf:"lacp_mode,omitempty"` // Allow a port in this port group to be // moved to another port group while it is connected. // Allow a live port to be moved in and out of the portgroup. // +kubebuilder:validation:Optional LivePortMovingAllowed *bool `json:"livePortMovingAllowed,omitempty" tf:"live_port_moving_allowed,omitempty"` // Indicates whether to enable netflow on all ports. // +kubebuilder:validation:Optional NetflowEnabled *bool `json:"netflowEnabled,omitempty" tf:"netflow_enabled,omitempty"` // Allow the // Netflow policy on this port group to be overridden on an // individual port. // Allow the enabling or disabling of Netflow on a port, contrary to the policy in the portgroup. // +kubebuilder:validation:Optional NetflowOverrideAllowed *bool `json:"netflowOverrideAllowed,omitempty" tf:"netflow_override_allowed,omitempty"` // The key of a network resource pool // to associate with this port group. The default is -1, which implies no // association. // The key of a network resource pool to associate with this portgroup. // +kubebuilder:validation:Optional NetworkResourcePoolKey *string `json:"networkResourcePoolKey,omitempty" tf:"network_resource_pool_key,omitempty"` // Allow the network // resource pool set on this port group to be overridden on an individual port. // Allow the network resource pool of an individual port to override the setting in the portgroup. // +kubebuilder:validation:Optional NetworkResourcePoolOverrideAllowed *bool `json:"networkResourcePoolOverrideAllowed,omitempty" tf:"network_resource_pool_override_allowed,omitempty"` // If true, the teaming policy will notify the broadcast network of a NIC failover, triggering cache updates. // +kubebuilder:validation:Optional NotifySwitches *bool `json:"notifySwitches,omitempty" tf:"notify_switches,omitempty"` // The number of ports available on this port // group. Cannot be decreased below the amount of used ports on the port group. // The number of ports in this portgroup. The DVS will expand and shrink by modifying this setting. // +kubebuilder:validation:Optional NumberOfPorts *float64 `json:"numberOfPorts,omitempty" tf:"number_of_ports,omitempty"` // Reset a port's settings to the // settings defined on this port group policy when the port disconnects. // Reset the setting of any ports in this portgroup back to the default setting when the port disconnects. // +kubebuilder:validation:Optional PortConfigResetAtDisconnect *bool `json:"portConfigResetAtDisconnect,omitempty" tf:"port_config_reset_at_disconnect,omitempty"` // An optional formatting policy for naming of // the ports in this port group. See the portNameFormat attribute listed // here for details on the format syntax. // A template string to use when creating ports in the portgroup. // +kubebuilder:validation:Optional PortNameFormat *string `json:"portNameFormat,omitempty" tf:"port_name_format,omitempty"` // Used to define a secondary VLAN // ID when using private VLANs. // The secondary VLAN ID for this port. // +kubebuilder:validation:Optional PortPrivateSecondaryVlanID *float64 `json:"portPrivateSecondaryVlanId,omitempty" tf:"port_private_secondary_vlan_id,omitempty"` // Allow the // security policy settings defined in this port group // policy to be overridden on an individual port. // Allow security policy settings on a port to override those on the portgroup. // +kubebuilder:validation:Optional SecurityPolicyOverrideAllowed *bool `json:"securityPolicyOverrideAllowed,omitempty" tf:"security_policy_override_allowed,omitempty"` // Allow the // traffic shaping options on this port group policy // to be overridden on an individual port. // Allow the traffic shaping policies of an individual port to override the settings in the portgroup. // +kubebuilder:validation:Optional ShapingOverrideAllowed *bool `json:"shapingOverrideAllowed,omitempty" tf:"shaping_override_allowed,omitempty"` // List of standby uplinks used for load balancing, matching the names of the uplinks assigned in the DVS. // +kubebuilder:validation:Optional StandbyUplinks []*string `json:"standbyUplinks,omitempty" tf:"standby_uplinks,omitempty"` // A list of tag IDs to apply to this object. // +kubebuilder:validation:Optional Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` // The network adapter teaming policy. Can be one of loadbalance_ip, loadbalance_srcmac, loadbalance_srcid, failover_explicit, or loadbalance_loadbased. // +kubebuilder:validation:Optional TeamingPolicy *string `json:"teamingPolicy,omitempty" tf:"teaming_policy,omitempty"` // Allow any traffic filters on // this port group to be overridden on an individual port. // Allow any filter policies set on the individual port to override those in the portgroup. // +kubebuilder:validation:Optional TrafficFilterOverrideAllowed *bool `json:"trafficFilterOverrideAllowed,omitempty" tf:"traffic_filter_override_allowed,omitempty"` // If true, a copy of packets sent to the switch will always be forwarded to an uplink in addition to the regular packet forwarded done by the switch. // +kubebuilder:validation:Optional TxUplink *bool `json:"txUplink,omitempty" tf:"tx_uplink,omitempty"` // The port group type. Can be one of earlyBinding (static // binding) or ephemeral. Default: earlyBinding. // The type of portgroup. Can be one of earlyBinding (static) or ephemeral. // +kubebuilder:validation:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` // Allow the // uplink teaming options on this port group to be // overridden on an individual port. // Allow the uplink teaming policies on a port to override those on the portgroup. // +kubebuilder:validation:Optional UplinkTeamingOverrideAllowed *bool `json:"uplinkTeamingOverrideAllowed,omitempty" tf:"uplink_teaming_override_allowed,omitempty"` // The member VLAN for the ports this policy applies to. A // value of 0 means no VLAN. // The VLAN ID for single VLAN mode. 0 denotes no VLAN. // +kubebuilder:validation:Optional VlanID *float64 `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` // Allow the // VLAN settings on this port group to be overridden on an // individual port. // Allow the VLAN configuration on a port to override those on the portgroup. // +kubebuilder:validation:Optional VlanOverrideAllowed *bool `json:"vlanOverrideAllowed,omitempty" tf:"vlan_override_allowed,omitempty"` // Used to denote VLAN trunking. Use the min_vlan // and max_vlan sub-arguments to define the tagged VLAN range. Multiple // vlan_range definitions are allowed, but they must not overlap. Example // below: // The VLAN ID for single VLAN mode. 0 denotes no VLAN. // +kubebuilder:validation:Optional VlanRange []VlanRangeParameters `json:"vlanRange,omitempty" tf:"vlan_range,omitempty"` }
func (*PortGroupParameters) DeepCopy ¶
func (in *PortGroupParameters) DeepCopy() *PortGroupParameters
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortGroupParameters.
func (*PortGroupParameters) DeepCopyInto ¶
func (in *PortGroupParameters) DeepCopyInto(out *PortGroupParameters)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PortGroupSpec ¶
type PortGroupSpec struct { v1.ResourceSpec `json:",inline"` ForProvider PortGroupParameters `json:"forProvider"` }
PortGroupSpec defines the desired state of PortGroup
func (*PortGroupSpec) DeepCopy ¶
func (in *PortGroupSpec) DeepCopy() *PortGroupSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortGroupSpec.
func (*PortGroupSpec) DeepCopyInto ¶
func (in *PortGroupSpec) DeepCopyInto(out *PortGroupSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PortGroupStatus ¶
type PortGroupStatus struct { v1.ResourceStatus `json:",inline"` AtProvider PortGroupObservation `json:"atProvider,omitempty"` }
PortGroupStatus defines the observed state of PortGroup.
func (*PortGroupStatus) DeepCopy ¶
func (in *PortGroupStatus) DeepCopy() *PortGroupStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortGroupStatus.
func (*PortGroupStatus) DeepCopyInto ¶
func (in *PortGroupStatus) DeepCopyInto(out *PortGroupStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type VlanRangeObservation ¶
type VlanRangeObservation struct { }
func (*VlanRangeObservation) DeepCopy ¶
func (in *VlanRangeObservation) DeepCopy() *VlanRangeObservation
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VlanRangeObservation.
func (*VlanRangeObservation) DeepCopyInto ¶
func (in *VlanRangeObservation) DeepCopyInto(out *VlanRangeObservation)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type VlanRangeParameters ¶
type VlanRangeParameters struct { // The minimum VLAN to use in the range. // +kubebuilder:validation:Required MaxVlan *float64 `json:"maxVlan" tf:"max_vlan,omitempty"` // The minimum VLAN to use in the range. // +kubebuilder:validation:Required MinVlan *float64 `json:"minVlan" tf:"min_vlan,omitempty"` }
func (*VlanRangeParameters) DeepCopy ¶
func (in *VlanRangeParameters) DeepCopy() *VlanRangeParameters
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VlanRangeParameters.
func (*VlanRangeParameters) DeepCopyInto ¶
func (in *VlanRangeParameters) DeepCopyInto(out *VlanRangeParameters)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.