| from taskflow import engines |
| from taskflow.patterns import graph_flow |
| |
| from atmosphere import clients |
| from atmosphere.operator.api import objects, types |
| from atmosphere.tasks import constants |
| from atmosphere.tasks.composite import openstack_helm |
| from atmosphere.tasks.kubernetes import cert_manager, v1 |
| |
| |
| def get_engine(config): |
| api = clients.get_pykube_api() |
| |
| if config.ingress_nginx.enabled: |
| objects.HelmRepository( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name=constants.HELM_REPOSITORY_INGRESS_NGINX, |
| namespace=config.ingress_nginx.namespace, |
| ), |
| spec=types.HelmRepositorySpec( |
| url=constants.HELM_REPOSITORY_INGRESS_NGINX_URL, |
| ), |
| ).apply() |
| objects.HelmRelease( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name=constants.HELM_RELEASE_INGRESS_NGINX_NAME, |
| namespace=config.ingress_nginx.namespace, |
| ), |
| spec=types.HelmReleaseSpec( |
| chart=types.HelmChartTemplate( |
| spec=types.HelmChartTemplateSpec( |
| chart=constants.HELM_RELEASE_INGRESS_NGINX_NAME, |
| version=constants.HELM_RELEASE_INGRESS_NGINX_VERSION, |
| source_ref=types.CrossNamespaceObjectReference( |
| kind="HelmRepository", |
| name=constants.HELM_REPOSITORY_INGRESS_NGINX, |
| namespace=config.ingress_nginx.namespace, |
| ), |
| ) |
| ), |
| values={ |
| **constants.HELM_RELEASE_INGRESS_NGINX_VALUES, |
| **config.ingress_nginx.overrides, |
| }, |
| ), |
| ).apply() |
| |
| # NOTE(mnaser): We're running this first since we do get often timeouts |
| # when waiting for the self-signed certificate authority to |
| # be ready. |
| objects.Namespace( |
| api=api, |
| metadata=types.ObjectMeta( |
| name=constants.NAMESPACE_CERT_MANAGER, |
| ), |
| ).apply() |
| objects.HelmRepository( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name=constants.HELM_REPOSITORY_JETSTACK, |
| namespace=constants.NAMESPACE_CERT_MANAGER, |
| ), |
| spec=types.HelmRepositorySpec( |
| url="https://charts.jetstack.io", |
| ), |
| ).apply() |
| objects.HelmRelease( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name=constants.HELM_RELEASE_CERT_MANAGER_NAME, |
| namespace=constants.NAMESPACE_CERT_MANAGER, |
| ), |
| spec=types.HelmReleaseSpec( |
| chart=types.HelmChartTemplate( |
| spec=types.HelmChartTemplateSpec( |
| chart=constants.HELM_RELEASE_CERT_MANAGER_NAME, |
| version=constants.HELM_RELEASE_CERT_MANAGER_VERSION, |
| source_ref=types.CrossNamespaceObjectReference( |
| kind="HelmRepository", |
| name=constants.HELM_REPOSITORY_JETSTACK, |
| namespace=constants.NAMESPACE_CERT_MANAGER, |
| ), |
| ) |
| ), |
| depends_on=[ |
| types.NamespacedObjectReference( |
| name=constants.HELM_RELEASE_INGRESS_NGINX_NAME, |
| namespace=config.ingress_nginx.namespace, |
| ) |
| ], |
| values=constants.HELM_RELEASE_CERT_MANAGER_VALUES, |
| ), |
| ).apply() |
| |
| objects.Namespace( |
| api=api, |
| metadata=types.ObjectMeta( |
| name=constants.NAMESPACE_MONITORING, |
| ), |
| ).apply() |
| objects.HelmRepository( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name=constants.HELM_REPOSITORY_NODE_FEATURE_DISCOVERY, |
| namespace=constants.NAMESPACE_MONITORING, |
| ), |
| spec=types.HelmRepositorySpec( |
| url="https://kubernetes-sigs.github.io/node-feature-discovery/charts", |
| ), |
| ).apply() |
| objects.HelmRelease( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name="node-feature-discovery", |
| namespace=constants.NAMESPACE_MONITORING, |
| ), |
| spec=types.HelmReleaseSpec( |
| chart=types.HelmChartTemplate( |
| spec=types.HelmChartTemplateSpec( |
| chart="node-feature-discovery", |
| version="0.11.2", |
| source_ref=types.CrossNamespaceObjectReference( |
| kind="HelmRepository", |
| name=constants.HELM_REPOSITORY_NODE_FEATURE_DISCOVERY, |
| namespace=constants.NAMESPACE_MONITORING, |
| ), |
| ) |
| ), |
| values=constants.HELM_RELEASE_NODE_FEATURE_DISCOVERY_VALUES, |
| ), |
| ).apply() |
| |
| objects.HelmRepository( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name=constants.HELM_REPOSITORY_BITNAMI, |
| namespace=constants.NAMESPACE_OPENSTACK, |
| ), |
| spec=types.HelmRepositorySpec( |
| url="https://charts.bitnami.com/bitnami", |
| ), |
| ).apply() |
| objects.HelmRelease( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name=constants.HELM_RELEASE_RABBITMQ_OPERATOR_NAME, |
| namespace=constants.NAMESPACE_OPENSTACK, |
| ), |
| spec=types.HelmReleaseSpec( |
| chart=types.HelmChartTemplate( |
| spec=types.HelmChartTemplateSpec( |
| chart=constants.HELM_RELEASE_RABBITMQ_OPERATOR_NAME, |
| version=constants.HELM_RELEASE_RABBITMQ_OPERATOR_VERSION, |
| source_ref=types.CrossNamespaceObjectReference( |
| kind="HelmRepository", |
| name=constants.HELM_REPOSITORY_BITNAMI, |
| namespace=constants.NAMESPACE_OPENSTACK, |
| ), |
| ) |
| ), |
| depends_on=[ |
| types.NamespacedObjectReference( |
| name=constants.HELM_RELEASE_CERT_MANAGER_NAME, |
| namespace=constants.NAMESPACE_CERT_MANAGER, |
| ) |
| ], |
| values=constants.HELM_RELEASE_RABBITMQ_OPERATOR_VALUES, |
| ), |
| ).apply() |
| objects.HelmRepository( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name=constants.HELM_REPOSITORY_OPENSTACK_HELM_INFRA, |
| namespace=constants.NAMESPACE_OPENSTACK, |
| ), |
| spec=types.HelmRepositorySpec( |
| url="https://tarballs.opendev.org/openstack/openstack-helm-infra/", |
| ), |
| ).apply() |
| objects.HelmRepository( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name=constants.HELM_REPOSITORY_COREDNS, |
| namespace=constants.NAMESPACE_OPENSTACK, |
| ), |
| spec=types.HelmRepositorySpec(url="https://coredns.github.io/helm"), |
| ).apply() |
| objects.HelmRepository( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name=constants.HELM_REPOSITORY_OPENSTACK_HELM, |
| namespace=constants.NAMESPACE_OPENSTACK, |
| ), |
| spec=types.HelmRepositorySpec( |
| url="https://tarballs.opendev.org/openstack/openstack-helm/", |
| ), |
| ).apply() |
| |
| if config.kube_prometheus_stack.enabled: |
| objects.HelmRepository( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name=constants.HELM_REPOSITORY_PROMETHEUS_COMMUINTY, |
| namespace=config.kube_prometheus_stack.namespace, |
| ), |
| spec=types.HelmRepositorySpec( |
| url=constants.HELM_REPOSITORY_PROMETHEUS_COMMUINTY_URL, |
| ), |
| ).apply() |
| objects.HelmRelease( |
| api=api, |
| metadata=types.NamespacedObjectMeta( |
| name=constants.HELM_RELEASE_KUBE_PROMETHEUS_STACK_NAME, |
| namespace=config.kube_prometheus_stack.namespace, |
| ), |
| spec=types.HelmReleaseSpec( |
| chart=types.HelmChartTemplate( |
| spec=types.HelmChartTemplateSpec( |
| chart=constants.HELM_RELEASE_KUBE_PROMETHEUS_STACK_NAME, |
| version=constants.HELM_RELEASE_KUBE_PROMETHEUS_STACK_VERSION, |
| source_ref=types.CrossNamespaceObjectReference( |
| kind="HelmRepository", |
| name=constants.HELM_REPOSITORY_PROMETHEUS_COMMUINTY, |
| namespace=config.kube_prometheus_stack.namespace, |
| ), |
| ) |
| ), |
| depends_on=[ |
| types.NamespacedObjectReference( |
| name=constants.HELM_RELEASE_RABBITMQ_OPERATOR_NAME, |
| namespace=constants.NAMESPACE_OPENSTACK, |
| ), |
| types.NamespacedObjectReference( |
| name="node-feature-discovery", |
| namespace=constants.NAMESPACE_MONITORING, |
| ), |
| ], |
| values={ |
| **constants.HELM_RELEASE_KUBE_PROMETHEUS_STACK_VALUES, |
| **config.kube_prometheus_stack.overrides, |
| **{ |
| "alertmanager": { |
| "config": openstack_helm.generate_alertmanager_config_for_opsgenie( |
| config.opsgenie |
| ) |
| } |
| }, |
| }, |
| ), |
| ).apply() |
| |
| return engines.load( |
| get_deployment_flow(config), |
| executor="greenthreaded", |
| engine="parallel", |
| max_workers=4, |
| ) |
| |
| |
| # TODO(mnaser): Move this into the Cloud CRD |
| def get_deployment_flow(config): |
| flow = graph_flow.Flow("deploy").add( |
| # cert-manager |
| *cert_manager.issuer_tasks_from_config(config.issuer), |
| ) |
| |
| if config.memcached.enabled: |
| flow.add( |
| openstack_helm.ApplyReleaseSecretTask( |
| config=config, |
| namespace=config.memcached.namespace, |
| chart="memcached", |
| ), |
| openstack_helm.ApplyHelmReleaseTask( |
| namespace=config.memcached.namespace, |
| repository=constants.HELM_REPOSITORY_OPENSTACK_HELM_INFRA, |
| name="memcached", |
| version="0.1.12", |
| ), |
| v1.ApplyServiceTask( |
| namespace=config.memcached.namespace, |
| name="memcached-metrics", |
| labels={ |
| "application": "memcached", |
| "component": "server", |
| }, |
| spec={ |
| "selector": { |
| "application": "memcached", |
| "component": "server", |
| }, |
| "ports": [ |
| { |
| "name": "metrics", |
| "protocol": "TCP", |
| "port": 9150, |
| "targetPort": 9150, |
| } |
| ], |
| }, |
| ), |
| ) |
| |
| return flow |