我正在尝试运行一个任务列表(这里运行气流,但它可能是真正的)需要在现有的Conda环境中执行。
我想做这些任务:
- name: activate conda environment
# does not work, just for the sake of understanding
command: source activate my_conda_env
- name: initialize the database
command: airflow initdb
- name: start the web server
command: 'airflow webserver -p {{ airflow_webserver_port }}'
- name: start the scheduler
command: airflow scheduler
当然,这不起作用,因为每个任务都是独立的,并且以下任务会忽略第一个任务中的conda environment
激活。
如果使用python virtualenv
代替conda
,我想问题会是一样的。
如何实现在Conda环境中运行的每项任务?
答案 0 :(得分:2)
您的每个命令都将在不同的过程中执行。
另一方面, source
命令仅用于将环境变量读入当前进程(及其子进程),因此它仅适用于activate conda environment
任务。
您可以尝试做的是:
- name: initialize the database
shell: source /full/path/to/conda/activate my_conda_env && airflow initdb
args:
executable: /bin/bash
- name: start the web server
shell: 'source /full/path/to/conda/activate my_conda_env && airflow webserver -p {{ airflow_webserver_port }}'
args:
executable: /bin/bash
- name: start the scheduler
shell: source /full/path/to/conda/activate my_conda_env && airflow scheduler
args:
executable: /bin/bash
之前,使用activate
检查目标计算机上which activate
的完整路径(您需要在任何环境来源之前执行此操作)。如果Conda安装在用户的空间中,则应使用相同的用户进行Ansible连接。
答案 1 :(得分:0)
正在寻找类似的东西。找到一个比多个行动更简洁的解决方案:
- name: Run commands in conda environment
shell: source activate my_conda_env && airflow {{ item }}
with_items:
- initdb
- webserver -p {{ airflow_webserver_port }}
- scheduler