Vraag Hoe wordt het milieu-zoekwoord in Ansible gebruikt?


ik heb een playbook om PythonBrew te installeren. Om dit te doen, moet ik de shell-omgeving aanpassen. Omdat shell-stappen in Anoniem niet persistent zijn, moet ik voorafgaan export PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc; aan het begin van elk van mijn PythonBrew gerelateerde commando's:

    - name: Install python binary
      shell: export PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc; pythonbrew install ${python.version}
        executable=/bin/bash

    - name: Switch to python version
      shell: export PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc; pythonbrew switch ${python.version}
        executable=/bin/bash

Ik zou die overtolligheid willen elimineren. Op de Ansible-discussiegroep, Ik werd doorverwezen naar environment trefwoord. Ik heb gekeken naar de voorbeelden in de documentatie en het klikt niet voor mij. Voor mij ziet het zoekwoord environment er niet veel anders uit dan een andere variabele.

Ik heb andere voorbeelden gezocht, maar heb deze alleen kunnen vinden dit zeer eenvoudige voorbeeld.

Kan iemand laten zien hoe het environment sleutelwoordfuncties in Ansible, bij voorkeur met de codesteekproef die ik hierboven heb verstrekt?


12
2017-10-23 21:14


oorsprong


antwoorden:


Ik weet niet zeker of dit bij je behoefte past, maar zo zie ik dit:

- hosts: all
  vars:
    env:
      PYTHONBREW_ROOT: "{{ pythonbrew.root }}"
  tasks:  
    - name: Install python binary
      shell: pythonbrew install {{ python.version }} executable=/bin/bash
      environment: env

    - name: Switch to python version
      shell: pythonbrew switch {{ python.version }} executable=/bin/bash
      environment: env

Het stelt eenvoudig een variabele in met de naam env en hergebruik het als omgeving in beide shell-opdrachten. Op deze manier zal uw shell-commando het pad PYTHONBREW_ROOT hebben ingesteld.


15
2017-12-13 08:25



Ik heb een zeer vergelijkbaar probleem; Ik wil graag dingen doen in een Python virtualenv (nadat het heeft gezorgd dat het natuurlijk voor mij is opgezet).

Hier is één manier waarop ik tot nu toe de omgevingscondities heb gedaan; in wezen heb ik regels aan bashrc moeten toevoegen (en optioneel verwijderen):

  tasks:
    - name: "Enable virtualenv in .bashrc"
      lineinfile: dest=.bashrc
                  line="source {{ PROJECT_HOME }}/venv/bin/activate"

    # Put tasks that rely on this environmental precondition here (?)

    - name: "Disable virtualenv in .bashrc"
      lineinfile: dest=.bashrc
                  line="source {{ PROJECT_HOME }}/venv/bin/activate"
                  state=absent

Ik weet niet of ik "Doing It Wrong" ben, maar tot ik erachter kom of iemand me komt vertellen hoe het beter moet, denk ik dat dit zal werken.


0
2017-12-13 18:59