linux - mac - environment ansible task



Como definir variáveis de ambiente Linux com o Ansible (4)

Oi, eu estou tentando descobrir como definir variável de ambiente com Ansible.

algo que um simples comando de shell como este:

EXPORT LC_ALL=C

tentei como comando shell e recebi um erro ao tentar usar o módulo de ambiente e nada aconteceu.

o que estou perdendo

https://ffff65535.com


Aqui está uma rápida tarefa local para definir valores-chave em /etc/environment (que abrange todo o sistema, todos os usuários):

- name: populate /etc/environment
  lineinfile:
    dest: "/etc/environment"
    state: present
    regexp: "^{{ item.key }}"
    line: "{{ item.key }}={{ item.value}}"
  with_items: "{{ os_environment }}"

e os vars por isso:

os_environment:
  - key: DJANGO_SETTINGS_MODULE 
    value : websec.prod_settings  
  - key: DJANGO_SUPER_USER 
    value : admin

e, sim, se você fizer ssh, o env mostrará as novas variáveis ​​de ambiente.


Essa é a melhor opção. Como disse Michal Gasek (primeira resposta), desde que a solicitação de recebimento foi mesclada ( https://github.com/ansible/ansible/pull/8651 ), podemos definir variáveis ​​de ambiente permanentes facilmente por nível de reprodução.

- hosts: all
  roles:
     - php
     - nginx
  environment:
    MY_ENV_VARIABLE: whatever_value

Existem várias maneiras de fazer isso e, pela sua pergunta, não está claro o que você precisa.

1. Se você precisar que a variável de ambiente seja definida APENAS POR TAREFA, faça o seguinte:

- hosts: dev
  tasks:
    - name: Echo my_env_var
      shell: "echo $MY_ENV_VARIABLE"
      environment:
        MY_ENV_VARIABLE: whatever_value

    - name: Echo my_env_var again
      shell: "echo $MY_ENV_VARIABLE"

Observe que MY_ENV_VARIABLE está disponível APENAS para a primeira tarefa, o environment não o define permanentemente em seu sistema.

TASK: [Echo my_env_var] ******************************************************* 
changed: [192.168.111.222] => {"changed": true, "cmd": "echo $MY_ENV_VARIABLE", ... "stdout": "whatever_value"}

TASK: [Echo my_env_var again] ************************************************* 
changed: [192.168.111.222] => {"changed": true, "cmd": "echo $MY_ENV_VARIABLE", ... "stdout": ""}

Esperemos que em breve o uso do environment também seja possível no nível de reprodução , não apenas no nível de tarefa, como acima. Atualmente, há uma solicitação de recebimento aberta para esse recurso no GitHub da Ansible: https://github.com/ansible/ansible/pull/8651

ATUALIZAÇÃO: agora foi mesclado a partir de 2 de janeiro de 2015.

2. Se você deseja uma variável de ambiente permanente + todo o sistema / apenas para determinados usuários

Você deve examinar como fazer isso em sua distribuição / shell do Linux; existem vários locais para isso. Por exemplo, no Ubuntu, você define isso em arquivos como, por exemplo:

  • ~/.profile
  • /etc/environment
  • Diretório /etc/profile.d
  • ...

Você encontrará documentos do Ubuntu aqui: https://help.ubuntu.com/community/EnvironmentVariables

Afinal, para definir a variável de ambiente no ex. Ubuntu, você pode simplesmente usar o módulo lineinfile do Ansible e adicionar a linha desejada a determinado arquivo. Consulte os documentos do sistema operacional para saber onde adicioná-lo e torná-lo permanente.


Para definir persistentemente variáveis ​​de ambiente, você pode usar uma das funções existentes no Ansible Galaxy. Eu recomendo franklinkim.environment .

Usando ansible-galaxy:

$ ansible-galaxy install franklinkim.environment

Usando requirements.yml:

- src: franklinkim.environment

Em seguida, no seu manual:

- hosts: all
  sudo: yes
  roles:
    - role: franklinkim.environment
      environment_config:
        NODE_ENV: staging
        DATABASE_NAME: staging




ansible