Ansible
根據作業系統複製不同的配置文件
我想根據使用 Ansible 的作業系統版本分發不同的配置文件。
我想將作業系統版本與 ansible 事實ansible_distribution區分開來,這樣我就不必手動分配作業系統版本。
我遇到的問題是我不知道在哪裡指定要用於特定作業系統版本的配置文件版本。
我想在劇本中分配這個變數,而不是在一些額外的變數文件中,因為它絕對只在這個劇本中使用。
我想我想要這樣的東西:
- ansible_distribution == "Debian" - vars: vimrc_file = "vimrc.DEBIAN" - ansible_distribution == "Ubuntu" - vars: vimrc_file = "vimrc.UBUNTU"
但我不確定 Ansible 是否可以那樣工作(或者如果你應該那樣使用它是否可以)
我目前使用以下內容,這顯然很糟糕,原因有很多:
--- - hosts: servers,workstations tasks: - name: Ensure vim is installed apt: name=vim state=latest - shell: echo "vimrc.DEBIAN" changed_when: false register: vimrc - name: "Copy Debian vimrc file" copy: src=/ansible/files/{{ vimrc.stdout }} dest=/etc/vim/vimrc when: ansible_distribution == "Debian" with_items: vimrc.stdout - shell: echo "vimrc.UBUNTU" changed_when: false register: vimrc - name: "Copy Ubuntu vimrc file" copy: src=/ansible/files/{{ vimrc.stdout }} dest=/etc/vim/vimrc when: ansible_distribution == "Ubuntu" with_items: vimrc.stdout ...
(我才剛剛開始使用 Ansible,我仍在試圖弄清楚它是否是我想做的正確工具,所以請原諒我對 Ansible 的可怕使用)
編輯:我剛剛意識到這是一個可怕的例子,因為我可以使用
/ansible/files/vimrc.{{ ansible_distribution }}
對於文件源。
如果文件 DESTINATION 在不同的作業系統上不同,我將如何分配正確的變數?
帶有字典列表的範例劇本:
--- - hosts: localhost connection: local vars: distribution_settings: - distribution: "MacOSX" vimrc_file: "vimrc.MACOSX" vimrc_location: "/destination/path/on/mac" - distribution: "Debian" vimrc_file: "vimrc.DEBIAN" vimrc_location: "/destination/path/on/debian" tasks: - set_fact: current_distribution_settings: "{{ distribution_settings | selectattr('distribution', 'equalto', ansible_distribution) | list }}" - debug: var: current_distribution_settings[0].vimrc_file - debug: var: current_distribution_settings[0].vimrc_location
根據自己的喜好定制。