Olá, estou tentando descobrir como definir a variável de ambiente com o Ansible.
algo que um simples comando de shell como este:
EXPORT LC_ALL=C
tentei como um comando shell e ocorreu um erro ao tentar usar o módulo de ambiente e nada aconteceu.
o que estou perdendo
Respostas:
Existem várias maneiras de fazer isso e a partir de sua pergunta não fica claro o que você precisa.
1. Se precisar que a variável de ambiente seja definida SOMENTE POR TAREFA, faça o seguinte:
Observe que
MY_ENV_VARIABLE
está disponível SOMENTE para a primeira tarefa,environment
não a define permanentemente em seu sistema.Esperançosamente, em breve o uso
environment
também será possível no nível de jogo , não apenas no nível de tarefa como acima. Atualmente, há uma solicitação de pull aberta para esse recurso no GitHub da Ansible: https://github.com/ansible/ansible/pull/8651ATUALIZAÇÃO: agora foi incorporado a partir de 2 de janeiro de 2015.
2. Se você deseja uma variável de ambiente permanente + sistema amplo / apenas para determinado usuário
Você deve examinar como fazer isso em sua distribuição / shell do Linux, existem vários lugares para isso. Por exemplo, no Ubuntu você define isso em arquivos como por exemplo:
~/.profile
/etc/environment
/etc/profile.d
diretórioVocê encontrará documentos do Ubuntu sobre isso aqui: https://help.ubuntu.com/community/EnvironmentVariables
Afinal, para definir a variável de ambiente em ex. Ubuntu você pode simplesmente usar o
lineinfile
módulo do Ansible e adicionar a linha desejada a determinado arquivo. Consulte a documentação do seu sistema operacional para saber onde adicioná-lo para torná-lo permanente.fonte
Não tenho reputação suficiente para comentar e, portanto, estou adicionando uma nova resposta.
A resposta de Gasek é bastante correta. Só uma coisa: se você estiver atualizando o
.bash_profile
arquivo ou o/etc/profile
, essas alterações só serão refletidas depois de fazer um novo login. Caso queira definir a variável env e depois usá-la em tarefas subsequentes no mesmo manual, considere adicionar essas variáveis de ambiente ao.bashrc
arquivo.Acho que a razão por trás disso é o login e os shells de não login.
O Ansible, ao executar diferentes tarefas, lê os parâmetros de um
.bashrc
arquivo em vez do.bash_profile
ou do/etc/profile
.Por exemplo, se eu atualizei minha variável de caminho para incluir o binário personalizado no
.bash_profile
arquivo do respectivo usuário e, em seguida, fiz uma fonte do arquivo. As próximas tarefas subsequentes não reconhecerão meu comando. No entanto, se você atualizar o.bashrc
arquivo, o comando funcionará.Isso funcionaria , mas se eu tivesse feito isso usando arquivos de perfil
mysql -e "show databases"
, teria ocorrido um erro.Este não irá funcionar , se nós temos todas estas tarefas na mesma cartilha.
fonte
source file
fazer. file
Esta é uma tarefa local rápida para definir chaves / valores permanentemente
/etc/environment
(que abrange todo o sistema, todos os usuários):e os vars por isso:
e, sim, se você entrar e sair do sistema,
env
mostra as novas variáveis de ambiente.fonte
dest
foi substituído compath
, mas de acordo com os documentos ainda deve funcionar. Caso contrário, mude parapath
.Para definir variáveis de ambiente de forma persistente, você pode usar uma das funções existentes no Ansible Galaxy. Eu recomendo usar o ambiente.reinterativo .
Usando ansible-galaxy:
Usando requirements.yml:
Então, em seu manual:
fonte
Essa é a melhor opção. Como disse Michal Gasek (primeira resposta), uma vez que a solicitação de pull foi mesclada ( https://github.com/ansible/ansible/pull/8651 ), podemos definir variáveis de ambiente permanentes facilmente por nível de jogo.
fonte