如何在同一个 ansible 剧本中最好地组织安装和删除?
How to do best organization of install and delete in the same ansible playbook?
我试图弄清楚我必须如何构建一个 ansible 剧本,我可以在其中执行一些操作并撤消它们(我可以安装或删除相同的包;放置文件或删除此文件)。
如果我创建两个 ansible 剧本:delete.yml 和 install.yml。可能有类似的问题:
我添加到安装someting,但不更改删除
示例:
install.yml:
---
- name: Add x2go repository
apt_repository: repo='deb http://ppa.launchpad.net/x2go/stable/ubuntu precise main' state=present
apt_repository: repo='deb-src http://ppa.launchpad.net/x2go/stable/ubuntu precise main' state=present
when: ansible_os_family == "Debian"
tags:
- remote-access-x2go
- name: Install x2go application
apt: name=x2goserver update_cache=yes state=present
apt: name=x2goserver-xsession update_cache=no state=present
when: ansible_os_family == "Debian"
tags:
- remote-access-x2go
delete.yml:
---
- name: Add x2go repository
apt_repository: repo='deb http://ppa.launchpad.net/x2go/stable/ubuntu precise main' state=absent
apt_repository: repo='deb-src http://ppa.launchpad.net/x2go/stable/ubuntu precise main' state=present
when: ansible_os_family == "Debian"
tags:
- remote-access-x2go
- name: Install x2go application
apt: name=x2goserver update_cache=yes state=absent
apt: name=x2goserver-xsession update_cache=no state=absent
when: ansible_os_family == "Debian"
tags:
- remote-access-x2go
我在某些情况下使用的一种方法是简单地列出要安装的软件包和要删除的软件包列表,然后遍历每个列表。我不仅将这种基本方法用于包,还用于其他事物,如用户、组等。例如,我有一个 "packages" 角色,其中包含以下文件:
vars/main.yml:
---
installed_system_packages:
- telnet
- screen
- postfix
latest_system_packages:
- glibc
removed_packages:
- sendmail
tasks/main.yml:
---
- name: Install system packages (latest)
yum: pkg={{ item }} state=latest
with_items: latest_system_packages
- name: Install system packages
action: yum pkg={{ item }} state=installed
with_items: installed_system_packages
- name: Remove unwanted packages
action: yum pkg={{ item }} state=removed
with_items: removed_packages
这样,如果我决定不再需要安装像 telnet 这样的软件包,我可以将它从 installed_system_packages
移动到 removed_packages
。或者,如果我想确保我是 运行 最新版本的屏幕,我只需将其移至 latest_system_packages
列表即可。然后只需重新 运行 应用更改的角色即可。
这是一个非常有趣的想法。我个人从未尝试过 'undoing' 工作流程,但我可以看到这个想法的好处,并且想在某个时候使用它。这是我会做的。
在我的 ansible-role/defaults/main.yml
中,我会定义一个变量 flag
# defaults file for ansible-role
flag_undo: false
在我的 ansible-role/tasks/main.yml
我会
- name: task foo bar
command: falana dhimaka
- name: undoing task foo bar
command: undo falana dhimaka
when: flag_undo=true
所以默认情况下我们的标志总是假的。因此,在安装东西时,我会使用下面的第一个命令 运行 我的游戏。要卸载我会使用第二个命令。
ansible-playbook foo-play.yml
ansible-playbook foo-play.yml --extra-vars "flag_undo=true"
我试图弄清楚我必须如何构建一个 ansible 剧本,我可以在其中执行一些操作并撤消它们(我可以安装或删除相同的包;放置文件或删除此文件)。
如果我创建两个 ansible 剧本:delete.yml 和 install.yml。可能有类似的问题: 我添加到安装someting,但不更改删除
示例:
install.yml:
---
- name: Add x2go repository
apt_repository: repo='deb http://ppa.launchpad.net/x2go/stable/ubuntu precise main' state=present
apt_repository: repo='deb-src http://ppa.launchpad.net/x2go/stable/ubuntu precise main' state=present
when: ansible_os_family == "Debian"
tags:
- remote-access-x2go
- name: Install x2go application
apt: name=x2goserver update_cache=yes state=present
apt: name=x2goserver-xsession update_cache=no state=present
when: ansible_os_family == "Debian"
tags:
- remote-access-x2go
delete.yml:
---
- name: Add x2go repository
apt_repository: repo='deb http://ppa.launchpad.net/x2go/stable/ubuntu precise main' state=absent
apt_repository: repo='deb-src http://ppa.launchpad.net/x2go/stable/ubuntu precise main' state=present
when: ansible_os_family == "Debian"
tags:
- remote-access-x2go
- name: Install x2go application
apt: name=x2goserver update_cache=yes state=absent
apt: name=x2goserver-xsession update_cache=no state=absent
when: ansible_os_family == "Debian"
tags:
- remote-access-x2go
我在某些情况下使用的一种方法是简单地列出要安装的软件包和要删除的软件包列表,然后遍历每个列表。我不仅将这种基本方法用于包,还用于其他事物,如用户、组等。例如,我有一个 "packages" 角色,其中包含以下文件:
vars/main.yml:
---
installed_system_packages:
- telnet
- screen
- postfix
latest_system_packages:
- glibc
removed_packages:
- sendmail
tasks/main.yml:
---
- name: Install system packages (latest)
yum: pkg={{ item }} state=latest
with_items: latest_system_packages
- name: Install system packages
action: yum pkg={{ item }} state=installed
with_items: installed_system_packages
- name: Remove unwanted packages
action: yum pkg={{ item }} state=removed
with_items: removed_packages
这样,如果我决定不再需要安装像 telnet 这样的软件包,我可以将它从 installed_system_packages
移动到 removed_packages
。或者,如果我想确保我是 运行 最新版本的屏幕,我只需将其移至 latest_system_packages
列表即可。然后只需重新 运行 应用更改的角色即可。
这是一个非常有趣的想法。我个人从未尝试过 'undoing' 工作流程,但我可以看到这个想法的好处,并且想在某个时候使用它。这是我会做的。
在我的
ansible-role/defaults/main.yml
中,我会定义一个变量 flag# defaults file for ansible-role flag_undo: false
在我的
ansible-role/tasks/main.yml
我会- name: task foo bar command: falana dhimaka - name: undoing task foo bar command: undo falana dhimaka when: flag_undo=true
所以默认情况下我们的标志总是假的。因此,在安装东西时,我会使用下面的第一个命令 运行 我的游戏。要卸载我会使用第二个命令。
ansible-playbook foo-play.yml ansible-playbook foo-play.yml --extra-vars "flag_undo=true"