2016-04-02 23 views
2

Ich habe eine Amazon Konsole mit mehreren laufenden Instanzen. Alle Instanzen haben TagsAnsible AWS EC2 Tags

zum Beispiel: - tag Name: jenkins - tag Name: Nginx - tag Name: Artifactory

Ich möchte ein ansible Textbuch gegen den Gastgeber laufen, die als Nginx markiert.

Ich verwende dynamisches Inventar, aber wie beschränke ich, wo das Playbook ausgeführt wird?

Mein Textbuch sieht wie folgt aus:

- name: Provision an EC2 node 
    hosts: local 
    connection: local 
    gather_facts: False 
    vars: 
     instance_type: t2.micro 
     security_group: somegroup 
     #image: ami-a73264ce 
     image: ami-9abea4fb 
     region: us-west-2 
     keypair: ansible_ec2 
    tasks: 
     - name: Step 1 Create a new AWS EC2 Ubuntu Instance 
     local_action: ec2 instance_tags="Name=nginx" group={{ security_group }} instance_type={{ instance_type}} image={{ image }} wait=true region={{ region }} keypair={{ keypair }} 
     register: ec2 
     - name: Step 2 Add new instance to local host group 
     local_action: lineinfile dest=hosts regexp="{{ item.public_dns_name }}" insertafter="[launched]" line="{{ item.public_dns_name }} ansible_ssh_private_key_file=~/.ssh/{{ keypair }}.pem" 
     with_items: ec2.instances 
     - name: Step 3 Wait for SSH to come up delay 180 sec timeout 600 sec 
     local_action: wait_for host={{ item.public_dns_name }} port=22 delay=180 timeout=600 state=started 
     with_items: ec2.instances 

    - name: Step 5 Install nginx steps 
    hosts: launched 
    sudo: yes 
    remote_user: ubuntu 
    gather_facts: True 
    roles: 
     - motd 
     - javaubuntu 
     - apt-get 
     - nginx 

Antwort

2

Versuchen mit:

Rollen/create-instance/defaults/main.yml

quantity_instance: 1 
key_pem: "ansible_ec2" 
instance_type: "t2.micro" 
image_base: "ami-9abea4fb" 
sec_group_id: "somegroup" 
tag_Name: "Nginx" 
tag_Service: "reverseproxy" 
aws_region: "us-west-2" 
aws_subnet: "somesubnet" 
root_size: "20" 

--- 
- hosts: 127.0.0.1 
    connection: local 
    gather_facts: False 
    tasks: 
    - name: Adding Vars 
     include_vars: roles/create-instance/defaults/main.yml 

    - name: run instance 
     ec2: 
     key_name: "{{ key_pem }}" 
     instance_type: "{{ instance_type }}" 
     image: "{{ image_base }}" 
     wait: yes 
     group_id: "{{ sec_group_id }}" 
     wait_timeout: 500 
     count: "{{ quantity_instance }}" 
     instance_tags: 
      Name: "{{ tag_Name }}" 
      Service: "{{ tag_Service }}" 
     vpc_subnet_id: "{{ aws_subnet }}" 
     region: "{{ aws_region }}" 
     volumes: 
      - device_name: /dev/xvda 
      volume_size: "{{ root_size }}" 
      delete_on_termination: true 
     assign_public_ip: yes 
     register: ec2 

    - name: Add new instance to host group 
     add_host: hostname={{ item.public_ip }} groupname=launched 
     with_items: ec2.instances 

    - name: Wait for SSH to come up 
     wait_for: host={{ item.public_ip }} port=22 delay=60 timeout=320 state=started 
     with_items: ec2.instances 

- hosts: launched 
    vars: 
    ansible_ssh_private_key_file: ~/.ssh/ansible_ec2.pem 
    gather_facts: true 
    user: ubuntu 
    become: yes 
    become_method: sudo 
    become_user: root 
    roles: 
    - motd 
    - javaubuntu 
    - apt-get 
    - nginx 

Um zu vermeiden, als Variable ansible_ssh_private_key_file hinzu: ~/.ssh/ansible_ec2.pem, verwenden Sie die Datei .ssh/config und fügen Sie folgendes hinzu:

IdentityFile ~/.ssh/ansible_ec2.pem 

Erinnern Sie sich an die Konfigurationsdatei brauchen chmod 600.

Wenn nicht die Instanzen erneut erstellen möchten.

Einführung andere Textbuch wie folgt aus:

- hosts: tag_Name_Nginx 
    vars: 
    ansible_ssh_private_key_file: ~/.ssh/ansible_ec2.pem 
    gather_facts: true 
    user: ubuntu 
    become: yes 
    become_method: sudo 
    become_user: root 
    roles: 
    - motd 
    - javaubuntu 
    - apt-get 
    - nginx 

und stellt fest, wie wir die spezifischen tag_Name_Nginx nennen.

+0

das letzte Textbuch angeben deklarieren Sie eine Variable ansible_ssh_private_key_file aber wo verwenden Sie die Variable? und können Sie mir mehr über die Identitätsdatei erzählen? Ich verstehe das nicht. –

+0

Diese Variable wird verwendet, um eine Verbindung zu den Instanzen herzustellen, aber die beste Methode besteht darin, eine SSH-Konfigurationsdatei zu erstellen. vim .ssh/config, hier fügen Sie diese Zeile "IdentityFile ~/.ssh/ansible_ec2.pem" hinzu, dann können Sie auf Server ohne Passwort zugreifen. –

+0

schön! Hast du ein Beispiel in Form eines Playbooks? Ich versuche das zu automatisieren. –

2

Alle Tags werden Gruppen in dynamischem Inventar, so können Sie den Tag in den "hosts" Parameter

- name: Provision an EC2 node 
    hosts: local 
    connection: local 
    gather_facts: False 
    vars: 
     instance_type: t2.micro 
     security_group: somegroup 
     #image: ami-a73264ce 
     image: ami-9abea4fb 
     region: us-west-2 
     keypair: ansible_ec2 
    tasks: 
    - name: Step 1 Create a new AWS EC2 Ubuntu Instance 
     local_action: ec2 instance_tags="Name=nginx" group={{ security_group }} instance_type={{ instance_type}} image={{ image }} wait=true region={{ region }} keypair={{ keypair }} 
     register: ec2 
    - name: Step 2 Add new instance to local host group 
     local_action: lineinfile dest=hosts regexp="{{ item.public_dns_name }}" insertafter="[launched]" line="{{ item.public_dns_name }} ansible_ssh_private_key_file=~/.ssh/{{ keypair }}.pem" 
     with_items: ec2.instances 
    - name: Step 3 Wait for SSH to come up delay 180 sec timeout 600 sec 
     local_action: wait_for host={{ item.public_dns_name }} port=22 delay=180 timeout=600 state=started 
     with_items: ec2.instances 

- name: Step 5 Install nginx steps 
    hosts: tag_Name_Nginx 
    sudo: yes 
    remote_user: ubuntu 
    gather_facts: True 
    roles: 
    - motd 
    - javaubuntu 
    - apt-get 
    - nginx 
Verwandte Themen