Um script que atualiza interfaces se o / etc / network / interfaces mudar

3

[Isto é para o Debian Squeeze, mas se aplica ao Ubuntu e outras distribuições Linux.]

Eu tenho um arquivo / etc / network / interfaces bastante complexo que é gerado com base em vários fatores (número de interfaces, pontes necessárias, vlans, etc). Depois que o novo arquivo é gerado, preciso fazer novas interfaces e ifdown quaisquer interfaces obsoletas; e talvez precise ser reinicializado se a interface principal mudar (por exemplo, ela muda de eth0 ou br0).

Agora eu descubro o que fazer ifup / ifdown manualmente.

Existe um script que faça isso por mim?

    
por TomOnTime 22.02.2012 / 04:16

3 respostas

1

Não sei como você modifica / gera seu /etc/network/interfaces no momento. Provavelmente, a melhor solução seria usar uma ferramenta de gerenciamento de configuração (como Puppet, Chef ou Cfengine) para executar essa tarefa e chamar ifup quando o arquivo for modificado. Tais ferramentas são adaptadas para tarefas como esta. Você pode até se beneficiar dos recursos de templates de Puppet ou do provedor de Augeas para modificar seu arquivo.

Outra solução seria usar inotify. Por exemplo, você pode configurar incron para chamar ifup sempre que /etc/network/interfaces for modificado.

    
por 22.02.2012 / 11:07
0

Eu não conheço nenhum script prontamente disponível para este caso de uso, mas hackear um simples shell script para esta tarefa não deve ser muito difícil.

    
por 22.02.2012 / 04:56
0

É assim que eu gerencio arquivos ifcfg com fantoches. Eu crio um diretório em files/ para cada host, por exemplo:

modules/network/files/foohostname/
modules/network/files/someotherhostname/

Em seguida, em modules/network/manifests/init.pp , faço o seguinte:

  1. Copie todos os arquivos em modules/network/files/hostname/ para o diretório de scripts de rede no host.
  2. Execute service network start ou /etc/init.d/network start quando qualquer arquivo for adicionado / alterado. Descobri que service network start exibirá todas as interfaces que ainda não estão ativadas, mas não eliminará minhas conexões de rede existentes.
class network {
  # copy all ifcfg files from files/hostname/ directory to network-scripts/ 
  # other files in network-scripts/ will not be touched.
  file { '/etc/sysconfig/network-scripts/':
      recurse => true,
      purge   => false,
      owner   => root,
      group   => root,
      ignore  => '\.svn', # this is specific to me as I use svn.
      source  => "puppet:///modules/network/${hostname}/",
  }

  # if anything changes with the above File resource, then fire network start to bring them up.
  # this won't restart the network, only bring up any ifaces that are not up yet.
  exec{ 'network-ifup':
      command     => 'service network start',       
      refreshonly => true,
      subscribe   => File['/etc/sysconfig/network-scripts/'],
  }        
}

FYI alguns dos itens acima podem ser um pouco específicos do CentOS / RHEL.

    
por 18.07.2013 / 16:45

Tags