# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Default values for ceilometer.
# This is a YAML-formatted file.
# Declare name/value pairs to be passed into your templates.
# name: value

---
release_group: null

labels:
  compute:
    node_selector_key: openstack-compute-node
    node_selector_value: enabled
  central:
    node_selector_key: openstack-control-plane
    node_selector_value: enabled
  ipmi:
    node_selector_key: openstack-node
    node_selector_value: enabled
  notification:
    node_selector_key: openstack-control-plane
    node_selector_value: enabled
  job:
    node_selector_key: openstack-control-plane
    node_selector_value: enabled
  test:
    node_selector_key: openstack-control-plane
    node_selector_value: enabled

images:
  tags:
    rabbit_init: docker.io/rabbitmq:3.13-management
    ks_user: quay.io/airshipit/heat:2025.1-ubuntu_noble
    ceilometer_central: docker.io/kolla/ubuntu-source-ceilometer-central:wallaby
    ceilometer_compute: docker.io/kolla/ubuntu-source-ceilometer-compute:wallaby
    ceilometer_ipmi: docker.io/kolla/ubuntu-source-ceilometer-base:wallaby
    ceilometer_notification: docker.io/kolla/ubuntu-source-ceilometer-notification:wallaby
    dep_check: quay.io/airshipit/kubernetes-entrypoint:latest-ubuntu_focal
    image_repo_sync: docker.io/docker:17.07.0
  pull_policy: "IfNotPresent"
  local_registry:
    active: false
    exclude:
      - dep_check
      - image_repo_sync

ipmi_device: /dev/ipmi0

conf:
  ceilometer:
    DEFAULT:
      event_dispatchers:
        type: multistring
        values:
          - database
      meter_dispatchers:
        type: multistring
        values:
          - database
          - gnocchi
    dispatcher_gnocchi:
      filter_service_activity: false
      archive_policy: low
      resources_definition_file: /etc/ceilometer/gnocchi_resources.yaml
    dispatcher:
      archive_policy: low
      filter_project: service
    service_credentials:
      auth_type: password
      interface: internal
    notification:
      messaging_urls:
        type: multistring
        values:
          - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/ceilometer
          - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/cinder
          - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/glance
          - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/nova
          - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/keystone
          - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/neutron
          - rabbit://rabbitmq:password@rabbitmq.openstack.svc.cluster.local:5672/heat
    oslo_messaging_notifications:
      driver: messagingv2
      topics:
        - notifications
        - profiler
    cache:
      enabled: true
      backend: dogpile.cache.memcached
      expiration_time: 86400
  event_definitions:
    - event_type: 'compute.instance.*'
      traits: &instance_traits
        tenant_id:
          fields: payload.tenant_id
        user_id:
          fields: payload.user_id
        instance_id:
          fields: payload.instance_id
        resource_id:
          fields: payload.instance_id
        host:
          fields: publisher_id.`split(., 1, 1)`
        service:
          fields: publisher_id.`split(., 0, -1)`
        memory_mb:
          type: int
          fields: payload.memory_mb
        disk_gb:
          type: int
          fields: payload.disk_gb
        root_gb:
          type: int
          fields: payload.root_gb
        ephemeral_gb:
          type: int
          fields: payload.ephemeral_gb
        vcpus:
          type: int
          fields: payload.vcpus
        instance_type_id:
          type: int
          fields: payload.instance_type_id
        instance_type:
          fields: payload.instance_type
        state:
          fields: payload.state
        os_architecture:
          fields: payload.image_meta.'org.openstack__1__architecture'
        os_version:
          fields: payload.image_meta.'org.openstack__1__os_version'
        os_distro:
          fields: payload.image_meta.'org.openstack__1__os_distro'
        launched_at:
          type: datetime
          fields: payload.launched_at
        deleted_at:
          type: datetime
          fields: payload.deleted_at
    - event_type: compute.instance.update
      traits:
        <<: *instance_traits
        old_state:
          fields: payload.old_state
    - event_type: compute.instance.exists
      traits:
        <<: *instance_traits
        audit_period_beginning:
          type: datetime
          fields: payload.audit_period_beginning
        audit_period_ending:
          type: datetime
          fields: payload.audit_period_ending
    - event_type: ['volume.exists', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*', 'snapshot.exists', 'snapshot.create.*', 'snapshot.delete.*', 'snapshot.update.*']
      traits: &cinder_traits
        user_id:
          fields: payload.user_id
        project_id:
          fields: payload.tenant_id
        availability_zone:
          fields: payload.availability_zone
        display_name:
          fields: payload.display_name
        replication_status:
          fields: payload.replication_status
        status:
          fields: payload.status
        created_at:
          fields: payload.created_at
    - event_type: ['volume.exists', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*']
      traits:
        <<: *cinder_traits
        resource_id:
          fields: payload.volume_id
        host:
          fields: payload.host
        size:
          fields: payload.size
        type:
          fields: payload.volume_type
        replication_status:
          fields: payload.replication_status
    - event_type: ['snapshot.exists', 'snapshot.create.*', 'snapshot.delete.*', 'snapshot.update.*']
      traits:
        <<: *cinder_traits
        resource_id:
          fields: payload.snapshot_id
        volume_id:
          fields: payload.volume_id
    - event_type: ['image_volume_cache.*']
      traits:
        image_id:
          fields: payload.image_id
        host:
          fields: payload.host
    - event_type: ['image.create', 'image.update', 'image.upload', 'image.delete']
      traits: &glance_crud
        project_id:
          fields: payload.owner
        resource_id:
          fields: payload.id
        name:
          fields: payload.name
        status:
          fields: payload.status
        created_at:
          fields: payload.created_at
        user_id:
          fields: payload.owner
        deleted_at:
          fields: payload.deleted_at
        size:
          fields: payload.size
    - event_type: image.send
      traits: &glance_send
        receiver_project:
          fields: payload.receiver_tenant_id
        receiver_user:
          fields: payload.receiver_user_id
        user_id:
          fields: payload.owner_id
        image_id:
          fields: payload.image_id
        destination_ip:
          fields: payload.destination_ip
        bytes_sent:
          type: int
          fields: payload.bytes_sent
    - event_type: orchestration.stack.*
      traits: &orchestration_crud
        project_id:
          fields: payload.tenant_id
        user_id:
          fields: ['_context_trustor_user_id', '_context_user_id']
        resource_id:
          fields: payload.stack_identity
    - event_type: sahara.cluster.*
      traits: &sahara_crud
        project_id:
          fields: payload.project_id
        user_id:
          fields: _context_user_id
        resource_id:
          fields: payload.cluster_id
    - event_type: sahara.cluster.health
      traits: &sahara_health
        <<: *sahara_crud
        verification_id:
          fields: payload.verification_id
        health_check_status:
          fields: payload.health_check_status
        health_check_name:
          fields: payload.health_check_name
        health_check_description:
          fields: payload.health_check_description
        created_at:
          type: datetime
          fields: payload.created_at
        updated_at:
          type: datetime
          fields: payload.updated_at
    - event_type: ['identity.user.*', 'identity.project.*', 'identity.group.*', 'identity.role.*', 'identity.OS-TRUST:trust.*',
                   'identity.region.*', 'identity.service.*', 'identity.endpoint.*', 'identity.policy.*']
      traits: &identity_crud
        resource_id:
          fields: payload.resource_info
        initiator_id:
          fields: payload.initiator.id
        project_id:
          fields: payload.initiator.project_id
        domain_id:
          fields: payload.initiator.domain_id
    - event_type: identity.role_assignment.*
      traits: &identity_role_assignment
        role:
          fields: payload.role
        group:
          fields: payload.group
        domain:
          fields: payload.domain
        user:
          fields: payload.user
        project:
          fields: payload.project
    - event_type: identity.authenticate
      traits: &identity_authenticate
        typeURI:
          fields: payload.typeURI
        id:
          fields: payload.id
        action:
          fields: payload.action
        eventType:
          fields: payload.eventType
        eventTime:
          fields: payload.eventTime
        outcome:
          fields: payload.outcome
        initiator_typeURI:
          fields: payload.initiator.typeURI
        initiator_id:
          fields: payload.initiator.id
        initiator_name:
          fields: payload.initiator.name
        initiator_host_agent:
          fields: payload.initiator.host.agent
        initiator_host_addr:
          fields: payload.initiator.host.address
        target_typeURI:
          fields: payload.target.typeURI
        target_id:
          fields: payload.target.id
        observer_typeURI:
          fields: payload.observer.typeURI
        observer_id:
          fields: payload.observer.id
    - event_type: objectstore.http.request
      traits: &objectstore_request
        typeURI:
          fields: payload.typeURI
        id:
          fields: payload.id
        action:
          fields: payload.action
        eventType:
          fields: payload.eventType
        eventTime:
          fields: payload.eventTime
        outcome:
          fields: payload.outcome
        initiator_typeURI:
          fields: payload.initiator.typeURI
        initiator_id:
          fields: payload.initiator.id
        initiator_project_id:
          fields: payload.initiator.project_id
        target_typeURI:
          fields: payload.target.typeURI
        target_id:
          fields: payload.target.id
        target_action:
          fields: payload.target.action
        target_metadata_path:
          fields: payload.target.metadata.path
        target_metadata_version:
          fields: payload.target.metadata.version
        target_metadata_container:
          fields: payload.target.metadata.container
        target_metadata_object:
          fields: payload.target.metadata.object
        observer_id:
          fields: payload.observer.id
    - event_type: ['network.*', 'subnet.*', 'port.*', 'router.*', 'floatingip.*', 'pool.*', 'vip.*', 'member.*', 'health_monitor.*', 'healthmonitor.*', 'listener.*', 'loadbalancer.*', 'firewall.*', 'firewall_policy.*', 'firewall_rule.*', 'vpnservice.*', 'ipsecpolicy.*', 'ikepolicy.*', 'ipsec_site_connection.*']
      traits: &network_traits
        user_id:
          fields: _context_user_id
        project_id:
          fields: _context_tenant_id
    - event_type: network.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.network.id', 'payload.id']
    - event_type: subnet.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.subnet.id', 'payload.id']
    - event_type: port.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.port.id', 'payload.id']
    - event_type: router.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.router.id', 'payload.id']
    - event_type: floatingip.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.floatingip.id', 'payload.id']
    - event_type: pool.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.pool.id', 'payload.id']
    - event_type: vip.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.vip.id', 'payload.id']
    - event_type: member.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.member.id', 'payload.id']
    - event_type: health_monitor.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.health_monitor.id', 'payload.id']
    - event_type: healthmonitor.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.healthmonitor.id', 'payload.id']
    - event_type: listener.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.listener.id', 'payload.id']
    - event_type: loadbalancer.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.loadbalancer.id', 'payload.id']
    - event_type: firewall.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.firewall.id', 'payload.id']
    - event_type: firewall_policy.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.firewall_policy.id', 'payload.id']
    - event_type: firewall_rule.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.firewall_rule.id', 'payload.id']
    - event_type: vpnservice.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.vpnservice.id', 'payload.id']
    - event_type: ipsecpolicy.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.ipsecpolicy.id', 'payload.id']
    - event_type: ikepolicy.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.ikepolicy.id', 'payload.id']
    - event_type: ipsec_site_connection.*
      traits:
        <<: *network_traits
        resource_id:
          fields: ['payload.ipsec_site_connection.id', 'payload.id']
    - event_type: '*http.*'
      traits: &http_audit
        project_id:
          fields: payload.initiator.project_id
        user_id:
          fields: payload.initiator.id
        typeURI:
          fields: payload.typeURI
        eventType:
          fields: payload.eventType
        action:
          fields: payload.action
        outcome:
          fields: payload.outcome
        id:
          fields: payload.id
        eventTime:
          fields: payload.eventTime
        requestPath:
          fields: payload.requestPath
        observer_id:
          fields: payload.observer.id
        target_id:
          fields: payload.target.id
        target_typeURI:
          fields: payload.target.typeURI
        target_name:
          fields: payload.target.name
        initiator_typeURI:
          fields: payload.initiator.typeURI
        initiator_id:
          fields: payload.initiator.id
        initiator_name:
          fields: payload.initiator.name
        initiator_host_address:
          fields: payload.initiator.host.address
    - event_type: '*http.response'
      traits:
        <<: *http_audit
        reason_code:
          fields: payload.reason.reasonCode
    - event_type: ['dns.domain.create', 'dns.domain.update', 'dns.domain.delete']
      traits: &dns_domain_traits
        status:
          fields: payload.status
        retry:
          fields: payload.retry
        description:
          fields: payload.description
        expire:
          fields: payload.expire
        email:
          fields: payload.email
        ttl:
          fields: payload.ttl
        action:
          fields: payload.action
        name:
          fields: payload.name
        resource_id:
          fields: payload.id
        created_at:
          fields: payload.created_at
        updated_at:
          fields: payload.updated_at
        version:
          fields: payload.version
        parent_domain_id:
          fields: parent_domain_id
        serial:
          fields: payload.serial
    - event_type: dns.domain.exists
      traits:
        <<: *dns_domain_traits
        audit_period_beginning:
          type: datetime
          fields: payload.audit_period_beginning
        audit_period_ending:
          type: datetime
          fields: payload.audit_period_ending
    - event_type: trove.*
      traits: &trove_base_traits
        instance_type:
          fields: payload.instance_type
        user_id:
          fields: payload.user_id
        resource_id:
          fields: payload.instance_id
        instance_type_id:
          fields: payload.instance_type_id
        launched_at:
          type: datetime
          fields: payload.launched_at
        instance_name:
          fields: payload.instance_name
        state:
          fields: payload.state
        nova_instance_id:
          fields: payload.nova_instance_id
        service_id:
          fields: payload.service_id
        created_at:
          type: datetime
          fields: payload.created_at
        region:
          fields: payload.region
    - event_type: ['trove.instance.create', 'trove.instance.modify_volume', 'trove.instance.modify_flavor', 'trove.instance.delete']
      traits: &trove_common_traits
        name:
          fields: payload.name
        availability_zone:
          fields: payload.availability_zone
        instance_size:
          type: int
          fields: payload.instance_size
        volume_size:
          type: int
          fields: payload.volume_size
        nova_volume_id:
          fields: payload.nova_volume_id
    - event_type: trove.instance.create
      traits:
        <<: [*trove_base_traits, *trove_common_traits]
    - event_type: trove.instance.modify_volume
      traits:
        <<: [*trove_base_traits, *trove_common_traits]
        old_volume_size:
          type: int
          fields: payload.old_volume_size
        modify_at:
          type: datetime
          fields: payload.modify_at
    - event_type: trove.instance.modify_flavor
      traits:
        <<: [*trove_base_traits, *trove_common_traits]
        old_instance_size:
          type: int
          fields: payload.old_instance_size
        modify_at:
          type: datetime
          fields: payload.modify_at
    - event_type: trove.instance.delete
      traits:
        <<: [*trove_base_traits, *trove_common_traits]
        deleted_at:
          type: datetime
          fields: payload.deleted_at
    - event_type: trove.instance.exists
      traits:
        <<: *trove_base_traits
        display_name:
          fields: payload.display_name
        audit_period_beginning:
          type: datetime
          fields: payload.audit_period_beginning
        audit_period_ending:
          type: datetime
          fields: payload.audit_period_ending
    - event_type: profiler.*
      traits:
        project:
          fields: payload.project
        service:
          fields: payload.service
        name:
          fields: payload.name
        base_id:
          fields: payload.base_id
        trace_id:
          fields: payload.trace_id
        parent_id:
          fields: payload.parent_id
        timestamp:
          fields: payload.timestamp
        host:
          fields: payload.info.host
        path:
          fields: payload.info.request.path
        query:
          fields: payload.info.request.query
        method:
          fields: payload.info.request.method
        scheme:
          fields: payload.info.request.scheme
        db.statement:
          fields: payload.info.db.statement
        db.params:
          fields: payload.info.db.params
    - event_type: 'magnum.bay.*'
      traits: &magnum_bay_crud
        id:
          fields: payload.id
        typeURI:
          fields: payload.typeURI
        eventType:
          fields: payload.eventType
        eventTime:
          fields: payload.eventTime
        action:
          fields: payload.action
        outcome:
          fields: payload.outcome
        initiator_id:
          fields: payload.initiator.id
        initiator_typeURI:
          fields: payload.initiator.typeURI
        initiator_name:
          fields: payload.initiator.name
        initiator_host_agent:
          fields: payload.initiator.host.agent
        initiator_host_address:
          fields: payload.initiator.host.address
        target_id:
          fields: payload.target.id
        target_typeURI:
          fields: payload.target.typeURI
        observer_id:
          fields: payload.observer.id
        observer_typeURI:
          fields: payload.observer.typeURI
  event_pipeline:
    sinks:
      - name: event_sink
        publishers:
          - notifier://
        transformers: null
    sources:
      - events:
          - '*'
        name: event_source
        sinks:
          - event_sink
  gnocchi_resources:
    resources:
      - archive_policy: low
        metrics:
          - identity.authenticate.success
          - identity.authenticate.pending
          - identity.authenticate.failure
          - identity.user.created
          - identity.user.deleted
          - identity.user.updated
          - identity.group.created
          - identity.group.deleted
          - identity.group.updated
          - identity.role.created
          - identity.role.deleted
          - identity.role.updated
          - identity.project.created
          - identity.project.deleted
          - identity.project.updated
          - identity.trust.created
          - identity.trust.deleted
          - identity.role_assignment.created
          - identity.role_assignment.deleted
        resource_type: identity
      - metrics:
          - radosgw.objects
          - radosgw.objects.size
          - radosgw.objects.containers
          - radosgw.api.request
          - radosgw.containers.objects
          - radosgw.containers.objects.size
        resource_type: ceph_account
      - attributes:
          display_name: resource_metadata.display_name
          flavor_id: resource_metadata.(instance_flavor_id|(flavor.id))
          host: resource_metadata.(instance_host|host)
          image_ref: resource_metadata.image_ref
          server_group: resource_metadata.user_metadata.server_group
        event_associated_resources:
          instance_disk: '{"=": {"instance_id": "%s"}}'
          instance_network_interface: '{"=": {"instance_id": "%s"}}'
        event_attributes:
          id: instance_id
        event_delete: compute.instance.delete.start
        metrics:
          - memory
          - memory.usage
          - memory.resident
          - vcpus
          - cpu
          - cpu.delta
          - cpu_util
          - disk.root.size
          - disk.ephemeral.size
          - disk.read.requests
          - disk.read.requests.rate
          - disk.write.requests
          - disk.write.requests.rate
          - disk.read.bytes
          - disk.read.bytes.rate
          - disk.write.bytes
          - disk.write.bytes.rate
          - disk.latency
          - disk.iops
          - disk.capacity
          - disk.allocation
          - disk.usage
          - compute.instance.booting.time
          - perf.cpu.cycles
          - perf.instructions
          - perf.cache.references
          - perf.cache.misses
        resource_type: instance
      - attributes:
          instance_id: resource_metadata.instance_id
          name: resource_metadata.vnic_name
        metrics:
          - network.outgoing.packets.rate
          - network.incoming.packets.rate
          - network.outgoing.packets
          - network.outgoing.packets.drop
          - network.incoming.packets.drop
          - network.outgoing.packets.error
          - network.incoming.packets.error
          - network.outgoing.bytes.rate
          - network.incoming.bytes.rate
          - network.outgoing.bytes
          - network.incoming.bytes
        resource_type: instance_network_interface
      - attributes:
          instance_id: resource_metadata.instance_id
          name: resource_metadata.disk_name
        metrics:
          - disk.device.read.requests
          - disk.device.read.requests.rate
          - disk.device.write.requests
          - disk.device.write.requests.rate
          - disk.device.read.bytes
          - disk.device.read.bytes.rate
          - disk.device.write.bytes
          - disk.device.write.bytes.rate
          - disk.device.latency
          - disk.device.iops
          - disk.device.capacity
          - disk.device.allocation
          - disk.device.usage
        resource_type: instance_disk
      - attributes:
          container_format: resource_metadata.container_format
          disk_format: resource_metadata.disk_format
          name: resource_metadata.name
        event_attributes:
          id: resource_id
        event_delete: image.delete
        metrics:
          - image.size
          - image.download
          - image.serve
        resource_type: image
      - metrics:
          - hardware.ipmi.node.power
          - hardware.ipmi.node.temperature
          - hardware.ipmi.node.inlet_temperature
          - hardware.ipmi.node.outlet_temperature
          - hardware.ipmi.node.fan
          - hardware.ipmi.node.current
          - hardware.ipmi.node.voltage
          - hardware.ipmi.node.airflow
          - hardware.ipmi.node.cups
          - hardware.ipmi.node.cpu_util
          - hardware.ipmi.node.mem_util
          - hardware.ipmi.node.io_util
        resource_type: ipmi
      - event_delete: floatingip.delete.end
        event_attributes:
          id: resource_id
        metrics:
          - bandwidth
          - network
          - network.create
          - network.update
          - subnet
          - subnet.create
          - subnet.update
          - port
          - port.create
          - port.update
          - router
          - router.create
          - router.update
          - ip.floating
          - ip.floating.create
          - ip.floating.update
        resource_type: network
      - metrics:
          - stack.create
          - stack.update
          - stack.delete
          - stack.resume
          - stack.suspend
        resource_type: stack
      - metrics:
          - storage.objects.incoming.bytes
          - storage.objects.outgoing.bytes
          - storage.api.request
          - storage.objects.size
          - storage.objects
          - storage.objects.containers
          - storage.containers.objects
          - storage.containers.objects.size
        resource_type: swift_account
      - attributes:
          display_name: resource_metadata.display_name
          volume_type: resource_metadata.volume_type
        event_delete: volume.delete.start
        event_attributes:
          id: resource_id
        metrics:
          - volume
          - volume.size
          - snapshot.size
          - volume.snapshot.size
          - volume.backup.size
        resource_type: volume
      - attributes:
          host_name: resource_metadata.resource_url
        metrics:
          - hardware.cpu.load.1min
          - hardware.cpu.load.5min
          - hardware.cpu.load.15min
          - hardware.cpu.util
          - hardware.memory.total
          - hardware.memory.used
          - hardware.memory.swap.total
          - hardware.memory.swap.avail
          - hardware.memory.buffer
          - hardware.memory.cached
          - hardware.network.ip.outgoing.datagrams
          - hardware.network.ip.incoming.datagrams
          - hardware.system_stats.cpu.idle
          - hardware.system_stats.io.outgoing.blocks
          - hardware.system_stats.io.incoming.blocks
        resource_type: host
      - attributes:
          device_name: resource_metadata.device
          host_name: resource_metadata.resource_url
        metrics:
          - hardware.disk.size.total
          - hardware.disk.size.used
        resource_type: host_disk
      - attributes:
          device_name: resource_metadata.name
          host_name: resource_metadata.resource_url
        metrics:
          - hardware.network.incoming.bytes
          - hardware.network.outgoing.bytes
          - hardware.network.outgoing.errors
        resource_type: host_network_interface
  meters:
    metric:
      - name: "image.size"
        event_type:
          - "image.upload"
          - "image.delete"
          - "image.update"
        type: "gauge"
        unit: B
        volume: $.payload.size
        resource_id: $.payload.id
        project_id: $.payload.owner
      - name: "image.download"
        event_type: "image.send"
        type: "delta"
        unit: "B"
        volume: $.payload.bytes_sent
        resource_id: $.payload.image_id
        user_id: $.payload.receiver_user_id
        project_id: $.payload.receiver_tenant_id
      - name: "image.serve"
        event_type: "image.send"
        type: "delta"
        unit: "B"
        volume: $.payload.bytes_sent
        resource_id: $.payload.image_id
        project_id: $.payload.owner_id
      - name: 'volume.size'
        event_type:
          - 'volume.exists'
          - 'volume.create.*'
          - 'volume.delete.*'
          - 'volume.resize.*'
          - 'volume.attach.*'
          - 'volume.detach.*'
          - 'volume.update.*'
        type: 'gauge'
        unit: 'GB'
        volume: $.payload.size
        user_id: $.payload.user_id
        project_id: $.payload.tenant_id
        resource_id: $.payload.volume_id
        metadata:
          display_name: $.payload.display_name
          volume_type: $.payload.volume_type
      - name: 'snapshot.size'
        event_type:
          - 'snapshot.exists'
          - 'snapshot.create.*'
          - 'snapshot.delete.*'
        type: 'gauge'
        unit: 'GB'
        volume: $.payload.volume_size
        user_id: $.payload.user_id
        project_id: $.payload.tenant_id
        resource_id: $.payload.snapshot_id
        metadata:
          display_name: $.payload.display_name
      - name: 'backup.size'
        event_type:
          - 'backup.exists'
          - 'backup.create.*'
          - 'backup.delete.*'
          - 'backup.restore.*'
        type: 'gauge'
        unit: 'GB'
        volume: $.payload.size
        user_id: $.payload.user_id
        project_id: $.payload.tenant_id
        resource_id: $.payload.backup_id
        metadata:
          display_name: $.payload.display_name
      - name: $.payload.metrics.[*].name
        event_type: 'magnum.bay.metrics.*'
        type: 'gauge'
        unit: $.payload.metrics.[*].unit
        volume: $.payload.metrics.[*].value
        user_id: $.payload.user_id
        project_id: $.payload.project_id
        resource_id: $.payload.resource_id
        lookup: ['name', 'unit', 'volume']
      - name: $.payload.measurements.[*].metric.[*].name
        event_type: 'objectstore.http.request'
        type: 'delta'
        unit: $.payload.measurements.[*].metric.[*].unit
        volume: $.payload.measurements.[*].result
        resource_id: $.payload.target.id
        user_id: $.payload.initiator.id
        project_id: $.payload.initiator.project_id
        lookup: ['name', 'unit', 'volume']
      - name: 'memory'
        event_type: 'compute.instance.*'
        type: 'gauge'
        unit: 'MB'
        volume: $.payload.memory_mb
        user_id: $.payload.user_id
        project_id: $.payload.tenant_id
        resource_id: $.payload.instance_id
        user_metadata: $.payload.metadata
        metadata: &instance_meta
          host: $.payload.host
          flavor_id: $.payload.instance_flavor_id
          flavor_name: $.payload.instance_type
          display_name: $.payload.display_name
          image_ref: $.payload.image_meta.base_image_ref
      - name: 'vcpus'
        event_type: 'compute.instance.*'
        type: 'gauge'
        unit: 'vcpu'
        volume: $.payload.vcpus
        user_id: $.payload.user_id
        project_id: $.payload.tenant_id
        resource_id: $.payload.instance_id
        user_metadata: $.payload.metadata
        metadata:
          <<: *instance_meta
      - name: 'compute.instance.booting.time'
        event_type: 'compute.instance.create.end'
        type: 'gauge'
        unit: 'sec'
        volume:
          fields: [$.payload.created_at, $.payload.launched_at]
          plugin: 'timedelta'
        project_id: $.payload.tenant_id
        resource_id: $.payload.instance_id
        user_metadata: $.payload.metadata
        metadata:
          <<: *instance_meta
      - name: 'disk.root.size'
        event_type: 'compute.instance.*'
        type: 'gauge'
        unit: 'GB'
        volume: $.payload.root_gb
        user_id: $.payload.user_id
        project_id: $.payload.tenant_id
        resource_id: $.payload.instance_id
        user_metadata: $.payload.metadata
        metadata:
          <<: *instance_meta
      - name: 'disk.ephemeral.size'
        event_type: 'compute.instance.*'
        type: 'gauge'
        unit: 'GB'
        volume: $.payload.ephemeral_gb
        user_id: $.payload.user_id
        project_id: $.payload.tenant_id
        resource_id: $.payload.instance_id
        user_metadata: $.payload.metadata
        metadata:
          <<: *instance_meta
      - name: 'bandwidth'
        event_type: 'l3.meter'
        type: 'delta'
        unit: 'B'
        volume: $.payload.bytes
        project_id: $.payload.tenant_id
        resource_id: $.payload.label_id
      - name: 'compute.node.cpu.frequency'
        event_type: 'compute.metrics.update'
        type: 'gauge'
        unit: 'MHz'
        volume: $.payload.metrics[?(@.name='cpu.frequency')].value
        resource_id: $.payload.host + "_" + $.payload.nodename
        timestamp: $.payload.metrics[?(@.name='cpu.frequency')].timestamp
        metadata:
          event_type: $.event_type
          host: $.publisher_id
          source: $.payload.metrics[?(@.name='cpu.frequency')].source
      - name: 'compute.node.cpu.user.time'
        event_type: 'compute.metrics.update'
        type: 'cumulative'
        unit: 'ns'
        volume: $.payload.metrics[?(@.name='cpu.user.time')].value
        resource_id: $.payload.host + "_" + $.payload.nodename
        timestamp: $.payload.metrics[?(@.name='cpu.user.time')].timestamp
        metadata:
          event_type: $.event_type
          host: $.publisher_id
          source: $.payload.metrics[?(@.name='cpu.user.time')].source
      - name: 'compute.node.cpu.kernel.time'
        event_type: 'compute.metrics.update'
        type: 'cumulative'
        unit: 'ns'
        volume: $.payload.metrics[?(@.name='cpu.kernel.time')].value
        resource_id: $.payload.host + "_" + $.payload.nodename
        timestamp: $.payload.metrics[?(@.name='cpu.kernel.time')].timestamp
        metadata:
          event_type: $.event_type
          host: $.publisher_id
          source: $.payload.metrics[?(@.name='cpu.kernel.time')].source
      - name: 'compute.node.cpu.idle.time'
        event_type: 'compute.metrics.update'
        type: 'cumulative'
        unit: 'ns'
        volume: $.payload.metrics[?(@.name='cpu.idle.time')].value
        resource_id: $.payload.host + "_" + $.payload.nodename
        timestamp: $.payload.metrics[?(@.name='cpu.idle.time')].timestamp
        metadata:
          event_type: $.event_type
          host: $.publisher_id
          source: $.payload.metrics[?(@.name='cpu.idle.time')].source
      - name: 'compute.node.cpu.iowait.time'
        event_type: 'compute.metrics.update'
        type: 'cumulative'
        unit: 'ns'
        volume: $.payload.metrics[?(@.name='cpu.iowait.time')].value
        resource_id: $.payload.host + "_" + $.payload.nodename
        timestamp: $.payload.metrics[?(@.name='cpu.iowait.time')].timestamp
        metadata:
          event_type: $.event_type
          host: $.publisher_id
          source: $.payload.metrics[?(@.name='cpu.iowait.time')].source
      - name: 'compute.node.cpu.kernel.percent'
        event_type: 'compute.metrics.update'
        type: 'gauge'
        unit: 'percent'
        volume: $.payload.metrics[?(@.name='cpu.kernel.percent')].value * 100
        resource_id: $.payload.host + "_" + $.payload.nodename
        timestamp: $.payload.metrics[?(@.name='cpu.kernel.percent')].timestamp
        metadata:
          event_type: $.event_type
          host: $.publisher_id
          source: $.payload.metrics[?(@.name='cpu.kernel.percent')].source
      - name: 'compute.node.cpu.idle.percent'
        event_type: 'compute.metrics.update'
        type: 'gauge'
        unit: 'percent'
        volume: $.payload.metrics[?(@.name='cpu.idle.percent')].value * 100
        resource_id: $.payload.host + "_" + $.payload.nodename
        timestamp: $.payload.metrics[?(@.name='cpu.idle.percent')].timestamp
        metadata:
          event_type: $.event_type
          host: $.publisher_id
          source: $.payload.metrics[?(@.name='cpu.idle.percent')].source
      - name: 'compute.node.cpu.user.percent'
        event_type: 'compute.metrics.update'
        type: 'gauge'
        unit: 'percent'
        volume: $.payload.metrics[?(@.name='cpu.user.percent')].value * 100
        resource_id: $.payload.host + "_" + $.payload.nodename
        timestamp: $.payload.metrics[?(@.name='cpu.user.percent')].timestamp
        metadata:
          event_type: $.event_type
          host: $.publisher_id
          source: $.payload.metrics[?(@.name='cpu.user.percent')].source
      - name: 'compute.node.cpu.iowait.percent'
        event_type: 'compute.metrics.update'
        type: 'gauge'
        unit: 'percent'
        volume: $.payload.metrics[?(@.name='cpu.iowait.percent')].value * 100
        resource_id: $.payload.host + "_" + $.payload.nodename
        timestamp: $.payload.metrics[?(@.name='cpu.iowait.percent')].timestamp
        metadata:
          event_type: $.event_type
          host: $.publisher_id
          source: $.payload.metrics[?(@.name='cpu.iowait.percent')].source
      - name: 'compute.node.cpu.percent'
        event_type: 'compute.metrics.update'
        type: 'gauge'
        unit: 'percent'
        volume: $.payload.metrics[?(@.name='cpu.percent')].value * 100
        resource_id: $.payload.host + "_" + $.payload.nodename
        timestamp: $.payload.metrics[?(@.name='cpu.percent')].timestamp
        metadata:
          event_type: $.event_type
          host: $.publisher_id
          source: $.payload.metrics[?(@.name='cpu.percent')].source
      - name: $.payload.outcome - $.payload.outcome + 'identity.authenticate.' + $.payload.outcome
        type: 'delta'
        unit: 'user'
        volume: 1
        event_type:
          - 'identity.authenticate'
        resource_id: $.payload.initiator.id
        user_id: $.payload.initiator.id
      - name: 'dns.domain.exists'
        event_type: 'dns.domain.exists'
        type: 'cumulative'
        unit: 's'
        volume:
          fields: [$.payload.audit_period_beginning, $.payload.audit_period_ending]
          plugin: 'timedelta'
        project_id: $.payload.tenant_id
        resource_id: $.payload.id
        user_id: $._context_user
        metadata:
          status: $.payload.status
          pool_id: $.payload.pool_id
          host: $.publisher_id
      - name: 'trove.instance.exists'
        event_type: 'trove.instance.exists'
        type: 'cumulative'
        unit: 's'
        volume:
          fields: [$.payload.audit_period_beginning, $.payload.audit_period_ending]
          plugin: 'timedelta'
        project_id: $.payload.tenant_id
        resource_id: $.payload.instance_id
        user_id: $.payload.user_id
        metadata:
          nova_instance_id: $.payload.nova_instance_id
          state: $.payload.state
          service_id: $.payload.service_id
          instance_type: $.payload.instance_type
          instance_type_id: $.payload.instance_type_id
  polling:
    sources:
      - name: all_pollsters
        interval: 600
        meters:
          - "*"
  pipeline:
    sources:
      - name: meter_source
        meters:
          - "*"
        sinks:
          - meter_sink
      - name: cpu_source
        meters:
          - "cpu"
        sinks:
          - cpu_sink
          - cpu_delta_sink
      - name: disk_source
        meters:
          - "disk.read.bytes"
          - "disk.read.requests"
          - "disk.write.bytes"
          - "disk.write.requests"
          - "disk.device.read.bytes"
          - "disk.device.read.requests"
          - "disk.device.write.bytes"
          - "disk.device.write.requests"
        sinks:
          - disk_sink
      - name: network_source
        meters:
          - "network.incoming.bytes"
          - "network.incoming.packets"
          - "network.outgoing.bytes"
          - "network.outgoing.packets"
        sinks:
          - network_sink
    sinks:
      - name: meter_sink
        transformers:
        publishers:
          - notifier://
      - name: cpu_sink
        transformers:
          - name: "rate_of_change"
            parameters:
              target:
                name: "cpu_util"
                unit: "%"
                type: "gauge"
                max: 100
                scale: "100.0 / (10**9 * (resource_metadata.cpu_number or 1))"
        publishers:
          - notifier://
      - name: cpu_delta_sink
        transformers:
          - name: "delta"
            parameters:
              target:
                name: "cpu.delta"
              growth_only: true
        publishers:
          - notifier://
      - name: disk_sink
        transformers:
          - name: "rate_of_change"
            parameters:
              source:
                map_from:
                  name: "(disk\\.device|disk)\\.(read|write)\\.(bytes|requests)"
                  unit: "(B|request)"
              target:
                map_to:
                  name: "\\1.\\2.\\3.rate"
                  unit: "\\1/s"
                type: "gauge"
        publishers:
          - notifier://
      - name: network_sink
        transformers:
          - name: "rate_of_change"
            parameters:
              source:
                map_from:
                  name: "network\\.(incoming|outgoing)\\.(bytes|packets)"
                  unit: "(B|packet)"
              target:
                map_to:
                  name: "network.\\1.\\2.rate"
                  unit: "\\1/s"
                type: "gauge"
        publishers:
          - notifier://

dependencies:
  dynamic:
    common:
      local_image_registry:
        jobs:
          - ceilometer-image-repo-sync
        services:
          - endpoint: node
            service: local_image_registry
  static:
    api:
      jobs:
        - ceilometer-db-sync
        - ceilometer-rabbit-init
        - ceilometer-ks-user
        - ceilometer-ks-endpoints
      services:
        - endpoint: internal
          service: identity
        - endpoint: internal
          service: metric
    central:
      jobs:
        - ceilometer-db-sync
        - ceilometer-rabbit-init
        - ceilometer-ks-user
        - ceilometer-ks-endpoints
      services:
        - endpoint: internal
          service: identity
        - endpoint: internal
          service: oslo_db
        - endpoint: internal
          service: metric
    ipmi:
      jobs:
        - ceilometer-db-sync
        - ceilometer-rabbit-init
        - ceilometer-ks-user
        - ceilometer-ks-endpoints
      services:
        - endpoint: internal
          service: identity
        - endpoint: internal
          service: oslo_db
        - endpoint: internal
          service: metric
    compute:
      jobs:
        - ceilometer-db-sync
        - ceilometer-rabbit-init
        - ceilometer-ks-user
        - ceilometer-ks-endpoints
      services:
        - endpoint: internal
          service: identity
        - endpoint: internal
          service: oslo_db
        - endpoint: internal
          service: metric
    db_sync:
      services:
        - endpoint: internal
          service: metric
    ks_user:
      services:
        - endpoint: internal
          service: identity
    rabbit_init:
      services:
      - service: oslo_messaging
        endpoint: internal
    notification:
      jobs:
        - ceilometer-db-sync
        - ceilometer-rabbit-init
        - ceilometer-ks-user
        - ceilometer-ks-endpoints
      services:
        - endpoint: internal
          service: identity
        - endpoint: internal
          service: oslo_db
        - endpoint: internal
          service: metric
    tests:
      services:
        - endpoint: internal
          service: identity
        - endpoint: internal
          service: metering
        - endpoint: internal
          service: metric
    image_repo_sync:
      services:
        - endpoint: internal
          service: local_image_registry

# Names of secrets used by bootstrap and environmental checks
secrets:
  identity:
    admin: ceilometer-keystone-admin
    ceilometer: ceilometer-keystone-user
    test: ceilometer-keystone-test
  oslo_messaging:
    admin: ceilometer-rabbitmq-admin
    ceilometer: ceilometer-rabbitmq-user
  oci_image_registry:
    ceilometer: ceilometer-oci-image-registry

bootstrap:
  enabled: false
  ks_user: ceilometer
  script: |
    openstack token issue

# typically overridden by environmental
# values, but should include all endpoints
# required by this chart
endpoints:
  cluster_domain_suffix: cluster.local
  local_image_registry:
    name: docker-registry
    namespace: docker-registry
    hosts:
      default: localhost
      internal: docker-registry
      node: localhost
    host_fqdn_override:
      default: null
    port:
      registry:
        node: 5000
  oci_image_registry:
    name: oci-image-registry
    namespace: oci-image-registry
    auth:
      enabled: false
      ceilometer:
        username: ceilometer
        password: password
    hosts:
      default: localhost
    host_fqdn_override:
      default: null
    port:
      registry:
        default: null
  identity:
    name: keystone
    auth:
      admin:
        region_name: RegionOne
        username: admin
        password: password
        project_name: admin
        user_domain_name: default
        project_domain_name: default
      ceilometer:
        role: admin
        region_name: RegionOne
        username: ceilometer
        password: password
        project_name: service
        user_domain_name: service
        project_domain_name: service
      test:
        role: admin
        region_name: RegionOne
        username: ceilometer-test
        password: password
        project_name: test
        user_domain_name: service
        project_domain_name: service
    hosts:
      default: keystone
      internal: keystone-api
    host_fqdn_override:
      default: null
    path:
      default: /v3
    scheme:
      default: 'http'
    port:
      api:
        default: 80
        internal: 5000
  metric:
    name: gnocchi
    hosts:
      default: gnocchi-api
      public: gnocchi
    host_fqdn_override:
      default: null
    path:
      default: null
    scheme:
      default: 'http'
    port:
      api:
        default: 8041
        public: 80
  alarming:
    name: aodh
    hosts:
      default: aodh-api
      public: aodh
    host_fqdn_override:
      default: null
    path:
      default: null
    scheme:
      default: 'http'
    port:
      api:
        default: 8042
        public: 80
  oslo_cache:
    auth:
      # NOTE(portdirect): this is used to define the value for keystone
      # authtoken cache encryption key, if not set it will be populated
      # automatically with a random value, but to take advantage of
      # this feature all services should be set to use the same key,
      # and memcache service.
      memcache_secret_key: null
    hosts:
      default: memcached
    host_fqdn_override:
      default: null
    port:
      memcache:
        default: 11211
  oslo_messaging:
    auth:
      admin:
        username: rabbitmq
        password: password
      ceilometer:
        username: ceilometer
        password: password
    statefulset:
      replicas: 2
      name: rabbitmq-rabbitmq
    hosts:
      default: rabbitmq
    host_fqdn_override:
      default: null
    path: /ceilometer
    scheme: rabbit
    port:
      amqp:
        default: 5672
      http:
        default: 15672

pod:
  affinity:
    anti:
      type:
        default: preferredDuringSchedulingIgnoredDuringExecution
      topologyKey:
        default: kubernetes.io/hostname
      weight:
        default: 10
  tolerations:
    ceilometer:
      enabled: false
      tolerations:
        - key: node-role.kubernetes.io/master
          operator: Exists
          effect: NoSchedule
        - key: node-role.kubernetes.io/control-plane
          operator: Exists
          effect: NoSchedule
  mounts:
    ceilometer_tests:
      init_container: null
      ceilometer_tests:
        volumeMounts:
        volumes:
    ceilometer_compute:
      init_container: null
      ceilometer_compute:
        volumeMounts:
        volumes:
    ceilometer_central:
      init_container: null
      ceilometer_central:
        volumeMounts:
        volumes:
    ceilometer_ipmi:
      init_container: null
      ceilometer_ipmi:
        volumeMounts:
        volumes:
    ceilometer_notification:
      init_container: null
      ceilometer_notification:
        volumeMounts:
        volumes:
    ceilometer_db_sync:
      ceilometer_db_sync:
        volumeMounts:
        volumes:
  replicas:
    central: 1
    notification: 1
  lifecycle:
    upgrades:
      deployments:
        revision_history: 3
        pod_replacement_strategy: RollingUpdate
        rolling_update:
          max_unavailable: 1
          max_surge: 3
      daemonsets:
        pod_replacement_strategy: RollingUpdate
        compute:
          enabled: true
          min_ready_seconds: 0
          max_unavailable: 1
  resources:
    enabled: true
    compute:
      requests:
        memory: "128Mi"
        cpu: "100m"
      limits:
        memory: "1024Mi"
        cpu: "2000m"
    notification:
      requests:
        memory: "128Mi"
        cpu: "100m"
      limits:
        memory: "1024Mi"
        cpu: "2000m"
    central:
      requests:
        memory: "128Mi"
        cpu: "100m"
      limits:
        memory: "1024Mi"
        cpu: "2000m"
    ipmi:
      requests:
        memory: "124Mi"
        cpu: "100m"
      limits:
        memory: "1024Mi"
        cpu: "2000m"
    jobs:
      db_sync:
        requests:
          memory: "128Mi"
          cpu: "100m"
        limits:
          memory: "1024Mi"
          cpu: "2000m"
      rabbit_init:
        requests:
          memory: "128Mi"
          cpu: "100m"
        limits:
          memory: "1024Mi"
          cpu: "2000m"
      ks_user:
        requests:
          memory: "128Mi"
          cpu: "100m"
        limits:
          memory: "1024Mi"
          cpu: "2000m"
      tests:
        requests:
          memory: "128Mi"
          cpu: "100m"
        limits:
          memory: "1024Mi"
          cpu: "2000m"
      image_repo_sync:
        requests:
          memory: "128Mi"
          cpu: "100m"
        limits:
          memory: "1024Mi"
          cpu: "2000m"

manifests:
  configmap_bin: true
  configmap_etc: true
  deployment_central: true
  daemonset_compute: true
  daemonset_ipmi: false
  deployment_notification: true
  job_bootstrap: true
  job_db_sync: true
  job_image_repo_sync: true
  job_ks_user: true
  job_rabbit_init: true
  secret_keystone: true
  secret_rabbitmq: true
  secret_registry: true
...
