diff --git a/docker/services/skydive/skydive-agent.yaml b/docker/services/skydive/skydive-agent.yaml new file mode 100644 index 0000000000..0d55380c6e --- /dev/null +++ b/docker/services/skydive/skydive-agent.yaml @@ -0,0 +1,68 @@ +heat_template_version: pike + +description: > + Skydive agent service. + +parameters: + ServiceData: + default: {} + description: Dictionary packing service data + type: json + ServiceNetMap: + default: {} + description: Mapping of service_name -> network name. Typically set + via parameter_defaults in the resource registry. This + mapping overrides those in ServiceNetMapDefaults. + type: json + DefaultPasswords: + default: {} + type: json + RoleName: + default: '' + description: Role name on which the service is applied + type: string + RoleParameters: + default: {} + description: Parameters specific to the role + type: json + EndpointMap: + default: {} + description: Mapping of service endpoint -> protocol. Typically set + via parameter_defaults in the resource registry. + type: json + DockerSkydiveAgentImage: + description: image + type: string + default: 'tripleoupstream/centos-binary-skydive-agent:latest' + +resources: + SkydiveBase: + type: ./skydive-base.yaml + properties: + ServiceData: {get_param: ServiceData} + ServiceNetMap: {get_param: ServiceNetMap} + DefaultPasswords: {get_param: DefaultPasswords} + EndpointMap: {get_param: EndpointMap} + RoleName: {get_param: RoleName} + RoleParameters: {get_param: RoleParameters} + DockerSkydiveImage: {get_param: DockerSkydiveAgentImage} + +outputs: + role_data: + description: Role data for the Skydive agent service. + value: + service_name: skydive_agent + upgrade_tasks: [] + step_config: '' + puppet_config: + config_image: '' + config_volume: '' + step_config: '' + docker_config: {} + workflow_tasks: {get_attr: [SkydiveBase, role_data, workflow_tasks]} + config_settings: + skydive_agent_ansible_vars: + map_merge: + - {get_attr: [SkydiveBase, role_data, config_settings, skydive_common_ansible_vars]} + - skydive_agent_docker_image: {get_attr: [SkydiveBase, role_data, config_settings, skydive_docker_image]} + skydive_agent_docker_command: "/usr/bin/skydive agent --conf /etc/skydive.yml" diff --git a/docker/services/skydive/skydive-analyzer.yaml b/docker/services/skydive/skydive-analyzer.yaml new file mode 100644 index 0000000000..f25a525fec --- /dev/null +++ b/docker/services/skydive/skydive-analyzer.yaml @@ -0,0 +1,73 @@ +heat_template_version: pike + +description: > + Skydive analyzer service. + +parameters: + ServiceData: + default: {} + description: Dictionary packing service data + type: json + ServiceNetMap: + default: {} + description: Mapping of service_name -> network name. Typically set + via parameter_defaults in the resource registry. This + mapping overrides those in ServiceNetMapDefaults. + type: json + DefaultPasswords: + default: {} + type: json + RoleName: + default: '' + description: Role name on which the service is applied + type: string + RoleParameters: + default: {} + description: Parameters specific to the role + type: json + EndpointMap: + default: {} + description: Mapping of service endpoint -> protocol. Typically set + via parameter_defaults in the resource registry. + type: json + DockerSkydiveAnalyzerImage: + description: image + type: string + default: 'tripleoupstream/centos-binary-skydive-analyzer:latest' + +resources: + SkydiveBase: + type: ./skydive-base.yaml + properties: + ServiceData: {get_param: ServiceData} + ServiceNetMap: {get_param: ServiceNetMap} + DefaultPasswords: {get_param: DefaultPasswords} + EndpointMap: {get_param: EndpointMap} + RoleName: {get_param: RoleName} + RoleParameters: {get_param: RoleParameters} + DockerSkydiveImage: {get_param: DockerSkydiveAnalyzerImage} + +outputs: + role_data: + description: Role data for the Skydive analyzer service. + value: + service_name: skydive_analyzer + upgrade_tasks: [] + step_config: '' + puppet_config: + config_image: '' + config_volume: '' + step_config: '' + docker_config: {} + workflow_tasks: {get_attr: [SkydiveBase, role_data, workflow_tasks]} + config_settings: + map_merge: + - tripleo.skydive_analyzer.firewall_rules: + '150 skydive_analyzer': + dport: 8082 + proto: tcp + - skydive_analyzer_ansible_vars: + map_merge: + - {get_attr: [SkydiveBase, role_data, config_settings, skydive_common_ansible_vars]} + - skydive_analyzer_docker_image: {get_attr: [SkydiveBase, role_data, config_settings, skydive_docker_image]} + skydive_analyzer_docker_command: "/usr/bin/skydive analyzer --conf /etc/skydive.yml" diff --git a/docker/services/skydive/skydive-base.yaml b/docker/services/skydive/skydive-base.yaml new file mode 100644 index 0000000000..b9dd5537fa --- /dev/null +++ b/docker/services/skydive/skydive-base.yaml @@ -0,0 +1,110 @@ +heat_template_version: pike + +description: > + Skydive base service. Shared by all Skydive services. + +parameters: + ServiceData: + default: {} + description: Dictionary packing service data + type: json + ServiceNetMap: + default: {} + description: Mapping of service_name -> network name. Typically set + via parameter_defaults in the resource registry. This + mapping overrides those in ServiceNetMapDefaults. + type: json + DefaultPasswords: + default: {} + type: json + RoleName: + default: '' + description: Role name on which the service is applied + type: string + RoleParameters: + default: {} + description: Parameters specific to the role + type: json + EndpointMap: + default: {} + description: Mapping of service endpoint -> protocol. Typically set + via parameter_defaults in the resource registry. + type: json + SkydiveAnsibleWorkflowName: + type: string + description: Name of the Mistral workflow to execute + default: tripleo.skydive_ansible.v1.skydive_install + SkydiveAnsiblePlaybook: + type: string + description: Path to the skydive-ansible playbook to execute + default: /usr/share/skydive-ansible/playbook.yml.sample + SkydiveAnsibleExtraConfig: + type: json + description: Extra vars for the skydive-ansible playbook + default: + deployment_mode: container + DockerSkydiveImage: + description: image + type: string + default: 'tripleoupstream/centos-binary-skydive-base:latest' + +conditions: + custom_registry_host: + yaql: + data: {get_param: DockerSkydiveImage} + expression: $.data.split('/')[0].matches('(\.|:)') + +resources: + DockerImageUrlParts: + type: OS::Heat::Value + properties: + type: json + value: + host: + if: + - custom_registry_host + - yaql: + expression: let(location => $.data.rightSplit(':', 1)[0]) -> regex('(?:https?://)?(.*?)/(.*)').split($location)[1] + data: {get_param: DockerSkydiveImage} + - docker.io + image: + if: + - custom_registry_host + - yaql: + expression: let(location => $.data.rightSplit(':', 1)[0]) -> regex('(?:https?://)?(.*?)/(.*)').split($location)[2] + data: {get_param: DockerSkydiveImage} + - yaql: + expression: $.data.rightSplit(':', 1)[0] + data: {get_param: DockerSkydiveImage} + image_tag: + yaql: + expression: $.data.rightSplit(':', 1)[1] + data: {get_param: DockerSkydiveImage} + +outputs: + role_data: + description: Role data for the Skydive base service. + value: + service_name: skydive_base + upgrade_tasks: [] + step_config: '' + puppet_config: + config_image: '' + config_volume: '' + step_config: '' + docker_config: {} + workflow_tasks: + step2: + - name: skydive_base_ansible_workflow + workflow: { get_param: SkydiveAnsibleWorkflowName } + input: + skydive_ansible_extra_vars: {get_param: SkydiveAnsibleExtraConfig} + skydive_ansible_playbook: {get_param: SkydiveAnsiblePlaybook} + config_settings: + skydive_docker_image: {get_attr: [DockerImageUrlParts, value, image]} + skydive_common_ansible_vars: + skydive_docker_registry: {get_attr: [DockerImageUrlParts, value, host]} + skydive_docker_image_tag: {get_attr: [DockerImageUrlParts, value, image_tag]} + skydive_deployment_mode: container + skydive_extra_config: + flow.protocol: websocket diff --git a/environments/hyperconverged-ceph.yaml b/environments/hyperconverged-ceph.yaml index 2a28ac1849..a6184aeab5 100644 --- a/environments/hyperconverged-ceph.yaml +++ b/environments/hyperconverged-ceph.yaml @@ -33,6 +33,7 @@ parameter_defaults: - OS::TripleO::Services::NeutronSriovHostConfig - OS::TripleO::Services::OpenDaylightOvs - OS::TripleO::Services::SensuClient + - OS::TripleO::Services::SkydiveAgent - OS::TripleO::Services::FluentdClient - OS::TripleO::Services::AuditD - OS::TripleO::Services::Collectd diff --git a/environments/services-docker/skydive-environment.yaml b/environments/services-docker/skydive-environment.yaml new file mode 100644 index 0000000000..731ab7a2b0 --- /dev/null +++ b/environments/services-docker/skydive-environment.yaml @@ -0,0 +1,3 @@ +resource_registry: + OS::TripleO::Services::SkydiveAgent: ../../docker/services/skydive/skydive-agent.yaml + OS::TripleO::Services::SkydiveAnalyzer: ../../docker/services/skydive/skydive-analyzer.yaml diff --git a/overcloud-resource-registry-puppet.j2.yaml b/overcloud-resource-registry-puppet.j2.yaml index c7cd96762b..307ac5d2ff 100644 --- a/overcloud-resource-registry-puppet.j2.yaml +++ b/overcloud-resource-registry-puppet.j2.yaml @@ -293,6 +293,8 @@ resource_registry: OS::TripleO::Services::CertmongerUser: OS::Heat::None OS::TripleO::Services::Clustercheck: OS::Heat::None OS::TripleO::Services::VRTSHyperScale: OS::Heat::None + OS::TripleO::Services::SkydiveAgent: OS::Heat::None + OS::TripleO::Services::SkydiveAnalyzer: OS::Heat::None parameter_defaults: EnablePackageInstall: false diff --git a/releasenotes/notes/integrate-skydive-900756d8870b3876.yaml b/releasenotes/notes/integrate-skydive-900756d8870b3876.yaml new file mode 100644 index 0000000000..b5e5cd6b65 --- /dev/null +++ b/releasenotes/notes/integrate-skydive-900756d8870b3876.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add support for troubleshooting network issues using `Skydive + `_. diff --git a/roles/Compute.yaml b/roles/Compute.yaml index d0578eb6f1..e5602aae09 100644 --- a/roles/Compute.yaml +++ b/roles/Compute.yaml @@ -50,6 +50,7 @@ - OS::TripleO::Services::OpenDaylightOvs - OS::TripleO::Services::Securetty - OS::TripleO::Services::SensuClient + - OS::TripleO::Services::SkydiveAgent - OS::TripleO::Services::Snmp - OS::TripleO::Services::Sshd - OS::TripleO::Services::Timezone diff --git a/roles/ComputeHCI.yaml b/roles/ComputeHCI.yaml index eed9b5a732..877741d2ee 100644 --- a/roles/ComputeHCI.yaml +++ b/roles/ComputeHCI.yaml @@ -41,6 +41,7 @@ - OS::TripleO::Services::OpenDaylightOvs - OS::TripleO::Services::Securetty - OS::TripleO::Services::SensuClient + - OS::TripleO::Services::SkydiveAgent - OS::TripleO::Services::Snmp - OS::TripleO::Services::Sshd - OS::TripleO::Services::Timezone diff --git a/roles/ComputeOvsDpdk.yaml b/roles/ComputeOvsDpdk.yaml index 80c5725958..630cd264ff 100644 --- a/roles/ComputeOvsDpdk.yaml +++ b/roles/ComputeOvsDpdk.yaml @@ -36,6 +36,7 @@ - OS::TripleO::Services::OpenDaylightOvs - OS::TripleO::Services::Securetty - OS::TripleO::Services::SensuClient + - OS::TripleO::Services::SkydiveAgent - OS::TripleO::Services::Snmp - OS::TripleO::Services::Sshd - OS::TripleO::Services::Timezone diff --git a/roles/Controller.yaml b/roles/Controller.yaml index 818f77625f..8aef73d370 100644 --- a/roles/Controller.yaml +++ b/roles/Controller.yaml @@ -134,6 +134,8 @@ - OS::TripleO::Services::SaharaEngine - OS::TripleO::Services::Securetty - OS::TripleO::Services::SensuClient + - OS::TripleO::Services::SkydiveAgent + - OS::TripleO::Services::SkydiveAnalyzer - OS::TripleO::Services::Snmp - OS::TripleO::Services::Sshd - OS::TripleO::Services::SwiftProxy diff --git a/roles/ControllerOpenstack.yaml b/roles/ControllerOpenstack.yaml index c48405af24..91781d7f59 100644 --- a/roles/ControllerOpenstack.yaml +++ b/roles/ControllerOpenstack.yaml @@ -104,6 +104,8 @@ - OS::TripleO::Services::SaharaApi - OS::TripleO::Services::SaharaEngine - OS::TripleO::Services::SensuClient + - OS::TripleO::Services::SkydiveAgent + - OS::TripleO::Services::SkydiveAnalyzer - OS::TripleO::Services::Snmp - OS::TripleO::Services::Sshd - OS::TripleO::Services::SwiftProxy diff --git a/roles/Networker.yaml b/roles/Networker.yaml index afd3b101c9..b9d4468a65 100644 --- a/roles/Networker.yaml +++ b/roles/Networker.yaml @@ -32,6 +32,7 @@ - OS::TripleO::Services::OpenDaylightOvs - OS::TripleO::Services::PacemakerRemote - OS::TripleO::Services::SensuClient + - OS::TripleO::Services::SkydiveAgent - OS::TripleO::Services::Snmp - OS::TripleO::Services::Timezone - OS::TripleO::Services::TripleoFirewall diff --git a/roles_data.yaml b/roles_data.yaml index 8b17e428b1..89baa08cdc 100644 --- a/roles_data.yaml +++ b/roles_data.yaml @@ -137,6 +137,8 @@ - OS::TripleO::Services::SaharaEngine - OS::TripleO::Services::Securetty - OS::TripleO::Services::SensuClient + - OS::TripleO::Services::SkydiveAgent + - OS::TripleO::Services::SkydiveAnalyzer - OS::TripleO::Services::Snmp - OS::TripleO::Services::Sshd - OS::TripleO::Services::SwiftProxy @@ -202,6 +204,7 @@ - OS::TripleO::Services::OpenDaylightOvs - OS::TripleO::Services::Securetty - OS::TripleO::Services::SensuClient + - OS::TripleO::Services::SkydiveAgent - OS::TripleO::Services::Snmp - OS::TripleO::Services::Sshd - OS::TripleO::Services::Timezone