#ansible
#ansible
Вопрос:
Я запускаю ansible-playbook, настроенный на предоставление ec2 и настройку компьютера. Я установил локальное соединение для playbook, потому что до запуска скрипта не нужно управлять машиной. После подготовки я предполагал создать каталог на удаленном сервере. Поскольку playbook запускается при локальном подключении, я установил значение delete_to: {{ remote_host }}, поэтому это создание каталога выполняется на удаленном хосте, но оно все равно создает каталог на управляющем компьютере.
- name: provision instance for Apache
hosts: localhost
connection: local
remote_user: ubuntu
gather_facts: false
vars_files:
- vars/env.yml
vars:
allow_world_readable_tmpfiles: true
key_name: ansible-test
region: us-east-2
image: ami-0e82959d4ed12de3f # Ubuntu 18.04
id: "practice-akash-ajay"
sec_group: "{{ id }}-sec"
remote_host: ansible-test
remaining_days: 20
acme_directory: https://acme-staging-v02.api.letsencrypt.org/directory
# acme_directory: https://acme-v02.api.letsencrypt.org/directory
cert_name: "{{ app_slug }}.{{ app_domain}}"
intermediate_path: /etc/pki/letsencrypt/intermediate.pem
cert:
common_name: "{{ app_slug }}.{{ app_domain}}"
organization_name: PearlThoughts
email_address: "{{ letsencrypt_email }}"
subject_alt_name:
- "DNS:{{ app_slug }}.{{ app_domain}}"
roles:
- aws
- name: Create certificate storage directory
file:
dest: "{{item.path}}"
mode: 0750
state: directory
delegate_to: {{ remote_host }}
with_items:
- path: ~/lets-seng-test
Комментарии:
1. Параметр task
delegate_to
отсутствуетdelete_to
, но я не вижу ни одного из них в вашем playbook / task.2. Спасибо, я проверил свои playbook, для него установлено значение delegate_to. Я исправил опечатку как в названии, так и в описании, результаты все те же. Есть идеи?
Ответ №1:
Когда вы connection
явно устанавливаете воспроизведение, оно будет использоваться для всех задач в этом воспроизведении. Так что не делайте этого. Ansible по умолчанию будет использовать local
соединение для localhost
, если вы явно не изменили его в своем инвентаре (и опять же, не делайте этого).
Если вы удалите connection
настройку в своей игре, delegate_to
это может работать так, как вы ожидаете … но я не думаю, что вы этого хотите.
Если ваш playbook предоставляет для вас новый хост, способ настроить таргетинг на этот хост с помощью Ansible — это создать новую игру с этим хостом (или его соответствующей группой), указанную в цели hosts:
для игры. Концептуально вы хотите:
- host: localhost
tasks:
- name: provisiong an AWS instance
aws_ec2: [...]
register: hostinfo
- add_host:
name: myhost
ansible_host: "{{ hostinfo... }}"
- hosts: myhost
tasks:
- name: do something on the new host
command: uptime
Вероятно, вам нужна некоторая логика между подготовкой хоста и выполнением задач против него, чтобы убедиться, что он готов и готов обслуживать запросы.
Вместо использования add_host
модуля лучшим решением часто является использование соответствующего плагина инвентаризации.
Комментарии:
1. Я становлюсь ближе. Я упомянул host для localhost в playbook. yml, следовательно, все задачи были ограничены localhost. Изменение на
all
появляется для выбора узла delegate_to, но он по-прежнему выбирает управляющую машину. Я настроил ansible-test в своем каталоге ~/.ssh, а также добавил его в инвентарь, поэтому понятия не имею. Наличие отдельных хостов выглядит чистым, но я должен смешивать как локальные, так и удаленные действия, поэтому предпочитаю delegate_to . Какова цель delegate_to?2. Это цель
delegate_to
, да. Если вы хотите обновить свой вопрос, включив в него конкретные задачи, которые вы пытаетесь выполнить, мы могли бы предоставить вам лучший ответ.3. Я просто пытаюсь создать каталог на удаленном хосте, но он продолжает создаваться на управляющем компьютере (мой Mac). Пожалуйста, проверьте задачу в вопросе
4. Если мы установим connection: local , ожидается, что все хосты будут иметь 127.0.0.1. Мне пришлось удалить его, чтобы заставить его работать. Я планирую упоминать delegate_to во всех задачах, как локальных, так и удаленных, пока не найду решение clouddocs.f5.com/products/orchestration/ansible/devel/usage /…
5. Удаление connection: local заставляет все работать на удаленном хосте. Мне нужно, чтобы 90% задач выполнялись локально, но немногие из них выполнялись на удаленном хосте. Есть ли способ запускать все задачи локально и выборочно выполнять задачи на удаленном хосте?