+ # Build Container
+ container_builder = ContainerV3Builder(
+ self.app.name,
+ image_info,
+ config.image_pull_policy,
+ run_as_non_root=security_context_enabled,
+ )
+ certs_files = self._build_cert_files(config)
+
+ if certs_files:
+ container_builder.add_volume_config("certs", "/certs", certs_files)
+
+ container_builder.add_port(name=self.app.name, port=PORT)
+ container_builder.add_http_readiness_probe(
+ "/ro/" if config.enable_ng_ro else "/openmano/tenants",
+ PORT,
+ initial_delay_seconds=10,
+ period_seconds=10,
+ timeout_seconds=5,
+ failure_threshold=3,
+ )
+ container_builder.add_http_liveness_probe(
+ "/ro/" if config.enable_ng_ro else "/openmano/tenants",
+ PORT,
+ initial_delay_seconds=600,
+ period_seconds=10,
+ timeout_seconds=5,
+ failure_threshold=3,
+ )
+ container_builder.add_envs(
+ {
+ "OSMRO_LOG_LEVEL": config.log_level,
+ }
+ )
+ if config.period_refresh_active:
+ container_builder.add_envs(
+ {
+ "OSMRO_PERIOD_REFRESH_ACTIVE": config.period_refresh_active,
+ }
+ )
+ if config.enable_ng_ro:
+ # Add secrets to the pod
+ mongodb_secret_name = f"{self.app.name}-mongodb-secret"
+ pod_spec_builder.add_secret(
+ mongodb_secret_name,
+ {
+ "uri": config.mongodb_uri or self.mongodb_client.connection_string,
+ "commonkey": config.database_commonkey,
+ },
+ )
+ container_builder.add_envs(
+ {
+ "OSMRO_MESSAGE_DRIVER": "kafka",
+ "OSMRO_MESSAGE_HOST": self.kafka.host,
+ "OSMRO_MESSAGE_PORT": self.kafka.port,
+ # MongoDB configuration
+ "OSMRO_DATABASE_DRIVER": "mongo",
+ }
+ )
+ container_builder.add_secret_envs(
+ secret_name=mongodb_secret_name,
+ envs={
+ "OSMRO_DATABASE_URI": "uri",
+ "OSMRO_DATABASE_COMMONKEY": "commonkey",
+ },
+ )
+ restart_policy = PodRestartPolicy()
+ restart_policy.add_secrets(secret_names=(mongodb_secret_name,))
+ pod_spec_builder.set_restart_policy(restart_policy)
+
+ else:
+ container_builder.add_envs(
+ {
+ "RO_DB_HOST": config.mysql_host or self.mysql_client.host,
+ "RO_DB_OVIM_HOST": config.mysql_host or self.mysql_client.host,
+ "RO_DB_PORT": config.mysql_port or self.mysql_client.port,
+ "RO_DB_OVIM_PORT": config.mysql_port or self.mysql_client.port,
+ "RO_DB_USER": config.mysql_user or self.mysql_client.user,
+ "RO_DB_OVIM_USER": config.mysql_user or self.mysql_client.user,
+ "RO_DB_PASSWORD": config.mysql_password
+ or self.mysql_client.password,
+ "RO_DB_OVIM_PASSWORD": config.mysql_password
+ or self.mysql_client.password,
+ "RO_DB_ROOT_PASSWORD": config.mysql_root_password
+ or self.mysql_client.root_password,
+ "RO_DB_OVIM_ROOT_PASSWORD": config.mysql_root_password
+ or self.mysql_client.root_password,
+ "RO_DB_NAME": config.ro_database,
+ "RO_DB_OVIM_NAME": config.vim_database,
+ "OPENMANO_TENANT": config.openmano_tenant,
+ }
+ )
+ container = container_builder.build()
+
+ # Add container to pod spec
+ pod_spec_builder.add_container(container)
+
+ return pod_spec_builder.build()
+
+
+VSCODE_WORKSPACE = {
+ "folders": [
+ {"path": "/usr/lib/python3/dist-packages/osm_ng_ro"},
+ {"path": "/usr/lib/python3/dist-packages/osm_common"},
+ {"path": "/usr/lib/python3/dist-packages/osm_ro_plugin"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rosdn_arista_cloudvision"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rosdn_dpb"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rosdn_dynpac"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rosdn_floodlightof"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rosdn_ietfl2vpn"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rosdn_juniper_contrail"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rosdn_odlof"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rosdn_onos_vpls"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rosdn_onosof"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rovim_aws"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rovim_azure"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rovim_gcp"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rovim_openstack"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rovim_openvim"},
+ {"path": "/usr/lib/python3/dist-packages/osm_rovim_vmware"},
+ ],
+ "launch": {
+ "configurations": [
+ {
+ "module": "osm_ng_ro.ro_main",
+ "name": "NG RO",
+ "request": "launch",
+ "type": "python",
+ "justMyCode": False,
+ }
+ ],
+ "version": "0.2.0",
+ },
+ "settings": {},
+}
+
+
+def _get_ro_host_paths(ro_host_path: str) -> Dict:
+ """Get RO host paths"""
+ return (
+ {
+ "NG-RO": {
+ "hostpath": f"{ro_host_path}/NG-RO",
+ "container-path": "/usr/lib/python3/dist-packages/osm_ng_ro",
+ },
+ "RO-plugin": {
+ "hostpath": f"{ro_host_path}/RO-plugin",
+ "container-path": "/usr/lib/python3/dist-packages/osm_ro_plugin",
+ },
+ "RO-SDN-arista_cloudvision": {
+ "hostpath": f"{ro_host_path}/RO-SDN-arista_cloudvision",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_arista_cloudvision",
+ },
+ "RO-SDN-dpb": {
+ "hostpath": f"{ro_host_path}/RO-SDN-dpb",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_dpb",
+ },
+ "RO-SDN-dynpac": {
+ "hostpath": f"{ro_host_path}/RO-SDN-dynpac",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_dynpac",
+ },
+ "RO-SDN-floodlight_openflow": {
+ "hostpath": f"{ro_host_path}/RO-SDN-floodlight_openflow",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_floodlightof",
+ },
+ "RO-SDN-ietfl2vpn": {
+ "hostpath": f"{ro_host_path}/RO-SDN-ietfl2vpn",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_ietfl2vpn",
+ },
+ "RO-SDN-juniper_contrail": {
+ "hostpath": f"{ro_host_path}/RO-SDN-juniper_contrail",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_juniper_contrail",
+ },
+ "RO-SDN-odl_openflow": {
+ "hostpath": f"{ro_host_path}/RO-SDN-odl_openflow",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_odlof",
+ },
+ "RO-SDN-onos_openflow": {
+ "hostpath": f"{ro_host_path}/RO-SDN-onos_openflow",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_onosof",
+ },
+ "RO-SDN-onos_vpls": {
+ "hostpath": f"{ro_host_path}/RO-SDN-onos_vpls",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rosdn_onos_vpls",
+ },
+ "RO-VIM-aws": {
+ "hostpath": f"{ro_host_path}/RO-VIM-aws",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rovim_aws",
+ },
+ "RO-VIM-azure": {
+ "hostpath": f"{ro_host_path}/RO-VIM-azure",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rovim_azure",
+ },
+ "RO-VIM-gcp": {
+ "hostpath": f"{ro_host_path}/RO-VIM-gcp",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rovim_gcp",
+ },
+ "RO-VIM-openstack": {
+ "hostpath": f"{ro_host_path}/RO-VIM-openstack",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rovim_openstack",
+ },
+ "RO-VIM-openvim": {
+ "hostpath": f"{ro_host_path}/RO-VIM-openvim",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rovim_openvim",
+ },
+ "RO-VIM-vmware": {
+ "hostpath": f"{ro_host_path}/RO-VIM-vmware",
+ "container-path": "/usr/lib/python3/dist-packages/osm_rovim_vmware",
+ },
+ }
+ if ro_host_path
+ else {}
+ )