Вопрос:

Как установить переменные среды Linux с Ansible

linux ansible

94513 просмотра

5 ответа

4196 Репутация автора

Привет я пытаюсь выяснить, как установить переменную среды с Ansible.

что-то, что простая команда оболочки, как это:

EXPORT LC_ALL=C

попробовал в качестве команды оболочки и получил ошибку, попытался с помощью модуля среды и ничего не произошло.

что мне не хватает

Автор: Gleeb Источник Размещён: 01.01.2015 06:38

Ответы (5)


119 плюса

4105 Репутация автора

Решение

Есть несколько способов сделать это, и из вашего вопроса не ясно, что вам нужно.

1. Если вам нужно, чтобы переменная окружения была определена ТОЛЬКО ДЛЯ ЗАДАЧИ, вы делаете это:

- 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"

Обратите внимание, что MY_ENV_VARIABLEэто доступно ТОЛЬКО для первой задачи, environmentне устанавливает ее постоянно в вашей системе.

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": ""}

Надеемся, что вскоре использование environmentстанет возможным и на уровне игры , а не только на уровне задач, как указано выше. В настоящее время на GitHub от Ansible открыт открытый запрос на эту функцию: https://github.com/ansible/ansible/pull/8651.

ОБНОВЛЕНИЕ: это теперь объединено со 2 января 2015.

2. Если вы хотите постоянную переменную среды + общесистемную / только для определенного пользователя

Вы должны посмотреть, как вы это делаете в дистрибутиве / оболочке Linux, для этого есть несколько мест. Например, в Ubuntu вы определяете это в файлах, например:

  • ~/.profile
  • /etc/environment
  • /etc/profile.d каталог
  • ...

Вы найдете документацию по Ubuntu об этом здесь: https://help.ubuntu.com/community/EnvironmentVariables

Ведь для установки переменной среды в ex. В Ubuntu вы можете просто использовать lineinfileмодуль из Ansible и добавить нужную строку в определенный файл. Обратитесь к документации по вашей ОС, чтобы узнать, где ее добавить, чтобы сделать ее постоянной.

Автор: Michal Gasek Размещён: 02.01.2015 01:38

22 плюса

417 Репутация автора

У меня не было достаточно репутации, чтобы комментировать, и поэтому я добавляю новый ответ.
Гасек ответ вполне правильный. Одно дело, если вы обновляете .bash_profileфайл или файл /etc/profile, эти изменения будут отражены только после того, как вы выполните новый вход в систему. В этом случае вы устанавливаете переменную env, а затем хотите использовать ее в последующих задачах в той же книге. Попробуйте добавить эти переменные среды в .bashrcфайл.
Я думаю, что причина этого заключается в том, что вход в систему и не вход в систему оболочек.
Возможно, при выполнении разных задач считывает параметры из .bashrcфайла вместо .bash_profileили /etc/profile.

Например, если я обновил свою переменную пути, чтобы включить пользовательский двоичный .bash_profileфайл в файл соответствующего пользователя, а затем сделал источник файла. Следующие последующие задачи не распознают мою команду. Однако, если вы обновите .bashrcфайл, команда сработает.

 - name: Adding the path in the bashrc files
   lineinfile: dest=/root/.bashrc line='export PATH=$PATH:path-to-mysql/bin' insertafter='EOF' regexp='export PATH=\$PATH:path-to-mysql/bin' state=present

-  - name: Source the bashrc file
   shell: source /root/.bashrc

 - name: Start the mysql client
   shell: mysql -e "show databases";

Это будет работать , но если бы я сделал с помощью файлов профиля. mysql -e"show databases"дал бы ошибку.

- name: Adding the path in the Profile files
   lineinfile: dest=/root/.bash_profile line='export PATH=$PATH:{{install_path}}/{{mysql_folder_name}}/bin' insertafter='EOF' regexp='export PATH=\$PATH:{{install_path}}/{{mysql_folder_name}}/bin' state=present

 - name: Source the bash_profile file
   shell: source /root/.bash_profile

 - name: Start the mysql client
   shell: mysql -e "show databases";

Это не сработает , если у нас есть все эти задачи в одной книге.

Автор: gaurav parashar Размещён: 22.06.2015 11:11

10 плюса

107085 Репутация автора

Для постоянной установки переменных среды вы можете использовать одну из существующих ролей в Ansible Galaxy. Я рекомендую franklinkim.environment .

Использование ansible-galaxy:

$ ansible-galaxy install franklinkim.environment

Используя require.yml:

- src: franklinkim.environment

Тогда в вашей пьесе:

- hosts: all
  sudo: yes
  roles:
    - role: franklinkim.environment
      environment_config:
        NODE_ENV: staging
        DATABASE_NAME: staging
Автор: Ateş Göral Размещён: 22.04.2016 05:23

4 плюса

3245 Репутация автора

Вот быстрая локальная задача для установки ключа / значений /etc/environment(для всей системы, для всех пользователей):

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

и переменные для этого:

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

и, да, если вы ssh и обратно, envпоказывает новые переменные среды.

Автор: JL Peyret Размещён: 17.08.2018 10:10

2 плюса

195 Репутация автора

Это лучший вариант. Как сказал Михал Гасек (первый ответ), поскольку запрос на объединение был объединен ( https://github.com/ansible/ansible/pull/8651 ), мы можем легко устанавливать постоянные переменные среды по уровню воспроизведения.

- hosts: all
  roles:
     - php
     - nginx
  environment:
    MY_ENV_VARIABLE: whatever_value
Автор: lauralacarra Размещён: 18.03.2019 07:34
Вопросы из категории :
32x32