답변:
예, Ansible 호스트에서 명령을 실행할 수 있습니다. 재생의 모든 작업이 Ansible 호스트에서 실행되도록 지정하거나 Ansible 호스트에서 실행되도록 개별 작업을 표시 할 수 있습니다.
Ansible 호스트에서 전체 재생을 실행하려면 다음 hosts: 127.0.0.1
과 connection:local
같이 재생 을 지정 하십시오.
- name: a play that runs entirely on the ansible host
hosts: 127.0.0.1
connection: local
tasks:
- name: check out a git repository
git: repo=git://foosball.example.org/path/to/repo.git dest=/local/path
자세한 내용 은 Ansible 설명서에서 로컬 플레이 북 을 참조하십시오.
Ansible 호스트에서 단일 작업을 실행하려는 경우 작업을 local_action
로컬로 실행하도록 지정할 수 있습니다 . 예를 들면 다음과 같습니다.
- name: an example playbook
hosts: webservers
tasks:
- ...
- name: check out a git repository
local_action: git repo=git://foosball.example.org/path/to/repo.git dest=/local/path
자세한 내용 은 Ansible 설명서에서 위임 을 참조하십시오.
편집 : connection: local
인벤토리에 추가하여 플레이에 입력하지 않아도됩니다 .
localhost ansible_connection=local
(여기서는 "127.0.0.1"대신 "localhost"를 사용하여 재생을 나타냅니다).
편집 : 최신 버전의 ansible에서는 더 이상 위의 라인을 인벤토리에 추가 할 필요가 없습니다. ansible은 이미 있다고 가정합니다.
ansible-playbook -K playbook.yml
여기서 루트에 대한 -K
좀 더 읽기 쉬운 IMHO 인 두 가지 다른 방법을 찾았습니다.
- name: check out a git repository
local_action:
module: git
repo: git://foosball.example.org/path/to/repo.git
dest: /local/path
또는
- name: check out a git repository
local_action: git
args:
repo: git://foosball.example.org/path/to/repo.git
dest: /local/path
shell
모듈 에도 동일하게 적용 됩니다.
쉘을 통해 Ansible을 localhost에서 실행할 수 있음을 공유하고 싶습니다.
ansible all -i "localhost," -c local -m shell -a 'echo hello world'
이는 간단한 작업이나 Ansible에 대한 실습에 도움이 될 수 있습니다.
코드 예제는이 좋은 기사에서 가져 왔습니다.
delegate_to
Ansible Play를 실행중인 Ansible 호스트 (관리 호스트)에서 명령을 실행 하는 데 사용할 수 있습니다 . 예를 들면 다음과 같습니다.
Ansible 호스트에 이미 존재하는 파일을 삭제하십시오.
- name: Remove file if already exists
file:
path: /tmp/logfile.log
state: absent
mode: "u+rw,g-wx,o-rwx"
delegate_to: 127.0.0.1
Ansible 호스트에서 새 파일을 만듭니다.
- name: Create log file
file:
path: /tmp/logfile.log
state: touch
mode: "u+rw,g-wx,o-rwx"
delegate_to: 127.0.0.1
become
작업에 True 인 경우 sudo 등에 대해 불평합니다. 이는 작업에서 직접 발생하거나 다른 곳에서 상속 될 수 있습니다.
Ansible 문서에서 :
위임 이것은 실제로 롤링 업데이트에만 적용되는 것은 아니지만 이러한 경우 자주 나타납니다.
다른 호스트를 참조하여 한 호스트에서 작업을 수행하려면 작업에서 'delegate_to'키워드를 사용하십시오. 이는로드 밸런싱 풀에 노드를 배치하거나 제거하는 데 이상적입니다. 또한 중단 창을 제어하는 데 매우 유용합니다. 컨트롤러에서 모든 작업, 디버그, add_host, include 등을 항상 위임하는 것은 이치에 맞지 않습니다. 이것을 'serial'키워드와 함께 사용하여 한 번에 실행되는 호스트 수를 제어하는 것도 좋습니다.
---
- hosts: webservers
serial: 5
tasks:
- name: take out of load balancer pool
command: /usr/bin/take_out_of_pool {{ inventory_hostname }}
delegate_to: 127.0.0.1
- name: actual steps would go here
yum:
name: acme-web-stack
state: latest
- name: add back to load balancer pool
command: /usr/bin/add_back_to_pool {{ inventory_hostname }}
delegate_to: 127.0.0.1
이 명령은 Ansible을 실행하는 시스템 인 127.0.0.1에서 실행됩니다. 작업별로 사용할 수있는 간단한 구문 인 'local_action'도 있습니다. 위와 동일한 플레이 북이 있지만 127.0.0.1로 위임하기위한 속기 구문을 사용합니다.
---
# ...
tasks:
- name: take out of load balancer pool
local_action: command /usr/bin/take_out_of_pool {{ inventory_hostname }}
# ...
- name: add back to load balancer pool
local_action: command /usr/bin/add_back_to_pool {{ inventory_hostname }}
일반적인 패턴은 로컬 조치를 사용하여 'rsync'를 호출하여 파일을 관리 서버에 재귀 적으로 복사하는 것입니다. 예를 들면 다음과 같습니다.
---
# ...
tasks:
- name: recursively copy files from management server to target
local_action: command rsync -a /path/to/files {{ inventory_hostname }}:/path/to/target/
암호가없는 SSH 키 또는 ssh-agent가 구성되어 있어야 작동합니다. 그렇지 않으면 rsync에서 암호를 요구해야합니다.
이 방법으로 시도 할 수 있습니다
sudo: no
위임 시나리오 에도 필요 했습니다