Wie kann ich mit Augeas den Wert eines Attributs unter Verwendung des aktuellen Werts ändern?

Wie kann ich mit Augeas den Wert eines Attributs unter Verwendung des aktuellen Werts ändern?

Nehmen wir an, ich habe eine generische INI-Datei, die am besten von Samba.lns abgedeckt wird. Ich habe einen Eintrag wie:

attribute = value

Und ich willverwandeln valuezu Some-VALUE-x. Ein konkreteres Beispiel:

augtool> print /files/etc/yum.conf/main/cachedir
/files/etc/yum.conf/main/cachedir = "/var/cache/yum/$basearch/$releasever"

Und ich möchte den Wert wie folgt ändern:

"/var/cache/yum/noarch/$releasever"

Das heißt, ich möchte $basearchdurch ersetzen noarchund den Rest so lassen. Mein eigentliches Beispiel ist etwas komplexer. Kann ich das überhaupt in augeas tun?

Antwort1

Dies ist nicht mit einem einzelnen Augeas-API-Aufruf möglich, mit aug_get und aug_set ist es jedoch in der aufrufenden Sprache möglich. Beispielsweise mit Ruby-Augeas:

aug.set("/files/etc/yum.conf/main/cachedir", aug.get("/files/etc/yum.conf/main/cachedir").sub("$basearch", "noarch"))

Wenn Sie gemäß Ihrem Beispiel Augtool verwenden, können Sie in der Shell Folgendes tun:

cachedir=$(augtool get /files/etc/yum.conf/main/cachedir | sed 's/$basearch/noarch/')
augtool set /files/etc/yum.conf/main/cachedir "$cachedir"

Antwort2

Das Shellvars_listStandardobjektiv bietet nahezu alles, was ich brauche.

Bei einer Datei wie

GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=vgroot/lvswap rd.lvm.lv=vgroot/lvroot"
GRUB_DISABLE_RECOVERY="true"

Ich möchte beliebige Werte idempotent an anhängen GRUB_CMDLINE_LINUX. Dieses Objektiv analysiert diese Datei wie folgt:

augtool> print $v
/files/home/c14027/default-grub-sample
/files/home/c14027/default-grub-sample/GRUB_TIMEOUT
/files/home/c14027/default-grub-sample/GRUB_TIMEOUT/quote = ""
/files/home/c14027/default-grub-sample/GRUB_TIMEOUT/value = "5"
/files/home/c14027/default-grub-sample/GRUB_DEFAULT
/files/home/c14027/default-grub-sample/GRUB_DEFAULT/quote = ""
/files/home/c14027/default-grub-sample/GRUB_DEFAULT/value = "saved"
/files/home/c14027/default-grub-sample/GRUB_DISABLE_SUBMENU
/files/home/c14027/default-grub-sample/GRUB_DISABLE_SUBMENU/quote = ""
/files/home/c14027/default-grub-sample/GRUB_DISABLE_SUBMENU/value = "true"
/files/home/c14027/default-grub-sample/GRUB_TERMINAL_OUTPUT
/files/home/c14027/default-grub-sample/GRUB_TERMINAL_OUTPUT/quote = "\""
/files/home/c14027/default-grub-sample/GRUB_TERMINAL_OUTPUT/value = "console"
/files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX
/files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX/quote = "\""
/files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX/value[1] = "crashkernel=auto"
/files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX/value[2] = "rd.lvm.lv=vgroot/lvsap"
/files/home/c14027/default-grub-sample/GRUB_CMDLINE_LINUX/value[3] = "rd.lvm.lv=vgroot/lvroot"
/files/home/c14027/default-grub-sample/GRUB_DISABLE_RECOVERY
/files/home/c14027/default-grub-sample/GRUB_DISABLE_RECOVERY/quote = "\""
/files/home/c14027/default-grub-sample/GRUB_DISABLE_RECOVERY/value = "true"

Wir führen ein defvarin Augtool aus, sodass dies $vunser Präfix darstellt.

Fügen Sie diesem Parameter einen neuen Wert hinzu CMDLINE:

set $v/GRUB_CMDLINE_LINUX/value[last()+1] test=142

Vorhandene entfernen:

rm $v/GRUB_CMDLINE_LINUX/value[. =~ regexp("^test=.*")]

Ersetzen Sie das Schlüsselpaar, dessen Schlüssel ist test=:

set $v/GRUB_CMDLINE_LINUX/value[. =~ regexp("^test=.*")] test=1234

verwandte Informationen