2016-10-18 1 views
0

У меня есть playbook, который создает экземпляр ec2, копирует несколько файлов в экземпляр и затем запускает некоторые команды оболочки в экземпляре.Ansible: Как указать ключ ssh для одной задачи?

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

--- 
- hosts: localhost 
    connection: local 
    gather_facts: false 

    vars: 
    # CentOS 7 x86_64 Devel AtomicHost EBS HVM 20150306_01 (ami-07e6c437) 
    # for us-west-2 
    - ami: 'ami-07e6c437' 
    - key_pair: 'my-key' 

    tasks: 

    - name: Create a centos server 
     ec2: 
     region: 'us-west-2' 
     key_name: '{{ key_pair }}' 
     group: default 
     instance_type: t2.micro 
     image: '{{ ami }}' 
     wait: true 
     exact_count: 1 
     count_tag: 
      Name: my-instance 
     instance_tags: 
      Name: my-instance 
     register: ec2 

    # shows the json data for the instances created 
    - name: Show ec2 instance json data 
     debug: 
     msg: "{{ ec2['tagged_instances'] }}" 

    - name: Wait for SSH to come up 
     wait_for: host={{ ec2['tagged_instances'][0]['public_ip'] }} port=22 delay=1 timeout=480 state=started 

    - name: Accept new ssh fingerprints          
     shell: ssh-keyscan -H "{{ ec2['tagged_instances'][0]['public_ip'] }}" >> ~/.ssh/known_hosts   

    # THE TASKS I NEED HELP ON 
    - name: Copy files over to ec2 instance 
     remote_user: centos 
     copy: src={{ item }} dest=/home/centos/ mode=600 
     with_fileglob: 
     - my-files/* 
     delegate_to: "{{ ec2['tagged_instances'][0]['public_ip'] }}" 

    # THE TASKS I NEED HELP ON 
    - name: run commands 
     remote_user: centos           
     shell: "{{ item }}" 
     delegate_to: "{{ ec2['tagged_instances'][0]['public_ip'] }}" 
     with_items: 
     - "sudo yum update -y" 
     - "sudo yum install nmap ruby" 
     ignore_errors: true 
+0

Почему вы используете 'delegate_to'? Я предполагаю, что вы хотите запускать задачи в недавно запущенной машине. – helloV

+0

Да Я хочу скопировать файлы и запустить команды оболочки в моем недавно созданном экземпляре –

+0

** Почему ** вам нужно использовать другой ключ SSH? – techraf

ответ

0

Да, я согласен с @techraf. Но ответ на поставленный вами вопрос заключается в том, что вам необходимо динамически менять инвентарь для нового экземпляра, который вы предоставили, а затем запускать удаленные прослушиваемые игры на этом новом хосте. Таким образом, вы бы добавить это к концу первого спектакля:

- local_action: 
     module: add_host 
     hostname: newhost 
     ansible_host: "{{ ec2['tagged_instances'][0]['public_ip'] }}" 
     ansible_user: centos 
     ansible_ssh_private_key_file: /path/to/keyfile 

###### New play 
- name: Configure my new instance! 
    hosts: newhost 
    tasks: 
    # THE TASKS I NEED HELP ON 
    - name: Copy files over to ec2 instance 
     copy: src={{ item }} dest=/home/centos/ mode=600 
     with_fileglob: 
     - my-files/* 
    # Use the yum module here instead, much easier 
    - name: run commands 
     shell: "{{ item }}" 
     with_items: 
     - "sudo yum update -y" 
     - "sudo yum install nmap ruby" 
     ignore_errors: true 

Edit: Добавление, что вы всегда можете просто установить ключ хоста SSH с помощью:

- set_fact: ansible_ssh_private_key_file=/path/to/keyfile 

с предостережением что вышеуказанный set_fact изменит только файл приватного ключа ssh для текущего хоста (например, для localhost в вашем примере выше).