Как создать файл локально с помощью доступных шаблонов на машине разработки

Я начинаю с ansible и ищу способ создать шаблонный проект на сервере и в локальной среде с помощью ansible playbooks.

Я хочу использовать доступные шаблоны локально для создания общих файлов. Но как я могу использовать возможности для выполнения чего-либо локально?

Я что-то читал с local_action, но, полагаю, я не понял этого правильно.

Это для веб-сервера ... но как мне воспользоваться этим и создать файлы локально?


- hosts: webservers
      remote_user: someuser
- name: create some file
    template: src=~/workspace/ansible_templates/somefile_template.j2 dest=/etc/somefile/apps-available/someproject.ini

person Jurudocs    schedule 13.07.2015    source источник


Ответы (3)


Вы можете делегировать задачи с параметром delegate_to любому хосту, который вам нравится, например:

- name: create some file
  template: src=~/workspace/ansible_templates/somefile_template.j2 dest=/etc/somefile/apps-available/someproject.ini
  delegate_to: localhost

См. Раздел Playbook Delegation в документации.

Если ваш playbook в целом должен запускаться локально и никакие внешние хосты не задействованы, вы можете просто создать группу, содержащую localhost, а затем запустить playbook для этой группы. В вашем инвентаре:

[local]
localhost   ansible_connection=local

а затем в вашей пьесе:

hosts: local
person udondan    schedule 13.07.2015
comment
Спасибо за многое ... но пытается ли ansible подключиться к моему локальному хосту по ssh? получил ошибку SSH: ssh: подключиться к узлу localhost порт 22: в соединении отказано, это необходимо? - person Jurudocs; 13.07.2015
comment
Похоже на. Я думал, что они изменили это, и вам не нужно принудительно устанавливать локальное соединение. Может у тебя Ансибл постарше? В любом случае, вы можете добавить это в свой инвентарь: localhost ansible_connection=local - или, если весь playbook должен запускаться локально, вы можете использовать его, как описано здесь: docs.ansible.com/playbooks_delegation.html#local-playbooks - person udondan; 13.07.2015

В Ansible есть директива local_action для поддержки этих сценариев, которая позволяет избежать localhost и / или ansible_connection обходных путей и описана в Делегирование docs.

Чтобы изменить исходный пример для использования local_action:

- name: create some file
    local_action: template src=~/workspace/ansible_templates/somefile_template.j2 dest=/etc/somefile/apps-available/someproject.ini

который выглядит чище.

person stacyhorton    schedule 01.11.2016
comment
fwiw, local_action: - это просто более короткий синтаксис для delegate_to: localhost - person maxschlepzig; 29.03.2020

Если вы не можете сделать / разрешить использование localhost SSH, вы можете разделить playbook на локальные действия и удаленные действия.

connection: local говорит не использовать SSH для playbook, как показано здесь: http://docs.ansible.com/ansible/playbooks_delegation.html#local-playbooks

Пример:

# myplaybook.yml

- hosts: remote_machines
  tasks:
  - debug: msg="do stuff in the remote machines"

- hosts: 127.0.0.1
  connection: local
  tasks:
  - debug: msg="ran in local ansible machine"

- hosts: remote_machines
  tasks:
  - debug: msg="do more stuff in remote machines"
person alanjds    schedule 13.01.2017
comment
Это решение следует признать правильным. Два других предложения работают локально, но по-прежнему требуют ssh. Это не имеет никакого смысла. - person Alexandr; 30.08.2018