Command_line: Switch und command_state

Hallo,

ich habe mehrere Linux Systeme die ich mit command_line abfrage um zu schauen ob Updates vorhanden sind. Das klappt auch ganz gut.

Nun habe ich noch einen command_line switch um die Linux Updates starten zu können.

  - switch:
      name: Starte Linux Update proxmox
      command_on : "ssh -o LogLevel=QUIET root@pve.fritz.box -i /config/.ssh/id_rsa -o UserKnownHostsFile=/config/.ssh/known_hosts -t \"export DEBIAN_FRONTEND=noninteractive yes '' | apt-get -y -o DPkg::options::=\"--force-confdef\" -o DPkg::options::=\"--force-confold\" dist-upgrade | /bin/grep ^Inst | wc -l\""
      command_off : ""
      command_state: "ssh -o LogLevel=QUIET root@pve.fritz.box -i /config/.ssh/id_rsa -o UserKnownHostsFile=/config/.ssh/known_hosts -t \"result=$(apt-get -qq update && apt-get -q -y --ignore-hold --allow-change-held-packages --allow-unauthenticated -s dist-upgrade | /bin/grep ^Inst | wc -l); if [ $result -gt 0 ]; then echo 1; else echo 0; fi \""
      command_timeout: 82800
      scan_interval: 60
      unique_id: command_line_start_pve_linux_update

Command_on klappt auch. Damit aber der Wechsel auf off klappt, habe ich command_state eingebaut. Die Abfrage bei command_state gibt 1 aus wenn Linux Update da sind. Wert <> 0 bedeutet, dass der Schalter auf Off gesetzt wird.

Leider klappt das nicht. Alle Switches sind auf On.

Ich glaube das die doppel " das Problem sind.
Versuch mal

"ssh -o LogLevel=QUIET root@pve.fritz.box -i /config/.ssh/id_rsa -o UserKnownHostsFile=/config/.ssh/known_hosts -t \'result=$(apt-get -qq update && apt-get -q -y --ignore-hold --allow-change-held-packages --allow-unauthenticated -s dist-upgrade | /bin/grep ^Inst | wc -l); if [ $result -gt 0 ]; then echo 1; else echo 0; fi \'"

Dachte ich auch. Aber da kommt:

unknown escape sequence

Die Abfrage der Anzahl von Updates funktioniert ja. Dort ist auch \" drinnen.

Ich habe nun die Lösung gefunden. vor $ muss ein . Da das ganze per ssh geht.
Um das in der yaml richtig abzubilden muss das \ noch gecastet werden. Also aus $ wird \$ und sieht dann wie folgt aus:

  - switch:
      name: Starte Linux Update proxmox
      command_on : "ssh -o LogLevel=QUIET root@pve.fritz.box -i /config/.ssh/id_rsa -o UserKnownHostsFile=/config/.ssh/known_hosts -t \"export DEBIAN_FRONTEND=noninteractive yes '' | apt-get -y -o DPkg::options::=\"--force-confdef\" -o DPkg::options::=\"--force-confold\" dist-upgrade | /bin/grep ^Inst | wc -l\""
      command_off : ""
      command_state: "ssh -o LogLevel=QUIET root@pve.fritz.box -i /config/.ssh/id_rsa -o UserKnownHostsFile=/config/.ssh/known_hosts -t \"result=\\$(apt-get -qq update && apt-get -q -y --ignore-hold --allow-change-held-packages --allow-unauthenticated -s dist-upgrade | /bin/grep ^Inst | wc -l); if [ \\$result -gt 0 ]; then echo 0; else echo 1; fi \""
      command_timeout: 82800
      value_template: >
        {{ value == "1"}}
      scan_interval: 60
      unique_id: command_line_start_pve_linux_update