Como configurar a interface de rede com o recurso ifconfig do chef para o IP determinado no tempo de execução da receita

2

Estou trabalhando com o Chef através do Amazon Opsworks e preciso provisionar e configurar interfaces de rede adicionais para alguns dos meus servidores, e estou tendo problemas para descobrir como usar corretamente o recurso ifconfig chef. O principal problema é que eu não sei o endereço IP da interface no momento em que estou escrevendo a receita do chef. Todos os exemplos que vi mostram o endereço IP de destino expresso como uma string constante no nome do recurso da seguinte forma:

ifconfig '10.0.0.1' do
 eth1
end

No entanto, estou provisionando a interface de rede no momento da execução da receita, portanto, não sei de antemão em qual endereço IP a interface de rede provisionada será atribuída na rede local (Amazon VPC). Escrevi um recurso ruby_block que provisiona a interface e reúne o IP atribuído, mas recebo erros do recurso do chef quando tento transmiti-lo ao recurso ifconfig , como a documentação parece sugerir que eu deveria. Meu código é semelhante ao seguinte:

ruby_block 'provision_and_get_IP' do
  # Inside the following function the AWS CLI is called to provision
  # a network interface and return the assigned IP address
  assigned_ip = provision_and_get_ip()
  node["my_attributes"]["assigned_ip"] = assigned_ip
end

ifconfig 'setup_interface' do
  device 'eth1'  
  target lazy { node["my_attributes"]["assigned_ip"] }
end

E recebo um erro que diz

[2016-03-30T19:15:21+00:00] ERROR: ifconfig[setup_interface] (my_cookbook::my_recipe line 66) had an error: Chef::Exceptions::Exec: ifconfig eth1 setup_interface returned 1, expected 0
---- Begin output of ifconfig eth1 setup_interface ----
STDOUT: STDERR: setup_interface: Unknown host
ifconfig: '--help' gives usage information.
---- End output of ifconfig eth1 setup_interface ----

A documentação do recurso ifconfig pareceu sugerir que a propriedade target apenas padroniza o nome do recurso e que se eu configurá-lo, isso funcionaria, mas esse não parece ser o caso. O que estou fazendo errado aqui?

    
por Michael Lang 31.03.2016 / 00:18

1 resposta

1

Eu não acho que você conseguirá muito com a receita ifconfig aqui. Quando você solicita uma interface adicional para sua VM, ela é alocada pela Amazon e acho que o endereçamento também é gerenciado pela Amazon. Mesmo que você consiga alterar o endereço IP da sua interface, há uma boa chance de que ele não seja reconhecido e roteado adequadamente pela Amazon.

Uma das opções é usar endereços IP estáticos privados que você realmente conhece o endereço que sua interface receberá antes do tempo. Outra opção seria extrair o endereço da nova interface dos metadados.

    
por 31.03.2016 / 02:23