我不相信roles
是來解決這個問題,因爲一個角色聲明被評估之前,你不能註冊變量的最佳方式。從文檔中,您只能使用ansible facts
,在您的Playbook執行之前實際得到評估。另一種意見中,when
關鍵字,就是要在role
語句只使用一次:
---
- name: Install MySQL
host: development
roles:
- {role: mysql,
mysql_db: [{name: benz}],
mysql_users: [{name: ben3, pass: foobar, priv: "*.*:ALL"}],
when: "some_ansible_fact == 'Whatever'"}
你可能已經熄滅在劇本任務,你的支票,如果你需要檢查MySQL數據庫是否存在更好。您可以使用關鍵字register
,查看是否存在數據庫:
---
- name: Install Mysql
hosts: all
user: myrootuser
sudo: True
tags: mytag
vars:
mysql_users: [{name: ben3, pass: foobar, priv: "*.*:ALL"}]
mysql_db: mydatabasename
tasks:
- name: Install the mysql package
apt: pkg=mysql-server state=present
- name: Find out the master log file name and position
command: >
/usr/bin/mysql -umysql_user -pmysql_password
-e "SHOW DATABASES;"
register: databases
- name: Create users if they don't exist
command: >
# or run whatever you need to run here to create users
/usr/bin/mysql -umysql_user -pmysql_password
-e "CREATE USER {{ mysql_users[0]['name'] }};"
when: databases.stdout.find('{{ mysql_db }}') != -1
希望這有助於。
再次Rico。我想過要走這條路。但是我在一些關於Ansible Galaxy的最流行的劇本中發現的角色變量使我困惑不解。所以大多數(所有?)角色變量都可以像普通變量一樣過去? – StenW
我的意思是說「再次感謝@Rico」 – StenW
@StenW是的,他們是常規變量。但請記住,在變量AFAIK之前評估角色。 – Rico