Documentation ¶
Overview ¶
Package v1alpha1 contains API Schema definitions for the source v1alpha1 API group +kubebuilder:object:generate=true +groupName=source.toolkit.fluxcd.io
Index ¶
- Constants
- Variables
- func ArtifactPath(kind, namespace, name, filename string) string
- func GitRepositoryReadyMessage(repository GitRepository) string
- func HelmChartReadyMessage(chart HelmChart) string
- func HelmRepositoryReadyMessage(repository HelmRepository) string
- type Artifact
- type GitRepository
- func (in *GitRepository) DeepCopy() *GitRepository
- func (in *GitRepository) DeepCopyInto(out *GitRepository)
- func (in *GitRepository) DeepCopyObject() runtime.Object
- func (in *GitRepository) GetArtifact() *Artifact
- func (in *GitRepository) GetInterval() metav1.Duration
- func (in *GitRepository) GetTimeout() time.Duration
- type GitRepositoryList
- type GitRepositoryRef
- type GitRepositorySpec
- type GitRepositoryStatus
- type GitRepositoryVerification
- type HelmChart
- type HelmChartList
- type HelmChartSpec
- type HelmChartStatus
- type HelmRepository
- func (in *HelmRepository) DeepCopy() *HelmRepository
- func (in *HelmRepository) DeepCopyInto(out *HelmRepository)
- func (in *HelmRepository) DeepCopyObject() runtime.Object
- func (in *HelmRepository) GetArtifact() *Artifact
- func (in *HelmRepository) GetInterval() metav1.Duration
- func (in *HelmRepository) GetTimeout() time.Duration
- type HelmRepositoryList
- type HelmRepositorySpec
- type HelmRepositoryStatus
- type Source
- type SourceCondition
Constants ¶
const ( // InitializingReason represents the fact that a given source is being initialized. InitializingReason string = "Initializing" // URLInvalidReason represents the fact that a given source has an invalid URL. URLInvalidReason string = "URLInvalid" // StorageOperationFailedReason signals a failure caused by a storage operation. StorageOperationFailedReason string = "StorageOperationFailed" // AuthenticationFailedReason represents the fact that a given secret does not // have the required fields or the provided credentials do not match. AuthenticationFailedReason string = "AuthenticationFailed" // VerificationFailedReason represents the fact that the cryptographic provenance // verification for the source failed. VerificationFailedReason string = "VerificationFailed" // ProgressingReason represents the fact that a source reconciliation // is underway. ProgressingReason string = "Progressing" )
const ( GitRepositoryKind = "GitRepository" GitRepositoryTimeout = time.Second * 20 )
const ( // GitOperationSucceedReason represents the fact that the git clone, pull // and checkout operations succeeded. GitOperationSucceedReason string = "GitOperationSucceed" // GitOperationFailedReason represents the fact that the git clone, pull or // checkout operations failed. GitOperationFailedReason string = "GitOperationFailed" )
const ( // ChartPullFailedReason represents the fact that the pull of the // Helm chart failed. ChartPullFailedReason string = "ChartPullFailed" // ChartPulLSucceededReason represents the fact that the pull of // the Helm chart succeeded. ChartPullSucceededReason string = "ChartPullSucceeded" )
const ( HelmRepositoryKind = "HelmRepository" HelmRepositoryTimeout = time.Second * 60 )
const ( // IndexationFailedReason represents the fact that the indexation // of the given Helm repository failed. IndexationFailedReason string = "IndexationFailed" // IndexationSucceededReason represents the fact that the indexation // of the given Helm repository succeeded. IndexationSucceededReason string = "IndexationSucceed" )
const HelmChartKind = "HelmChart"
const ( // ReadyCondition represents the fact that a given source is in ready state. ReadyCondition string = "Ready" )
const ( // ReconcileAtAnnotation is the annotation used for triggering a // reconciliation outside of the defined schedule. ReconcileAtAnnotation string = "fluxcd.io/reconcileAt" )
const SourceFinalizer = "finalizers.fluxcd.io"
Variables ¶
var ( // GroupVersion is group version used to register these objects. GroupVersion = schema.GroupVersion{Group: "source.toolkit.fluxcd.io", Version: "v1alpha1"} // SchemeBuilder is used to add go types to the GroupVersionKind scheme. SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} // AddToScheme adds the types in this group-version to the given scheme. AddToScheme = SchemeBuilder.AddToScheme )
Functions ¶
func ArtifactPath ¶
ArtifactPath returns the artifact path in the form of <source-kind>/<source-namespace>/<source-name>/<artifact-filename>
func GitRepositoryReadyMessage ¶
func GitRepositoryReadyMessage(repository GitRepository) string
ReadyMessage returns the message of the SourceCondition of type Ready with status true if present, or an empty string.
func HelmChartReadyMessage ¶
HelmChartReadyMessage returns the message of the SourceCondition of type Ready with status true if present, or an empty string.
func HelmRepositoryReadyMessage ¶
func HelmRepositoryReadyMessage(repository HelmRepository) string
HelmRepositoryReadyMessage returns the message of the SourceCondition of type Ready with status true if present, or an empty string.
Types ¶
type Artifact ¶
type Artifact struct { // Path is the local file path of this artifact. // +required Path string `json:"path"` // URL is the HTTP address of this artifact. // +required URL string `json:"url"` // Revision is a human readable identifier traceable in the origin source system. // It can be a commit sha, git tag, a helm index timestamp, // a helm chart version, a checksum, etc. // +optional Revision string `json:"revision"` // LastUpdateTime is the timestamp corresponding to the last // update of this artifact. // +required LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"` }
Artifact represents the output of a source synchronisation
func (*Artifact) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Artifact.
func (*Artifact) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GitRepository ¶
type GitRepository struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec GitRepositorySpec `json:"spec,omitempty"` Status GitRepositoryStatus `json:"status,omitempty"` }
GitRepository is the Schema for the gitrepositories API
func GitRepositoryNotReady ¶
func GitRepositoryNotReady(repository GitRepository, reason, message string) GitRepository
GitRepositoryNotReady resets the conditions of the GitRepository to SourceCondition of type Ready with status false and the given reason and message. It returns the modified GitRepository.
func GitRepositoryProgressing ¶
func GitRepositoryProgressing(repository GitRepository) GitRepository
GitRepositoryProgressing resets the conditions of the GitRepository to SourceCondition of type Ready with status unknown and progressing reason and message. It returns the modified GitRepository.
func GitRepositoryReady ¶
func GitRepositoryReady(repository GitRepository, artifact Artifact, url, reason, message string) GitRepository
GitRepositoryReady sets the given artifact and url on the GitRepository and resets the conditions to SourceCondition of type Ready with status true and the given reason and message. It returns the modified GitRepository.
func (*GitRepository) DeepCopy ¶
func (in *GitRepository) DeepCopy() *GitRepository
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitRepository.
func (*GitRepository) DeepCopyInto ¶
func (in *GitRepository) DeepCopyInto(out *GitRepository)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*GitRepository) DeepCopyObject ¶
func (in *GitRepository) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*GitRepository) GetArtifact ¶
func (in *GitRepository) GetArtifact() *Artifact
GetArtifact returns the latest artifact from the source if present in the status sub-resource.
func (*GitRepository) GetInterval ¶
func (in *GitRepository) GetInterval() metav1.Duration
GetInterval returns the interval at which the source is updated.
func (*GitRepository) GetTimeout ¶
func (in *GitRepository) GetTimeout() time.Duration
GetTimeout returns the configured timeout or the default.
type GitRepositoryList ¶
type GitRepositoryList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []GitRepository `json:"items"` }
GitRepositoryList contains a list of GitRepository +kubebuilder:object:root=true
func (*GitRepositoryList) DeepCopy ¶
func (in *GitRepositoryList) DeepCopy() *GitRepositoryList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitRepositoryList.
func (*GitRepositoryList) DeepCopyInto ¶
func (in *GitRepositoryList) DeepCopyInto(out *GitRepositoryList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*GitRepositoryList) DeepCopyObject ¶
func (in *GitRepositoryList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type GitRepositoryRef ¶
type GitRepositoryRef struct { // The git branch to checkout, defaults to master. // +optional Branch string `json:"branch,omitempty"` // The git tag to checkout, takes precedence over branch. // +optional Tag string `json:"tag,omitempty"` // The git tag semver expression, takes precedence over tag. // +optional SemVer string `json:"semver,omitempty"` // The git commit sha to checkout, if specified tag filters will be ignored. // +optional Commit string `json:"commit,omitempty"` }
GitRepositoryRef defines the git ref used for pull and checkout operations.
func (*GitRepositoryRef) DeepCopy ¶
func (in *GitRepositoryRef) DeepCopy() *GitRepositoryRef
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitRepositoryRef.
func (*GitRepositoryRef) DeepCopyInto ¶
func (in *GitRepositoryRef) DeepCopyInto(out *GitRepositoryRef)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GitRepositorySpec ¶
type GitRepositorySpec struct { // The repository URL, can be a HTTP or SSH address. // +kubebuilder:validation:Pattern="^(http|https|ssh)://" // +required URL string `json:"url"` // The secret name containing the Git credentials. // For HTTPS repositories the secret must contain username and password // fields. // For SSH repositories the secret must contain identity, identity.pub and // known_hosts fields. // +optional SecretRef *corev1.LocalObjectReference `json:"secretRef,omitempty"` // The interval at which to check for repository updates. // +required Interval metav1.Duration `json:"interval"` // The timeout for remote git operations like cloning, default to 20s. // +optional Timeout *metav1.Duration `json:"timeout,omitempty"` // The git reference to checkout and monitor for changes, defaults to // master branch. // +optional Reference *GitRepositoryRef `json:"ref,omitempty"` // Verify OpenPGP signature for the commit that HEAD points to. // +optional Verification *GitRepositoryVerification `json:"verify,omitempty"` // Ignore overrides the set of excluded patterns in the .sourceignore // format (which is the same as .gitignore). If not provided, a default will // be used, consult the documentation for your version to find out what those // are. // +optional Ignore *string `json:"ignore,omitempty"` }
GitRepositorySpec defines the desired state of a Git repository.
func (*GitRepositorySpec) DeepCopy ¶
func (in *GitRepositorySpec) DeepCopy() *GitRepositorySpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitRepositorySpec.
func (*GitRepositorySpec) DeepCopyInto ¶
func (in *GitRepositorySpec) DeepCopyInto(out *GitRepositorySpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GitRepositoryStatus ¶
type GitRepositoryStatus struct { // +optional Conditions []SourceCondition `json:"conditions,omitempty"` // URL is the download link for the artifact output of the last repository // sync. // +optional URL string `json:"url,omitempty"` // Artifact represents the output of the last successful repository sync. // +optional Artifact *Artifact `json:"artifact,omitempty"` }
GitRepositoryStatus defines the observed state of a Git repository.
func (*GitRepositoryStatus) DeepCopy ¶
func (in *GitRepositoryStatus) DeepCopy() *GitRepositoryStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitRepositoryStatus.
func (*GitRepositoryStatus) DeepCopyInto ¶
func (in *GitRepositoryStatus) DeepCopyInto(out *GitRepositoryStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type GitRepositoryVerification ¶
type GitRepositoryVerification struct { // Mode describes what git object should be verified, currently ('head'). // +kubebuilder:validation:Enum=head Mode string `json:"mode"` // The secret name containing the public keys of all trusted git authors. SecretRef corev1.LocalObjectReference `json:"secretRef,omitempty"` }
GitRepositoryVerification defines the OpenPGP signature verification process.
func (*GitRepositoryVerification) DeepCopy ¶
func (in *GitRepositoryVerification) DeepCopy() *GitRepositoryVerification
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitRepositoryVerification.
func (*GitRepositoryVerification) DeepCopyInto ¶
func (in *GitRepositoryVerification) DeepCopyInto(out *GitRepositoryVerification)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type HelmChart ¶
type HelmChart struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec HelmChartSpec `json:"spec,omitempty"` Status HelmChartStatus `json:"status,omitempty"` }
HelmChart is the Schema for the helmcharts API
func HelmChartNotReady ¶
HelmChartNotReady resets the conditions of the HelmChart to SourceCondition of type Ready with status false and the given reason and message. It returns the modified HelmChart.
func HelmChartProgressing ¶
HelmChartProgressing resets the conditions of the HelmChart to SourceCondition of type Ready with status unknown and progressing reason and message. It returns the modified HelmChart.
func HelmChartReady ¶
HelmChartReady sets the given artifact and url on the HelmChart and resets the conditions to SourceCondition of type Ready with status true and the given reason and message. It returns the modified HelmChart.
func (*HelmChart) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmChart.
func (*HelmChart) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*HelmChart) DeepCopyObject ¶
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*HelmChart) GetArtifact ¶
GetArtifact returns the latest artifact from the source if present in the status sub-resource.
func (*HelmChart) GetInterval ¶
GetInterval returns the interval at which the source is updated.
type HelmChartList ¶
type HelmChartList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []HelmChart `json:"items"` }
HelmChartList contains a list of HelmChart
func (*HelmChartList) DeepCopy ¶
func (in *HelmChartList) DeepCopy() *HelmChartList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmChartList.
func (*HelmChartList) DeepCopyInto ¶
func (in *HelmChartList) DeepCopyInto(out *HelmChartList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*HelmChartList) DeepCopyObject ¶
func (in *HelmChartList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type HelmChartSpec ¶
type HelmChartSpec struct { // The name of the Helm chart, as made available by the referenced // Helm repository. // +required Name string `json:"name"` // The chart version semver expression, defaults to latest when // omitted. // +optional Version string `json:"version,omitempty"` // The name of the HelmRepository the chart is available at. // +required HelmRepositoryRef corev1.LocalObjectReference `json:"helmRepositoryRef"` // The interval at which to check the Helm repository for updates. // +required Interval metav1.Duration `json:"interval"` }
HelmChartSpec defines the desired state of a Helm chart.
func (*HelmChartSpec) DeepCopy ¶
func (in *HelmChartSpec) DeepCopy() *HelmChartSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmChartSpec.
func (*HelmChartSpec) DeepCopyInto ¶
func (in *HelmChartSpec) DeepCopyInto(out *HelmChartSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type HelmChartStatus ¶
type HelmChartStatus struct { // +optional Conditions []SourceCondition `json:"conditions,omitempty"` // URL is the download link for the last chart pulled. // +optional URL string `json:"url,omitempty"` // Artifact represents the output of the last successful chart sync. // +optional Artifact *Artifact `json:"artifact,omitempty"` }
HelmChartStatus defines the observed state of the HelmChart.
func (*HelmChartStatus) DeepCopy ¶
func (in *HelmChartStatus) DeepCopy() *HelmChartStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmChartStatus.
func (*HelmChartStatus) DeepCopyInto ¶
func (in *HelmChartStatus) DeepCopyInto(out *HelmChartStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type HelmRepository ¶
type HelmRepository struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec HelmRepositorySpec `json:"spec,omitempty"` Status HelmRepositoryStatus `json:"status,omitempty"` }
HelmRepository is the Schema for the helmrepositories API
func HelmRepositoryNotReady ¶
func HelmRepositoryNotReady(repository HelmRepository, reason, message string) HelmRepository
HelmRepositoryNotReady resets the conditions of the HelmRepository to SourceCondition of type Ready with status false and the given reason and message. It returns the modified HelmRepository.
func HelmRepositoryProgressing ¶
func HelmRepositoryProgressing(repository HelmRepository) HelmRepository
HelmRepositoryProgressing resets the conditions of the HelmRepository to SourceCondition of type Ready with status unknown and progressing reason and message. It returns the modified HelmRepository.
func HelmRepositoryReady ¶
func HelmRepositoryReady(repository HelmRepository, artifact Artifact, url, reason, message string) HelmRepository
HelmRepositoryReady sets the given artifact and url on the HelmRepository and resets the conditions to SourceCondition of type Ready with status true and the given reason and message. It returns the modified HelmRepository.
func (*HelmRepository) DeepCopy ¶
func (in *HelmRepository) DeepCopy() *HelmRepository
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRepository.
func (*HelmRepository) DeepCopyInto ¶
func (in *HelmRepository) DeepCopyInto(out *HelmRepository)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*HelmRepository) DeepCopyObject ¶
func (in *HelmRepository) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*HelmRepository) GetArtifact ¶
func (in *HelmRepository) GetArtifact() *Artifact
GetArtifact returns the latest artifact from the source if present in the status sub-resource.
func (*HelmRepository) GetInterval ¶
func (in *HelmRepository) GetInterval() metav1.Duration
GetInterval returns the interval at which the source is updated.
func (*HelmRepository) GetTimeout ¶ added in v0.0.8
func (in *HelmRepository) GetTimeout() time.Duration
GetTimeout returns the configured timeout or the default.
type HelmRepositoryList ¶
type HelmRepositoryList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []HelmRepository `json:"items"` }
HelmRepositoryList contains a list of HelmRepository +kubebuilder:object:root=true
func (*HelmRepositoryList) DeepCopy ¶
func (in *HelmRepositoryList) DeepCopy() *HelmRepositoryList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRepositoryList.
func (*HelmRepositoryList) DeepCopyInto ¶
func (in *HelmRepositoryList) DeepCopyInto(out *HelmRepositoryList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*HelmRepositoryList) DeepCopyObject ¶
func (in *HelmRepositoryList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type HelmRepositorySpec ¶
type HelmRepositorySpec struct { // The Helm repository URL, a valid URL contains at least a // protocol and host. // +required URL string `json:"url"` // The name of the secret containing authentication credentials // for the Helm repository. // For HTTP/S basic auth the secret must contain username and password // fields. // For TLS the secret must contain caFile, keyFile and caCert fields. // +optional SecretRef *corev1.LocalObjectReference `json:"secretRef,omitempty"` // The interval at which to check the upstream for updates. // +required Interval metav1.Duration `json:"interval"` // The timeout of index downloading, defaults to 60s. // +optional Timeout *metav1.Duration `json:"timeout,omitempty"` }
HelmRepositorySpec defines the reference to a Helm repository.
func (*HelmRepositorySpec) DeepCopy ¶
func (in *HelmRepositorySpec) DeepCopy() *HelmRepositorySpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRepositorySpec.
func (*HelmRepositorySpec) DeepCopyInto ¶
func (in *HelmRepositorySpec) DeepCopyInto(out *HelmRepositorySpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type HelmRepositoryStatus ¶
type HelmRepositoryStatus struct { // +optional Conditions []SourceCondition `json:"conditions,omitempty"` // URL is the download link for the last index fetched. // +optional URL string `json:"url,omitempty"` // Artifact represents the output of the last successful repository sync. // +optional Artifact *Artifact `json:"artifact,omitempty"` }
HelmRepositoryStatus defines the observed state of the HelmRepository.
func (*HelmRepositoryStatus) DeepCopy ¶
func (in *HelmRepositoryStatus) DeepCopy() *HelmRepositoryStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRepositoryStatus.
func (*HelmRepositoryStatus) DeepCopyInto ¶
func (in *HelmRepositoryStatus) DeepCopyInto(out *HelmRepositoryStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type Source ¶
type Source interface { // GetArtifact returns the latest artifact from the source // if present in the status sub-resource. GetArtifact() *Artifact // GetInterval returns the interval at which the source is updated. GetInterval() metav1.Duration }
Source interface must be supported by all API types. +k8s:deepcopy-gen=false
type SourceCondition ¶
type SourceCondition struct { // Type of the condition, currently ('Ready'). // +required Type string `json:"type"` // Status of the condition, one of ('True', 'False', 'Unknown'). // +required Status corev1.ConditionStatus `json:"status"` // LastTransitionTime is the timestamp corresponding to the last status // change of this condition. // +required LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` // Reason is a brief machine readable explanation for the condition's last // transition. // +required Reason string `json:"reason,omitempty"` // Message is a human readable description of the details of the last // transition, complementing reason. // +optional Message string `json:"message,omitempty"` }
SourceCondition contains condition information for a source.
func (*SourceCondition) DeepCopy ¶
func (in *SourceCondition) DeepCopy() *SourceCondition
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SourceCondition.
func (*SourceCondition) DeepCopyInto ¶
func (in *SourceCondition) DeepCopyInto(out *SourceCondition)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.