단일 노드 아키텍처 또는 분산 아키텍처에 애플리케이션을 설정할 수 있는 호스트가 있습니다.
그래서 재고가 있어요.
[STG]
node1
[LIVE]
app_node
db_node
gateway_node
따라서 기본값이 로 설정된 변수를 single
CLI에서 로 변경할 수 있습니다 distributed
.
역할 정의가 있습니다.
- hosts:
gather_facts: no
roles:
- {role: setup, tags: ['setup', 'orchestra']}
그래서 호스트 라인이 지도 값에 따라 동적으로 나타나기를 원합니다.
- hosts: 'if single then host == STG else LIVE'
답변1
더 많은 옵션이 있습니다:
- 논리를 표현식으로 대체주인:
shell> cat pb.yml
- hosts: "{{ (map_value == 'single')|ternary('STG', 'LIVE') }}"
tasks:
- debug:
var: ansible_play_hosts
run_once: true
당신이 원하는 것을 줄
shell> ansible-playbook pb.yml -e map_value=single
PLAY [single] ********************************************************************************
TASK [debug] *********************************************************************************
ok: [node1] =>
ansible_play_hosts:
- node1
PLAY RECAP ***********************************************************************************
node1: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
shell> ansible-playbook pb.yml -e map_value=distributed
PLAY [distributed] ***************************************************************************
TASK [debug] *********************************************************************************
ok: [app_node] =>
ansible_play_hosts:
- app_node
- db_node
- gateway_node
PLAY RECAP ***********************************************************************************
app_node: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- 만들다어린이들(그룹 별칭)
shell> cat hosts
[STG]
node1
[single:children]
STG
[LIVE]
app_node
db_node
gateway_node
[distributed:children]
LIVE
그러면 스크립트는 동일한 결과를 제공합니다.
shell> cat pb.yml
- hosts: "{{ map_value }}"
tasks:
- debug:
var: ansible_play_hosts
run_once: true
인벤토리 파일을 변경할 수 없는 경우 별칭을 별도의 파일에 넣으세요. 예를 들어,
shell> tree inventory/
inventory/
├── 01-hosts
└── 02-aliases
shell> cat inventory/01-hosts
[STG]
node1
[LIVE]
app_node
db_node
gateway_node
shell> cat inventory/02-aliases
[single:children]
STG
[distributed:children]
LIVE
그러면 스크립트는 동일한 결과를 제공합니다.
shell> ansible-playbook -i inventory pb.yml -e map_value=single
...
shell> ansible-playbook -i inventory pb.yml -e map_value=distributed
...
- 인벤토리 플러그인 사용설립하다. 바라보다
shell> ansible-doc -t inventory constructed
예를 들어 재고
shell> tree inventory
inventory
├── 01-hosts
└── 02-constructed.yml
shell> cat inventory/01-hosts
[STG]
node1
[STG:vars]
map_group_value=single
[LIVE]
app_node
db_node
gateway_node
[LIVE:vars]
map_group_value=distributed
shell> cat inventory/02-constructed.yml
plugin: constructed
use_extra_vars: true
compose:
map_group: map_value
groups:
map_group: map_group == map_group_value
그런 다음 스크립트
- hosts: map_group
tasks:
- debug:
var: ansible_play_hosts
run_once: true
동일한 결과를 제공합니다
shell> ansible-playbook -i inventory pb.yml -e map_value=single
...
shell> ansible-playbook -i inventory pb.yml -e map_value=distributed
...
역할 테스트 케이스 사용을 고집한다면 역할을 생성하세요.
shell> cat roles/setup/tasks/main.yml
- debug:
var: ansible_play_hosts
run_once: true
플레이북에서 원하는 태그와 함께 사용하세요.
shell> cat pb.yml
- hosts: map_group
roles:
- role: setup