You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
287 lines
10 KiB
287 lines
10 KiB
######################################################################
|
|
# @CCOSTAN - Follow Me on X
|
|
# For more info visit https://www.vcloudinfo.com/click-here
|
|
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
|
# -------------------------------------------------------------------
|
|
# Infrastructure Partial - Docker containers sections
|
|
# Related Issue: 1560, 1584, 1725
|
|
# Sections layout for the Docker containers view.
|
|
# -------------------------------------------------------------------
|
|
# Notes: Auto-discovers Portainer container entities from `switch.*_container`.
|
|
# Notes: Keeps cards visible when Portainer telemetry is unavailable (degraded mode).
|
|
# Notes: Includes stack-level status tiles from Portainer `*_stack_status` entities.
|
|
# Notes: Portainer volume usage is visible; volume prune is confined to host maintenance popups with hold-confirm actions.
|
|
# Notes: Docker volume summary tiles are explicit per host because Portainer does not expose endpoint volume totals for every host.
|
|
# Notes: Excludes transient codex_appliance Portainer run containers from generic container lists.
|
|
######################################################################
|
|
|
|
- type: grid
|
|
column_span: 4
|
|
columns: 3
|
|
square: false
|
|
cards:
|
|
- type: custom:button-card
|
|
template: bearstone_infra_kpi
|
|
entity: sensor.garage_ups_load
|
|
name: UPS Load
|
|
icon: mdi:battery-charging-60
|
|
- type: custom:button-card
|
|
template: bearstone_infra_kpi
|
|
entity: sensor.carlo_nvr_volume_1_volume_used
|
|
name: NVR Used
|
|
icon: mdi:harddisk
|
|
- type: custom:button-card
|
|
template: bearstone_infra_kpi
|
|
entity: sensor.carlo_nas01_volume_1_volume_used
|
|
name: NAS Used
|
|
icon: mdi:nas
|
|
|
|
- type: grid
|
|
column_span: 4
|
|
columns: 4
|
|
square: false
|
|
cards:
|
|
- type: custom:bubble-card
|
|
card_type: button
|
|
button_type: state
|
|
entity: sensor.docker_10_apt_status
|
|
name: docker_10
|
|
icon: mdi:server
|
|
show_state: true
|
|
show_last_changed: true
|
|
card_layout: large
|
|
tap_action:
|
|
action: navigate
|
|
navigation_path: '#infra-docker-10'
|
|
button_action:
|
|
tap_action:
|
|
action: navigate
|
|
navigation_path: '#infra-docker-10'
|
|
- type: custom:bubble-card
|
|
card_type: button
|
|
button_type: state
|
|
entity: sensor.docker_17_apt_status
|
|
name: docker_17
|
|
icon: mdi:server
|
|
show_state: true
|
|
show_last_changed: true
|
|
card_layout: large
|
|
tap_action:
|
|
action: navigate
|
|
navigation_path: '#infra-docker-17'
|
|
button_action:
|
|
tap_action:
|
|
action: navigate
|
|
navigation_path: '#infra-docker-17'
|
|
- type: custom:bubble-card
|
|
card_type: button
|
|
button_type: state
|
|
entity: sensor.docker_69_apt_status
|
|
name: docker_69
|
|
icon: mdi:server
|
|
show_state: true
|
|
show_last_changed: true
|
|
card_layout: large
|
|
tap_action:
|
|
action: navigate
|
|
navigation_path: '#infra-docker-69'
|
|
button_action:
|
|
tap_action:
|
|
action: navigate
|
|
navigation_path: '#infra-docker-69'
|
|
- type: custom:bubble-card
|
|
card_type: button
|
|
button_type: state
|
|
entity: sensor.docker_14_apt_status
|
|
name: docker_14
|
|
icon: mdi:server
|
|
show_state: true
|
|
show_last_changed: true
|
|
card_layout: large
|
|
tap_action:
|
|
action: navigate
|
|
navigation_path: '#infra-docker-14'
|
|
button_action:
|
|
tap_action:
|
|
action: navigate
|
|
navigation_path: '#infra-docker-14'
|
|
|
|
- type: grid
|
|
column_span: 4
|
|
columns: 1
|
|
square: false
|
|
cards:
|
|
- type: custom:vertical-stack-in-card
|
|
grid_options:
|
|
columns: full
|
|
card_mod:
|
|
style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml
|
|
cards:
|
|
- type: custom:button-card
|
|
template: bearstone_infra_panel_header
|
|
name: Docker Volumes
|
|
- type: custom:layout-card
|
|
grid_options:
|
|
columns: full
|
|
layout_type: custom:grid-layout
|
|
layout:
|
|
grid-template-columns: repeat(4, minmax(0, 1fr))
|
|
grid-auto-flow: row
|
|
grid-auto-rows: min-content
|
|
grid-gap: 12px
|
|
margin: 0
|
|
mediaquery:
|
|
"(max-width: 900px)":
|
|
grid-template-columns: repeat(2, minmax(0, 1fr))
|
|
cards:
|
|
- type: custom:button-card
|
|
template: bearstone_infra_docker_volume_row
|
|
entity: sensor.carlo_hass_volume_disk_usage_total_size
|
|
name: docker_10
|
|
variables:
|
|
total_entity: sensor.carlo_hass_volume_disk_usage_total_size
|
|
- type: custom:button-card
|
|
template: bearstone_infra_docker_volume_row
|
|
entity: button.docker2_prune_unused_volumes
|
|
name: docker_14
|
|
- type: custom:button-card
|
|
template: bearstone_infra_docker_volume_row
|
|
entity: button.docker17_prune_unused_volumes
|
|
name: docker_17
|
|
variables:
|
|
volume_entities:
|
|
- sensor.17214906eee4a16eed521e2904730a8272958bb32209c8b204fef3914a85006f_volume_size
|
|
- sensor.17e04b7a1a6902f3192bd825b497c5a7a920c64c88a216968cf1700da94d10f0_volume_size
|
|
- sensor.31a30aacc34d2988cbedbd8aa82d29066a7630ad8e51ce3d55ea0d785c5e8dbc_volume_size
|
|
- sensor.8c8b88aa16230a391d2e61e75fcc62a57ee569416d7c55ab4e8cd7487813b5dd_volume_size
|
|
- sensor.9bfb74e2a728618f9c3c1a363d2ccb3bba6e0580a14b3ca6f32afa4dea827b25_volume_size
|
|
- sensor.a5f10bca01c2cdda3915951e27eef9fcd39a7eae695e3e9b21850550d7d91e29_volume_size
|
|
- sensor.a5f10bca01c2cdda3915951e27eef9fcd39a7eae695e3e9b21850550d7d91e29c_volume_size
|
|
- sensor.a6fd445f48ed6892eb26e97814cb7720758588101a441e6b3ffe117cb55f612c_volume_size
|
|
- sensor.dc429dc8845534e799ea6170bb3a9fb79db3dbb08db6ed198a396f2aadaa1a85_volume_size
|
|
- sensor.de3d33e1a75cb2d24f5f7f27f4d9bb1f814d72ef9229000a2bf9372e421dfaaf_volume_size
|
|
- sensor.deaf7fea946c0cd1a40d161ab66367fddc1f99c2a5aae7bf4ad99b47fe25283c_volume_size
|
|
- sensor.openrecord_local_openrecord_next_cache_volume_size
|
|
- sensor.openrecord_local_openrecord_scrapers_node_modules_volume_size
|
|
- sensor.openrecord_local_openrecord_web_node_modules_volume_size
|
|
- type: custom:button-card
|
|
template: bearstone_infra_docker_volume_row
|
|
entity: sensor.docker69_volume_disk_usage_total_size
|
|
name: docker_69
|
|
variables:
|
|
total_entity: sensor.docker69_volume_disk_usage_total_size
|
|
|
|
- type: grid
|
|
column_span: 4
|
|
columns: 1
|
|
square: false
|
|
cards:
|
|
- type: custom:vertical-stack-in-card
|
|
grid_options:
|
|
columns: full
|
|
card_mod:
|
|
style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml
|
|
cards:
|
|
- type: custom:button-card
|
|
template: bearstone_infra_panel_header
|
|
name: Docker Stacks
|
|
- type: custom:auto-entities
|
|
show_empty: true
|
|
card:
|
|
type: custom:layout-card
|
|
layout_type: custom:grid-layout
|
|
layout:
|
|
grid-template-columns: repeat(2, minmax(0, 1fr))
|
|
grid-auto-flow: row
|
|
grid-auto-rows: min-content
|
|
grid-gap: 12px
|
|
margin: 0
|
|
mediaquery:
|
|
"(max-width: 900px)":
|
|
grid-template-columns: repeat(1, minmax(0, 1fr))
|
|
card_param: cards
|
|
filter:
|
|
include:
|
|
- entity_id: binary_sensor.*_stack_status
|
|
options:
|
|
type: custom:button-card
|
|
template: bearstone_infra_list_row_running
|
|
icon: mdi:package-variant
|
|
state_display: >
|
|
[[[
|
|
const base = entity.entity_id.replace('binary_sensor.', '').replace('_stack_status', '');
|
|
const count = states[`sensor.${base}_stack_containers_count`]?.state ?? 'n/a';
|
|
const type = String(states[`sensor.${base}_stack_type`]?.state ?? 'n/a').toUpperCase();
|
|
const status = entity.state === 'on' ? 'RUNNING' : 'DOWN';
|
|
return `${status} | ${count} ctrs | ${type}`;
|
|
]]]
|
|
sort:
|
|
method: name
|
|
|
|
- type: grid
|
|
column_span: 4
|
|
columns: 1
|
|
square: false
|
|
cards:
|
|
- !include /config/dashboards/infrastructure/popups/docker_10_maintenance.yaml
|
|
- !include /config/dashboards/infrastructure/popups/docker_17_maintenance.yaml
|
|
- !include /config/dashboards/infrastructure/popups/docker_69_maintenance.yaml
|
|
- !include /config/dashboards/infrastructure/popups/docker_14_maintenance.yaml
|
|
|
|
- type: grid
|
|
column_span: 4
|
|
columns: 1
|
|
square: false
|
|
cards:
|
|
- type: custom:vertical-stack-in-card
|
|
grid_options:
|
|
columns: full
|
|
card_mod:
|
|
style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml
|
|
cards:
|
|
- type: custom:button-card
|
|
template: bearstone_infra_alert_row
|
|
entity: binary_sensor.docker_container_telemetry_degraded
|
|
name: Docker telemetry degraded
|
|
icon: mdi:lan-disconnect
|
|
variables:
|
|
alert_kind: binary_on
|
|
state_display: >-
|
|
[[[
|
|
const unavailable = states['sensor.docker_monitored_unavailable_count']?.state ?? '0';
|
|
const total = states['sensor.docker_monitored_container_count']?.state ?? '0';
|
|
return `${unavailable}/${total} unavailable`;
|
|
]]]
|
|
|
|
- type: custom:auto-entities
|
|
show_empty: true
|
|
grid_options:
|
|
columns: full
|
|
card:
|
|
type: custom:layout-card
|
|
layout_type: custom:grid-layout
|
|
layout:
|
|
grid-template-columns: repeat(4, minmax(0, 1fr))
|
|
grid-auto-flow: row
|
|
grid-auto-rows: min-content
|
|
grid-gap: 12px
|
|
margin: 0
|
|
mediaquery:
|
|
"(max-width: 900px)":
|
|
grid-template-columns: repeat(2, minmax(0, 1fr))
|
|
card_param: cards
|
|
filter:
|
|
include:
|
|
- entity_id: "/^switch\\..*_container(_2)?$/"
|
|
options:
|
|
type: custom:button-card
|
|
template: bearstone_infra_container_row
|
|
icon: mdi:docker
|
|
exclude:
|
|
- entity_id: "/^switch\\.[0-9a-f]{12}_codex_appliance_container$/"
|
|
- entity_id: "/^switch\\.docker_files_codex_appliance_run_[0-9a-f]+_container$/"
|
|
- state: unavailable
|
|
- state: unknown
|
|
sort:
|
|
method: name
|