@@ -49,32 +49,83 @@ dvm_vm_dir() {
4949 printf ' %s\n' " ${LIMA_HOME:- $HOME / .lima} /$vm "
5050}
5151
52- dvm_vm_ports_from_yaml () {
53- local file guest host ports
52+ dvm_vm_ports_from_yaml_parse () {
53+ local file mode
5454 file=" $1 /lima.yaml"
55- [ -f " $file " ] || {
56- printf -- ' -\n'
57- return 0
58- }
59- ports=" $(
60- awk '
61- /hostPort:/ { host=$NF; gsub(/"/, "", host) }
62- /guestPort:/ { guest=$NF; gsub(/"/, "", guest) }
63- host && guest { print host ":" guest; host=""; guest="" }
64- ' " $file " | paste -sd, -
65- ) "
55+ mode=" $2 "
56+ [ -f " $file " ] || return 0
57+ awk -v mode=" $mode " '
58+ function reset() {
59+ host = ""
60+ guest = ""
61+ ignore = ""
62+ }
63+ function value(line, key, tmp) {
64+ tmp = line
65+ gsub(/"/, "", tmp)
66+ sub("^.*" key ":[[:space:]]*", "", tmp)
67+ sub("[[:space:]]*#.*$", "", tmp)
68+ sub("[[:space:]].*$", "", tmp)
69+ return tmp
70+ }
71+ function emit() {
72+ if (guest == "") {
73+ return
74+ }
75+ if (ignore == "true") {
76+ if (mode == "canonical") {
77+ print guest ":" guest
78+ }
79+ return
80+ }
81+ if (host != "") {
82+ print host ":" guest
83+ }
84+ }
85+ BEGIN {
86+ reset()
87+ }
88+ /^[[:space:]]*portForwards:/ {
89+ in_ports = 1
90+ next
91+ }
92+ in_ports && /^[^[:space:]-]/ {
93+ emit()
94+ reset()
95+ in_ports = 0
96+ }
97+ !in_ports {
98+ next
99+ }
100+ /^[[:space:]]*-/ {
101+ emit()
102+ reset()
103+ }
104+ /hostPort:[[:space:]]*/ {
105+ host = value($0, "hostPort")
106+ }
107+ /guestPort:[[:space:]]*/ {
108+ guest = value($0, "guestPort")
109+ }
110+ /ignore:[[:space:]]*true/ {
111+ ignore = "true"
112+ }
113+ END {
114+ if (in_ports) {
115+ emit()
116+ }
117+ }
118+ ' " $file "
119+ }
120+
121+ dvm_vm_ports_from_yaml () {
122+ local ports
123+ ports=" $( dvm_vm_ports_from_yaml_parse " $1 " display | paste -sd, -) "
66124 printf ' %s\n' " ${ports:- " -" } "
67125}
68126
69127dvm_vm_ports_canonical_from_yaml () {
70- local file
71- file=" $1 /lima.yaml"
72- [ -f " $file " ] || return 0
73- awk '
74- /hostPort:/ { host=$NF; gsub(/"/, "", host) }
75- /guestPort:/ { guest=$NF; gsub(/"/, "", guest) }
76- host && guest { print host ":" guest; host=""; guest="" }
77- ' " $file " | sort
128+ dvm_vm_ports_from_yaml_parse " $1 " canonical | sort
78129}
79130
80131dvm_list () {
0 commit comments