Como 'augtool' para manter o arquivo '/ etc / aliases'?

3

Eu gostaria de garantir que eu tenha as linhas ...

root: /dev/null
greenman: /dev/null

... no meu arquivo /etc/aliases e tenho aprendido sobre augtool . Eu sei que eu poderia fazer algo assim com o augtool ...

$ sudo augtool set /files/etc/aliases/15/name greenman

... mas eu não gosto de codificar o 15 . É bem possível em alguns sistemas greenman: /dev/null pode ser o décimo par nome / valor. Existe uma maneira de evitar o uso de um número em /files/etc/aliases/15/name ?

Obrigado

    
por Red Cricket 25.11.2013 / 22:57

1 resposta

4

Trabalhar com seq entradas (essas entradas numeradas, como 15 no seu caso) em Augeas pode ser um pouco complicado.

Usando augtool ainda

Você pode criar um script de augtool semelhante a este:

#!/usr/bin/augtool -sf

# First, match /etc/aliases, only if there's no "greenman" entry yet
# This will define a '$yellowwoman' variable which will contain '/etc/aliases',
# but only if there is no "greenman" entry yet (i.e. the count of the
# "greenman" entries is 0)
defvar yellowwoman /files/etc/aliases[count(*[name="greenman"])=0]

# Add the greenman entry at the end
# (using '01', which is never used automatically in 'seq' entries)
set $yellowwoman/01/name greenman

# Now set the value for the "greenman" entry,
# which you can be sure exists.
# Don't reuse the '$yellowwoman' variable, otherwise you'll
# only set the value when "greeman" wasn't there yet
# By selecting the "greenman" entry, you will always set the value
# even if the entry already existed in the file
set /files/etc/aliases/*[name="greenman"]/value /dev/null

O shebang ( #!/usr/bin/augtool -sf ) usa -s para salvar automaticamente depois de fazer as alterações e -f para obter um arquivo com comandos, tornando-o um script auto-executável, para que você possa tornar o arquivo executável e execute:

$ chmod +x greenman.augtool
$ sudo ./greenman.augtool
Saved 1 file(s)
$ sudo ./greenman.augtool # it should be idempotent, too

Se você não quiser tornar o script executável, também poderá passá-lo para augtool :

$ sudo augtool --autosave --file greenman.augtool
Saved 1 file(s)

E se você não quiser usar --autosave , poderá adicionar save como a última linha do script.

Usando uma linguagem de programação "real"

O Bash é legal, mas lidar com seus limites pode levar a soluções complexas. Augeas tem muitas ligações em vários idiomas. Basta escolher um e ficará mais fácil escrever seu código, porque você poderá usar um manipulador de Augeas persistente. Aqui está um exemplo com o Ruby:

#!/usr/bin/env ruby

require 'augeas'

Augeas.open do |aug|
  if aug.match('/files/etc/aliases/*[name="greenman"]').empty?
    # Create a new "greeman" entry
    aug.set('/files/etc/aliases/01/name', 'greenman')
  end
  # Set the value
  aug.set('/files/etc/aliases/*[name="greenman"]/value', '/dev/null')
  # Commit your changes
  aug.save!
end

Usando Puppet

No Puppet, a melhor solução é confiar no tipo mailalias com o augeas provider de augeasproviders . Ele usa a biblioteca Augeas Ruby para editar com segurança o /etc/aliases :

mailalias { 'greenman':
  ensure    => present,
  recipient => '/dev/null',
  provider  => augeas,
}

Observação: mailalias é um tipo de marionete padrão , mas o provedor padrão não faz isso t use Augeas.

    
por 25.11.2013 / 23:51

Tags