Tak, możesz uruchamiać polecenia na hoście Ansible. Możesz określić, że wszystkie zadania w grze będą uruchamiane na hoście Ansible, lub możesz oznaczyć poszczególne zadania do uruchomienia na hoście Ansible.
Jeśli chcesz uruchomić całą grę na hoście Ansible, określ hosts: 127.0.0.1
i connection:local
w grze, na przykład:
- 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
Aby uzyskać więcej informacji, zobacz Lokalne podręczniki w dokumentacji Ansible.
Jeśli chcesz tylko uruchomić jedno zadanie na hoście Ansible, możesz użyć, local_action
aby określić, że zadanie powinno być uruchamiane lokalnie. Na przykład:
- 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
Aby uzyskać więcej informacji, zobacz Delegowanie w dokumentacji Ansible.
Edycja: Możesz uniknąć konieczności wpisywania connection: local
swojej gry, dodając ją do swojego ekwipunku:
localhost ansible_connection=local
(W tym przypadku użyłbyś „localhost” zamiast „127.0.0.1” w odniesieniu do odtwarzania).
Edycja: W nowszych wersjach ansible nie musisz już dodawać powyższej linii do swojego ekwipunku, ansible zakłada, że już tam jest.
sudo: no
w scenariuszu przekazaniaansible-playbook -K playbook.yml
gdzie -K dla rootaZnalazłem kilka innych sposobów pisania, które są nieco bardziej czytelne IMHO.
LUB
źródło
shell
modułu.Chciałbym się podzielić tym, że Ansible można uruchomić na localhost za pośrednictwem powłoki:
ansible all -i "localhost," -c local -m shell -a 'echo hello world'
Może to być pomocne w przypadku prostych zadań lub praktycznej nauki Ansible.
Przykład kodu pochodzi z tego dobrego artykułu:
Uruchamianie podręcznika Ansible w localhost
źródło
Możesz użyć
delegate_to
do uruchomienia poleceń na hoście Ansible (admin admin), z którego uruchamiasz grę Ansible. Na przykład:Usuń plik, jeśli już istnieje na hoście Ansible:
Utwórz nowy plik na hoście Ansible:
źródło
become
jest to prawda dla zadania, będzie narzekać na sudo i takie tam. Może się to zdarzyć bezpośrednio w zadaniu lub zostać odziedziczone w innym miejscu.Rozwijając odpowiedź @gordon, oto przykład czytelnej składni i przekazywania argumentów za pomocą powłoki / modułu poleceń (różnią się one od modułu git tym, że są wymagane, ale swobodne argumenty, jak zauważył @ander)
źródło
Z dokumentacji Ansible :
Delegowanie Nie jest to tak naprawdę specyfikacja krocząca, ale często pojawia się w takich przypadkach.
Jeśli chcesz wykonać zadanie na jednym hoście w odniesieniu do innych hostów, użyj słowa kluczowego „delegate_to” w zadaniu. Jest to idealne rozwiązanie do umieszczania węzłów w puli z równoważeniem obciążenia lub usuwania ich. Jest to również bardzo przydatne do kontrolowania okien awarii. Należy pamiętać, że delegowanie wszystkich zadań, debugowanie, dodawanie hosta, dołączanie itp. Nie ma sensu, zawsze wykonuje się na kontrolerze. Dobrym pomysłem jest również użycie tego słowa kluczowego „serial” do kontrolowania liczby hostów wykonujących się jednocześnie:
Te polecenia będą działać na 127.0.0.1, czyli na maszynie z Ansible. Istnieje również skrócona składnia, której można używać dla poszczególnych zadań: „działanie lokalne”. Oto ten sam poradnik, jak powyżej, ale przy użyciu skróconej składni do delegowania do 127.0.0.1:
Częstym wzorcem jest użycie akcji lokalnej do wywołania „rsync” w celu rekurencyjnego kopiowania plików na zarządzane serwery. Oto przykład:
Zauważ, że musisz mieć klucze SSH bez hasła lub agenta ssh skonfigurowanego do tego, aby działało, w przeciwnym razie rsync będzie musiał poprosić o hasło.
źródło
Domyślnym modułem jest moduł poleceń, dlatego
command
słowo kluczowe nie jest wymagane.Jeśli chcesz wydać dowolne polecenie z podwyższonymi uprawnieniami, użyj
-b
na końcu tego samego polecenia.źródło
możesz spróbować w ten sposób
źródło