Configurando Cloud-Init
Cenários
Você precisa configurar Cloud-Init depois que ele for instalado.
Pré-requisitos
- Cloud-Init foi instalado.
 - Um EIP foi vinculado ao ECS.
 - Você fez login no ECS.
 - O modo de obtenção do endereço IP do ECS é DHCP.
 
Procedimento
São necessárias as seguintes operações:
- Configure o Cloud-Init.
    
Para mais detalhes, consulte Configurar Cloud-Init.
 - Verifique se Cloud-Init está configurado com êxito.
    
Para mais detalhes, consulte Verifique a configuração do Cloud-Init.
 
Configurar Cloud-Init
- Configure as permissões de usuário para efetuar login no ECS. Se você selecionar o usuário root, habilite as permissões SSH do usuário root e habilite o login remoto no ECS usando uma senha.
    
- Se você injetar uma senha, use-a para fazer login no ECS remotamente usando SSH ou noVNC.
 - Se você injetar uma chave privada, use-a para fazer login no ECS remotamente usando SSH.
 
Execute o seguinte comando para abrir o arquivo /etc/cloud/cloud.cfg usando o editor vi:
vi /etc/cloud/cloud.cfg
 - (Opcional) Em /etc/cloud/cloud.cfg, defina apply_network_config como false.
    
Esta etapa é apenas para o Cloud-Init 18.3 ou posterior.
Figura 1 Exemplo de configuração
     - Ative o login remoto usando a senha do usuário root e ative as permissões SSH do usuário root. Tome o CentOS 6.7 como um exemplo. Se o valor de disable_root no arquivo de configuração for 1, as permissões serão desabilitadas. Se o valor for 0, as permissões serão ativadas. (Em alguns SO, o valor true indica que as permissões estão desativadas e false indica que as permissões estão ativadas). Defina disable_root como 0, ssh_pwauth como 1, e lock_passwd como false (indicando que as senhas do usuário não estão bloqueadas).
    
users: - name: root lock_passwd: False disable_root: 0 ssh_pwauth: 1
 
- Habilite a atualização do nome do host. Não comente ou exclua a instrução -update_hostname.
    
cloud_init_modules: - migrator - bootcmd - write-files - growpart - resizefs - set_hostname - update_hostname - update_etc_hosts - rsyslog - users-groups - ssh
 - Execute o seguinte comando para abrir o arquivo /etc/ssh/sshd_config usando o editor vi:
    
vi /etc/ssh/sshd_config
 - Altere o valor de PasswordAuthentication no arquivo sshd_config para yes.
    
 
     Para SUSE e openSUSE, altere os valores dos seguintes parâmetros no arquivo sshd_config para yes:
- PasswordAuthentication
 - ChallengeResponseAuthentication
 
 - Exclua o usuário linux e o diretório /home/linux do modelo de imagem.
    
userdel linux
rm -fr /home/linux
 
- Permita que o agente acesse a fonte de dados do OpenStack do IaaS.
    Adicione as seguintes informações à última linha de /etc/cloud/cloud.cfg:
datasource_list: [ OpenStack ] datasource: OpenStack: metadata_urls: ['http://169.254.169.254'] max_wait: 120 timeout: 5
 
     - Você pode decidir se deseja definir max_wait e timeout. Os valores de max_wait e timeout na saída do comando anterior são apenas para referência.
 - Se a versão do SO for anterior ao Debian 8 ou CentOS 5, você não pode habilitar o agente para acessar a fonte de dados do OpenStack IaaS.
 - A rota zeroconf padrão deve ser desativada para ECSs CentOS e EulerOS para acesso preciso à fonte de dados OpenStack IaaS.
 
 - Evite que o Cloud-Init domine a rede em /etc/cloud/cloud.cfg.
    
Se a versão do Cloud-Init for 0.7.9 ou posterior, adicione o seguinte conteúdo ao /etc/cloud/cloud.cfg:
network: config: disabled
 
     O conteúdo adicionado deve estar no formato YAML.
Figura 2 Impedindo que o Cloud-Init assuma a rede
     - Adicione o seguinte conteúdo ao /etc/cloud/cloud.cfg:
    
manage_etc_hosts: localhost
Isso impede que o sistema permaneça no estado Waiting for cloudResetPwdAgent por um longo período de tempo durante a inicialização ECS.
Figura 3 Adicionando manage_etc_hosts: localhost
     - Modifique o arquivo de configuração cloud_init_modules.
    
Mova o ssh de baixo para cima para acelerar o login do SSH.
Figura 4 Acelerando o login SSH para o ECS
     - Modifique a configuração para que o nome do host do ECS criado a partir da imagem não contenha o sufixo .novalocale possa conter um ponto (.).
    
- Execute o seguinte comando para modificar o arquivo __init__.py:
      
vi /usr/lib/python2.7/site-packages/cloudinit/sources/__init__.py
Pressione i para entrar no modo de edição. Procure por toks. As seguintes informações são exibidas:
if toks: toks = str(toks).split('.') else: toks = ["ip-%s" % lhost.replace(".", "-")] else: toks = lhost.split(".novalocal") if len(toks) > 1: hostname = toks[0] #domain = '.'.join(toks[1:]) else: hostname = toks[0] if fqdn and domain != defdomain: return "%s.%s" % (hostname, domain) else: return hostnameApós a conclusão da modificação, pressione Esc para sair do modo de edição e digite :wq! para salvar as configurações e sair.
Figura 5 Modificando o arquivo __init__.py
       - Execute o seguinte comando para alternar para a pasta cloudinit/sources:
      
cd /usr/lib/python2.7/site-packages/cloudinit/sources/
 - Execute os seguintes comandos para excluir o arquivo __init__.pyc e o arquivo __init__.pyo otimizado:
      
rm -rf __init__.pyc
rm -rf __init__.pyo
 - Execute os seguintes comandos para limpar os logs:
      
      
rm -rf /var/log/cloud-init*
 
 - Execute o seguinte comando para modificar o arquivo __init__.py:
      
 - Execute o seguinte comando para editar o arquivo /etc/cloud/cloud.cfg.d/05_logging.cfg para usar o cloudLogHandler para processar logs:
    
vim /etc/cloud/cloud.cfg.d/05_logging.cfg
Figura 6 Configurando o valor do parâmetro para cloudLogHandler
     
Verifique a configuração do Cloud-Init
Execute o seguinte comando para verificar se o Cloud-Init foi configurado corretamente:
cloud-init init --local
 
    (Opcional) Execute o seguinte comando para definir o período de validade da senha para o máximo:
chage -M 99999 $user_name
user_name é um usuário do sistema, como o usuário root.
É aconselhável definir o período de validade da senha para 99999.