func (in *ClowdJobInvocationStatus) DeepCopy() *ClowdJobInvocationStatus {
	if in == nil {
		return nil
	}
	out := new(ClowdJobInvocationStatus)
	in.DeepCopyInto(out)
	return out
}
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClowdJobInvocationStatus.
package v1alpha1
import (
	"k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/runtime"
)
func (in *AppInfo) DeepCopyInto(out *AppInfo) {
	*out = *in
	if in.Deployments != nil {
		in, out := &in.Deployments, &out.Deployments
		*out = make([]DeploymentInfo, len(*in))
		copy(*out, *in)
	}
}
func (in *AppInfo) DeepCopy() *AppInfo {
	if in == nil {
		return nil
	}
	out := new(AppInfo)
	in.DeepCopyInto(out)
	return out
}
func (in *AppResourceStatus) DeepCopyInto(out *AppResourceStatus) {
	*out = *in
}
func (in *AppResourceStatus) DeepCopy() *AppResourceStatus {
	if in == nil {
		return nil
	}
	out := new(AppResourceStatus)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdApp) DeepCopyInto(out *ClowdApp) {
	*out = *in
	out.TypeMeta = in.TypeMeta
	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
	in.Spec.DeepCopyInto(&out.Spec)
	in.Status.DeepCopyInto(&out.Status)
}
func (in *ClowdApp) DeepCopy() *ClowdApp {
	if in == nil {
		return nil
	}
	out := new(ClowdApp)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdApp) DeepCopyObject() runtime.Object {
	if c := in.DeepCopy(); c != nil {
		return c
	}
	return nil
}
func (in *ClowdAppList) DeepCopyInto(out *ClowdAppList) {
	*out = *in
	out.TypeMeta = in.TypeMeta
	in.ListMeta.DeepCopyInto(&out.ListMeta)
	if in.Items != nil {
		in, out := &in.Items, &out.Items
		*out = make([]ClowdApp, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
}
func (in *ClowdAppList) DeepCopy() *ClowdAppList {
	if in == nil {
		return nil
	}
	out := new(ClowdAppList)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdAppList) DeepCopyObject() runtime.Object {
	if c := in.DeepCopy(); c != nil {
		return c
	}
	return nil
}
func (in *ClowdAppSpec) DeepCopyInto(out *ClowdAppSpec) {
	*out = *in
	if in.Deployments != nil {
		in, out := &in.Deployments, &out.Deployments
		*out = make([]Deployment, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
	if in.Jobs != nil {
		in, out := &in.Jobs, &out.Jobs
		*out = make([]Job, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
	if in.KafkaTopics != nil {
		in, out := &in.KafkaTopics, &out.KafkaTopics
		*out = make([]KafkaTopicSpec, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
	in.Database.DeepCopyInto(&out.Database)
	if in.ObjectStore != nil {
		in, out := &in.ObjectStore, &out.ObjectStore
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	if in.Dependencies != nil {
		in, out := &in.Dependencies, &out.Dependencies
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	if in.OptionalDependencies != nil {
		in, out := &in.OptionalDependencies, &out.OptionalDependencies
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	out.Testing = in.Testing
	out.Cyndi = in.Cyndi
}
func (in *ClowdAppSpec) DeepCopy() *ClowdAppSpec {
	if in == nil {
		return nil
	}
	out := new(ClowdAppSpec)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdAppStatus) DeepCopyInto(out *ClowdAppStatus) {
	*out = *in
	out.Deployments = in.Deployments
	if in.Conditions != nil {
		in, out := &in.Conditions, &out.Conditions
		*out = make([]ClowdCondition, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
}
func (in *ClowdAppStatus) DeepCopy() *ClowdAppStatus {
	if in == nil {
		return nil
	}
	out := new(ClowdAppStatus)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdCondition) DeepCopyInto(out *ClowdCondition) {
	*out = *in
	in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime)
}
func (in *ClowdCondition) DeepCopy() *ClowdCondition {
	if in == nil {
		return nil
	}
	out := new(ClowdCondition)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdEnvironment) DeepCopyInto(out *ClowdEnvironment) {
	*out = *in
	out.TypeMeta = in.TypeMeta
	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
	in.Spec.DeepCopyInto(&out.Spec)
	in.Status.DeepCopyInto(&out.Status)
}
func (in *ClowdEnvironment) DeepCopy() *ClowdEnvironment {
	if in == nil {
		return nil
	}
	out := new(ClowdEnvironment)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdEnvironment) DeepCopyObject() runtime.Object {
	if c := in.DeepCopy(); c != nil {
		return c
	}
	return nil
}
func (in *ClowdEnvironmentList) DeepCopyInto(out *ClowdEnvironmentList) {
	*out = *in
	out.TypeMeta = in.TypeMeta
	in.ListMeta.DeepCopyInto(&out.ListMeta)
	if in.Items != nil {
		in, out := &in.Items, &out.Items
		*out = make([]ClowdEnvironment, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
}
func (in *ClowdEnvironmentList) DeepCopy() *ClowdEnvironmentList {
	if in == nil {
		return nil
	}
	out := new(ClowdEnvironmentList)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdEnvironmentList) DeepCopyObject() runtime.Object {
	if c := in.DeepCopy(); c != nil {
		return c
	}
	return nil
}
func (in *ClowdEnvironmentSpec) DeepCopyInto(out *ClowdEnvironmentSpec) {
	*out = *in
	in.Providers.DeepCopyInto(&out.Providers)
	in.ResourceDefaults.DeepCopyInto(&out.ResourceDefaults)
	out.ServiceConfig = in.ServiceConfig
}
func (in *ClowdEnvironmentSpec) DeepCopy() *ClowdEnvironmentSpec {
	if in == nil {
		return nil
	}
	out := new(ClowdEnvironmentSpec)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdEnvironmentStatus) DeepCopyInto(out *ClowdEnvironmentStatus) {
	*out = *in
	if in.Conditions != nil {
		in, out := &in.Conditions, &out.Conditions
		*out = make([]ClowdCondition, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
	out.Deployments = in.Deployments
	if in.Apps != nil {
		in, out := &in.Apps, &out.Apps
		*out = make([]AppInfo, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
	out.Prometheus = in.Prometheus
}
func (in *ClowdEnvironmentStatus) DeepCopy() *ClowdEnvironmentStatus {
	if in == nil {
		return nil
	}
	out := new(ClowdEnvironmentStatus)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdJobInvocation) DeepCopyInto(out *ClowdJobInvocation) {
	*out = *in
	out.TypeMeta = in.TypeMeta
	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
	in.Spec.DeepCopyInto(&out.Spec)
	in.Status.DeepCopyInto(&out.Status)
}
func (in *ClowdJobInvocation) DeepCopy() *ClowdJobInvocation {
	if in == nil {
		return nil
	}
	out := new(ClowdJobInvocation)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdJobInvocation) DeepCopyObject() runtime.Object {
	if c := in.DeepCopy(); c != nil {
		return c
	}
	return nil
}
func (in *ClowdJobInvocationList) DeepCopyInto(out *ClowdJobInvocationList) {
	*out = *in
	out.TypeMeta = in.TypeMeta
	in.ListMeta.DeepCopyInto(&out.ListMeta)
	if in.Items != nil {
		in, out := &in.Items, &out.Items
		*out = make([]ClowdJobInvocation, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
}
func (in *ClowdJobInvocationList) DeepCopy() *ClowdJobInvocationList {
	if in == nil {
		return nil
	}
	out := new(ClowdJobInvocationList)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdJobInvocationList) DeepCopyObject() runtime.Object {
	if c := in.DeepCopy(); c != nil {
		return c
	}
	return nil
}
func (in *ClowdJobInvocationSpec) DeepCopyInto(out *ClowdJobInvocationSpec) {
	*out = *in
	if in.Jobs != nil {
		in, out := &in.Jobs, &out.Jobs
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	in.Testing.DeepCopyInto(&out.Testing)
}
func (in *ClowdJobInvocationSpec) DeepCopy() *ClowdJobInvocationSpec {
	if in == nil {
		return nil
	}
	out := new(ClowdJobInvocationSpec)
	in.DeepCopyInto(out)
	return out
}
func (in *ClowdJobInvocationStatus) DeepCopyInto(out *ClowdJobInvocationStatus) {
	*out = *in
	if in.Jobs != nil {
		in, out := &in.Jobs, &out.Jobs
		*out = make([]string, len(*in))
		copy(*out, *in)
	}
	if in.JobMap != nil {
		in, out := &in.JobMap, &out.JobMap
		*out = make(map[string]JobConditionState, len(*in))
		for key, val := range *in {
			(*out)[key] = val
		}
	}
	if in.Conditions != nil {
		in, out := &in.Conditions, &out.Conditions
		*out = make([]ClowdCondition, len(*in))
		for i := range *in {
			(*in)[i].DeepCopyInto(&(*out)[i])
		}
	}
}