我用ansible编写了剧本任务。我可以在linux端上运行剧本。
- name: Set paths for go
blockinfile:
path: $HOME/.profile
backup: yes
state: present
block: |
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export FABRIC_CFG_PATH=$HOME/.fabdep/config
- name: Load Env variables
shell: source $HOME/.profile
args:
executable: /bin/bash
register: source_result
become: yes
就像在Linux中一样,主目录中有.profile
,但是在Mac中,macOS中没有.profile
和.bash_profile
。
因此,我想检查os是否为Mac,则路径应为$HOME/.bash_profile
,如果os是基于linux的路径,则应查找$HOME/.profile
。
我尝试添加
when: ansible_distribution == 'Ubuntu' and ansible_distribution_release == 'precise'
但是它首先不起作用,而且它是长度过程。我想在变量中获取基于os的路径并使用它。
谢谢
答案 0 :(得分:2)
我以此方式找到了解决方案。我在yaml文件顶部添加了gather_facts:true
,它开始起作用。我开始将变量用作ansible_distribution
。
谢谢
答案 1 :(得分:0)
一个选项是从文件中 include_vars 。参见下面的示例
- name: "OS specific vars (will overwrite /vars/main.yml)"
include_vars: "{{ item }}"
with_first_found:
- files:
- "{{ ansible_distribution }}-{{ ansible_distribution_release }}.yml"
- "{{ ansible_distribution }}.yml"
- "{{ ansible_os_family }}.yml"
- "default.yml"
paths: "{{ playbook_dir }}/vars"
skip: true
- name: Set paths for go
blockinfile:
path: "$HOME/{{ my_profile_file }}"
[...]
在playbooks目录中,创建目录 vars 并创建文件
# cat var/Ubuntu.yml
my_profile_file: ".profile"
# cat var/macOS.yml
my_profile_file: ".bash_profile"
答案 2 :(得分:0)
如果您托管的主机具有不同的操作系统,请按清单中的操作系统对主机进行分组:
Router.push