{"version": 3, "term": {"cols": 120, "rows": 42}, "timestamp": 1793680080, "idle_time_limit": 2.0, "title": "harvey: VM DR with NetApp SnapMirror"}
[0.035, "o", "\u001b[1;36m# Harvey: VM disaster recovery between two SUSE Virtualization clusters, NetApp SnapMirror underneath\u001b[0m\r\n"]
[1.013, "o", "\u001b[1;32m$\u001b[0m "]
[0.000, "o", "h"]
[0.037, "o", "a"]
[0.037, "o", "r"]
[0.038, "o", "v"]
[0.033, "o", "e"]
[0.031, "o", "y"]
[0.031, "o", " "]
[0.030, "o", "r"]
[0.035, "o", "e"]
[0.034, "o", "p"]
[0.032, "o", "l"]
[0.042, "o", "i"]
[0.035, "o", "c"]
[0.039, "o", "a"]
[0.033, "o", "t"]
[0.041, "o", "i"]
[0.044, "o", "o"]
[0.037, "o", "n"]
[0.037, "o", " "]
[0.033, "o", "s"]
[0.032, "o", "t"]
[0.035, "o", "a"]
[0.035, "o", "t"]
[0.041, "o", "u"]
[0.032, "o", "s"]
[0.034, "o", "\r\n"]
[1.219, "o", "\u001b[3m                                                   Replication status                                                   \u001b[0m\r\n╭──────────────────────────┬──────────────────────┬─────────────┬──────────────┬─────────┬─────┬────────────────┬──────╮\r\n│\u001b[1m \u001b[0m\u001b[1mVM / direction / state  \u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mVolume              \u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mTMR pri→rep\u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mSnapMirror  \u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mHealthy\u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mLag\u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mRecovery point\u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1mNote\u001b[0m\u001b[1m \u001b[0m│\r\n├──────────────────────────┼──────────────────────┼─────────────┼─"]
[0.000, "o", "─────────────┼─────────┼─────┼────────────────┼──────┤\r\n│ \u001b[1mharvey-dr-demo/dr-demo-1\u001b[0m │ dr-demo-1-root       │ prom→re-est │ snapmirrored │ \u001b[32myes\u001b[0m     │ 61s │ 04:27:00       │      │\r\n│ primary → dr             │ dr-demo-1-data-iscsi │ prom→re-est │ snapmirrored │ \u001b[32myes\u001b[0m     │ 61s │ 04:27:00       │      │\r\n│ Running / Stopped        │ dr-demo-1-data-nfs   │ prom→re-est │ snapmirrored │ \u001b[32myes\u001b[0m     │ 61s │ 04:27:00       │      │\r\n╰──────────────────────────┴──────────────────────┴─────────────┴──────────────┴─────────┴─────┴────────────────┴──────╯\r\n"]
[0.003, "o", "Worst lag: \u001b[1m61s\u001b[0m  \u001b[1m(\u001b[0mschedule \u001b[32m'harvey-1min'\u001b[0m; lag = age of the newest replicated snapshot = worst-case data loss if the \r\nprimary site fails now\u001b[1m)\u001b[0m\r\n"]
[0.027, "o", "\r\n"]
[1.516, "o", "\u001b[1;36m# Change the VM on the primary site (metadata only), then push it to the replica\u001b[0m\r\n"]
[1.029, "o", "\u001b[1;32m$\u001b[0m "]
[0.000, "o", "k"]
[0.034, "o", "u"]
[0.038, "o", "b"]
[0.035, "o", "e"]
[0.038, "o", "c"]
[0.035, "o", "t"]
[0.041, "o", "l"]
[0.035, "o", " "]
[0.037, "o", "-"]
[0.035, "o", "-"]
[0.041, "o", "c"]
[0.045, "o", "o"]
[0.037, "o", "n"]
[0.034, "o", "t"]
[0.031, "o", "e"]
[0.041, "o", "x"]
[0.039, "o", "t"]
[0.036, "o", " "]
[0.034, "o", "p"]
[0.031, "o", "r"]
[0.036, "o", "i"]
[0.037, "o", "m"]
[0.038, "o", "a"]
[0.039, "o", "r"]
[0.046, "o", "y"]
[0.039, "o", " "]
[0.037, "o", "-"]
[0.035, "o", "n"]
[0.041, "o", " "]
[0.038, "o", "h"]
[0.038, "o", "a"]
[0.037, "o", "r"]
[0.036, "o", "v"]
[0.037, "o", "e"]
[0.044, "o", "y"]
[0.039, "o", "-"]
[0.035, "o", "d"]
[0.038, "o", "r"]
[0.035, "o", "-"]
[0.037, "o", "d"]
[0.037, "o", "e"]
[0.035, "o", "m"]
[0.031, "o", "o"]
[0.034, "o", " "]
[0.034, "o", "a"]
[0.035, "o", "n"]
[0.034, "o", "n"]
[0.036, "o", "o"]
[0.039, "o", "t"]
[0.037, "o", "a"]
[0.035, "o", "t"]
[0.042, "o", "e"]
[0.034, "o", " "]
[0.034, "o", "v"]
[0.033, "o", "m"]
[0.033, "o", " "]
[0.036, "o", "d"]
[0.036, "o", "r"]
[0.037, "o", "-"]
[0.032, "o", "d"]
[0.041, "o", "e"]
[0.038, "o", "m"]
[0.035, "o", "o"]
[0.037, "o", "-"]
[0.039, "o", "1"]
[0.037, "o", " "]
[0.038, "o", "f"]
[0.038, "o", "i"]
[0.039, "o", "e"]
[0.038, "o", "l"]
[0.033, "o", "d"]
[0.036, "o", "."]
[0.033, "o", "c"]
[0.038, "o", "a"]
[0.035, "o", "t"]
[0.040, "o", "t"]
[0.037, "o", "l"]
[0.037, "o", "e"]
[0.037, "o", "."]
[0.041, "o", "i"]
[0.037, "o", "o"]
[0.034, "o", "/"]
[0.033, "o", "d"]
[0.033, "o", "e"]
[0.035, "o", "s"]
[0.032, "o", "c"]
[0.037, "o", "r"]
[0.035, "o", "i"]
[0.036, "o", "p"]
[0.034, "o", "t"]
[0.033, "o", "i"]
[0.039, "o", "o"]
[0.042, "o", "n"]
[0.036, "o", "="]
[0.040, "o", "\""]
[0.038, "o", "o"]
[0.035, "o", "w"]
[0.035, "o", "n"]
[0.036, "o", "e"]
[0.035, "o", "r"]
[0.035, "o", ":"]
[0.038, "o", " "]
[0.039, "o", "d"]
[0.039, "o", "b"]
[0.040, "o", "a"]
[0.035, "o", "-"]
[0.037, "o", "t"]
[0.041, "o", "e"]
[0.043, "o", "a"]
[0.036, "o", "m"]
[0.037, "o", ","]
[0.035, "o", " "]
[0.035, "o", "c"]
[0.038, "o", "h"]
[0.036, "o", "a"]
[0.038, "o", "n"]
[0.034, "o", "g"]
[0.040, "o", "e"]
[0.035, "o", "d"]
[0.039, "o", " "]
[0.033, "o", "0"]
[0.041, "o", "4"]
[0.042, "o", ":"]
[0.036, "o", "2"]
[0.035, "o", "8"]
[0.035, "o", ":"]
[0.036, "o", "0"]
[0.039, "o", "6"]
[0.033, "o", "\""]
[0.034, "o", " "]
[0.039, "o", "-"]
[0.041, "o", "-"]
[0.041, "o", "o"]
[0.036, "o", "v"]
[0.037, "o", "e"]
[0.040, "o", "r"]
[0.039, "o", "w"]
[0.035, "o", "r"]
[0.033, "o", "i"]
[0.037, "o", "t"]
[0.035, "o", "e"]
[0.035, "o", "\r\n"]
[0.750, "o", "virtualmachine.kubevirt.io/dr-demo-1 annotated\r\n"]
[0.002, "o", "\r\n"]
[1.510, "o", "\u001b[1;32m$\u001b[0m "]
[0.000, "o", "h"]
[0.039, "o", "a"]
[0.029, "o", "r"]
[0.035, "o", "v"]
[0.034, "o", "e"]
[0.038, "o", "y"]
[0.041, "o", " "]
[0.036, "o", "s"]
[0.036, "o", "y"]
[0.043, "o", "n"]
[0.035, "o", "c"]
[0.042, "o", " "]
[0.035, "o", "-"]
[0.041, "o", "n"]
[0.041, "o", " "]
[0.043, "o", "h"]
[0.040, "o", "a"]
[0.038, "o", "r"]
[0.038, "o", "v"]
[0.036, "o", "e"]
[0.039, "o", "y"]
[0.037, "o", "-"]
[0.039, "o", "d"]
[0.038, "o", "r"]
[0.034, "o", "-"]
[0.038, "o", "d"]
[0.036, "o", "e"]
[0.043, "o", "m"]
[0.038, "o", "o"]
[0.039, "o", "\r\n"]
[0.873, "o", "\u001b[32m✓\u001b[0m harvey-dr-demo/dr-demo-\u001b[1;36m1\u001b[0m primary → dr: \u001b[1;36m3\u001b[0m \u001b[1;35mobject\u001b[0m\u001b[1m(\u001b[0ms\u001b[1m)\u001b[0m\r\n"]
[0.032, "o", "\r\n"]
[1.514, "o", "\u001b[1;32m$\u001b[0m "]
[0.000, "o", "k"]
[0.037, "o", "u"]
[0.037, "o", "b"]
[0.039, "o", "e"]
[0.037, "o", "c"]
[0.034, "o", "t"]
[0.036, "o", "l"]
[0.039, "o", " "]
[0.039, "o", "-"]
[0.034, "o", "-"]
[0.034, "o", "c"]
[0.031, "o", "o"]
[0.035, "o", "n"]
[0.039, "o", "t"]
[0.038, "o", "e"]
[0.043, "o", "x"]
[0.041, "o", "t"]
[0.038, "o", " "]
[0.032, "o", "d"]
[0.041, "o", "r"]
[0.044, "o", " "]
[0.043, "o", "-"]
[0.040, "o", "n"]
[0.039, "o", " "]
[0.035, "o", "h"]
[0.040, "o", "a"]
[0.035, "o", "r"]
[0.038, "o", "v"]
[0.042, "o", "e"]
[0.043, "o", "y"]
[0.029, "o", "-"]
[0.037, "o", "d"]
[0.038, "o", "r"]
[0.033, "o", "-"]
[0.036, "o", "d"]
[0.036, "o", "e"]
[0.033, "o", "m"]
[0.041, "o", "o"]
[0.037, "o", " "]
[0.038, "o", "g"]
[0.038, "o", "e"]
[0.037, "o", "t"]
[0.035, "o", " "]
[0.040, "o", "v"]
[0.039, "o", "m"]
[0.040, "o", " "]
[0.036, "o", "d"]
[0.032, "o", "r"]
[0.037, "o", "-"]
[0.033, "o", "d"]
[0.032, "o", "e"]
[0.037, "o", "m"]
[0.039, "o", "o"]
[0.042, "o", "-"]
[0.035, "o", "1"]
[0.035, "o", " "]
[0.034, "o", "-"]
[0.036, "o", "o"]
[0.036, "o", " "]
[0.037, "o", "c"]
[0.034, "o", "u"]
[0.042, "o", "s"]
[0.034, "o", "t"]
[0.038, "o", "o"]
[0.037, "o", "m"]
[0.036, "o", "-"]
[0.032, "o", "c"]
[0.031, "o", "o"]
[0.030, "o", "l"]
[0.031, "o", "u"]
[0.034, "o", "m"]
[0.030, "o", "n"]
[0.035, "o", "s"]
[0.031, "o", "="]
[0.035, "o", "."]
[0.032, "o", "."]
[0.035, "o", "."]
[0.035, "o", "\r\n"]
[0.614, "o", "NAME        RUN-STRATEGY   ROLE      DESCRIPTION\r\ndr-demo-1   Halted         replica   owner: dba-team, changed 04:28:06\r\n"]
[0.002, "o", "\r\n"]
[1.509, "o", "\u001b[1;32m$\u001b[0m "]
[0.000, "o", "h"]
[0.034, "o", "a"]
[0.031, "o", "r"]
[0.027, "o", "v"]
[0.026, "o", "e"]
[0.036, "o", "y"]
[0.032, "o", " "]
[0.036, "o", "h"]
[0.044, "o", "e"]
[0.034, "o", "a"]
[0.032, "o", "l"]
[0.037, "o", "t"]
[0.035, "o", "h"]
[0.037, "o", "-"]
[0.038, "o", "c"]
[0.040, "o", "h"]
[0.032, "o", "e"]
[0.032, "o", "c"]
[0.033, "o", "k"]
[0.036, "o", " "]
[0.035, "o", "p"]
[0.035, "o", "r"]
[0.038, "o", "i"]
[0.040, "o", "m"]
[0.035, "o", "a"]
[0.035, "o", "r"]
[0.035, "o", "y"]
[0.039, "o", " "]
[0.035, "o", "d"]
[0.034, "o", "r"]
[0.031, "o", "\r\n"]
[0.543, "o", "\u001b[92m──────────────────────────────────────────────── \u001b[0m\u001b[1;36mHarvey DR Health Check\u001b[0m\u001b[92m ────────────────────────────────────────────────\u001b[0m\r\n"]
[0.001, "o", "\u001b[?25l"]
[0.031, "o", "\u001b[32m⠋\u001b[0m \u001b[36mChecking connectivity to 'primary'...\u001b[0m\r\n\u001b[?25h\r\u001b[1A\u001b[2K"]
[0.000, "o", "  \u001b[32m✓\u001b[0m \u001b[32m'primary'\u001b[0m reachable — \u001b[1;36m5\u001b[0m VMs found.\r\n"]
[0.000, "o", "\u001b[?25l"]
[0.052, "o", "\u001b[32m⠋\u001b[0m \u001b[36mChecking connectivity to 'dr'...\u001b[0m\r\n\u001b[?25h\r\u001b[1A\u001b[2K"]
[0.001, "o", "  \u001b[32m✓\u001b[0m \u001b[32m'dr'\u001b[0m reachable — \u001b[1;36m8\u001b[0m VMs found.\r\n"]
[0.097, "o", "\r\n  VMs on both clusters \u001b[1m(\u001b[0mfailover-eligible\u001b[1m)\u001b[0m: \u001b[1;36m1\u001b[0m\r\n"]
[0.001, "o", "  Only on primary: \u001b[1;2;36m4\u001b[0m\r\n"]
[0.000, "o", "  Only on dr: \u001b[1;2;36m7\u001b[0m\r\n"]
[0.000, "o", "  \u001b[32m✓ No split-brain conditions detected.\u001b[0m\r\n"]
[0.097, "o", "\r\n  Protected VMs \u001b[1m(\u001b[0mSnapMirror\u001b[1m)\u001b[0m: \u001b[1;36m1\u001b[0m  \u001b[1m(\u001b[0mmax lag 600s\u001b[1m)\u001b[0m\r\n"]
[0.499, "o", "    \u001b[32m✓\u001b[0m harvey-dr-demo/dr-demo-\u001b[1;36m1\u001b[0m primary → dr: \u001b[1;36m3\u001b[0m \u001b[1;35mvolume\u001b[0m\u001b[1m(\u001b[0ms\u001b[1m)\u001b[0m, worst lag 23s\r\n"]
[0.002, "o", "\r\n  \u001b[33m⚠  No recovery plans found. Run \u001b[0m\u001b[33m'harvey plan new \u001b[0m\u001b[33m<\u001b[0m\u001b[33mname\u001b[0m\u001b[33m>\u001b[0m\u001b[33m'\u001b[0m\u001b[33m to create one.\u001b[0m\r\n\r\n\u001b[32m╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m\r\n\u001b[32m│\u001b[0m \u001b[1;32m✓ DR health check PASSED — environment ready for failover.\u001b[0m                                                           \u001b[32m│\u001b[0m\r\n\u001b[32m╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
[0.002, "o", "────╯\u001b[0m\r\n"]
[0.042, "o", "\r\n"]
[1.511, "x", "0"]
