Com Augeas, como posso modificar o valor de um atributo usando o valor atual?

0

Digamos que eu tenha algum arquivo genérico do tipo INI, melhor abordado pelo Samba.lns. Eu tenho uma entrada como:

attribute = value

E eu quero transformar value em Some-VALUE-x . Para um exemplo mais concreto:

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

E quero alterar o valor para:

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

Ou seja, quero substituir $basearch por noarch e deixar o resto em paz. Meu exemplo atual é um pouco mais complexo. Posso até fazer isso dentro do augeas?

    
por Otheus 28.09.2016 / 00:57

2 respostas

1

Você não pode fazer isso com uma única chamada de API do Augeas, mas com aug_get e aug_set você pode fazer isso no idioma de chamada. por exemplo. usando ruby-augeas:

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

Se você estiver usando o augtool de acordo com seu exemplo, no shell você pode fazer:

cachedir=$(augtool get /files/etc/yum.conf/main/cachedir | sed 's/$basearch/noarch/')
augtool set /files/etc/yum.conf/main/cachedir "$cachedir"
    
por 28.09.2016 / 09:16
0

A lente de estoque Shellvars_list chega perto de fornecer o que eu precisava.

Dado um arquivo como

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"

Eu quero acrescentar valores arbitrários de maneira idempotente a GRUB_CMDLINE_LINUX . Esta lente analisa este arquivo da seguinte forma:

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"

Faremos um defvar no augtool para que $v represente nosso prefixo.

Adicione um novo valor a este CMDLINE paramater:

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

Remova os existentes:

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

Substitua o par de chaves cuja chave é test= :

set $v/GRUB_CMDLINE_LINUX/value[. =~ regexp("^test=.*")] test=1234
    
por 04.10.2016 / 20:11

Tags