我有一個劇本,我希望只運行當指定了預期的系統組時。雖然我通過運行Ansible劇本時需要組選項
ansible-playbook ./playbooks/setup.yml -l staging
我能夠指定一組(本例中是「分期」)有跡象表明,都會運行,如果-l staging
被拆除其他羣體。我意識到我可以爲- hosts: "*"
被更改爲相應的組的每個組創建另一個劇本,但其餘所有劇本都是相同的。有沒有辦法做到這一點沒有複製/複製pasta'ing一切?
有關其他方面這裏是我的當前設置路徑結構
.
├── ansible.cfg
├── inventory
│ ├── group_vars
│ ├── host_vars
│ └── hosts
├── playbooks
│ └── setup.yml
└── roles
├── common
│ ├── README.md
│ ├── defaults
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ ├── tasks
│ │ ├── main.yml
│ │ └── redhat.yml
│ └── templates
├── ...
│
└── ...
,這是的setup.yml
內容
---
- hosts: "*"
vars_prompt:
- name: ...
prompt: "..."
default: false
private: no
- name: "bar_a"
prompt: "..."
default: false
private: no
...
roles:
- { role: foobar, foo: 'bar', foo_a: bar_a}
,這裏的粗線條是我ansible.cfg
文件的內容
[defaults]
inventory = inventory
roles_path = roles:$PROJECT_HOME/roles
forks = 10
timeout = 15
host_key_checking = False
#log_path=./log/ansible.log
retry_files_enabled = False
callback_whitelist = profile_tasks
transport = smart
gathering = smart
fact_caching = jsonfile
fact_caching_connection = ./.factcache
fact_caching_timeout = 86400
[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -o ForwardAgent=yes
pipelining = true
對於這種情況,你應該有不同的清單,並用'-i staging'執行劇本。 –
@KonstantinSuvorov感謝您採取正確的行動方式 - 您是否介意以答案的形式提供示例。我試圖用我當前的設置創建單獨的清單,並按照您提到的方式指定,但是我得到了[警告]:找不到主機文件:staging' - 我在上面添加了額外的上下文重要。 – Marc
你說你想讓劇本只在指定特定組時運行,然後在那之後你說「如果刪除了-l分段,還有其他組都會運行」。這表明如果忽略-l GROUP_NAME,劇本的其他部分將運行。 – Petro026