Ansible AWS EC2标签

时间:2016-04-02 19:51:07

标签: amazon-ec2 tags ansible

我有一个运行多个实例的亚马逊控制台。所有实例都有标签

例如:   - 标签名称:詹金斯   - 标签名称:Nginx   - 标签名称:Artifactory

我想针对标记为Nginx的主机运行Ansible playbook。

我使用动态广告资源,但如何限制游戏手册的运行位置?

我的剧本看起来像这样:

  - 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

2 个答案:

答案 0 :(得分:2)

尝试:

角色/创建实例/默认/ main.yml

const

要避免添加为变量ansible_ssh_private_key_file:〜/ .ssh / ansible_ec2.pem,请使用.ssh / config文件并添加以下内容:

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

请记住配置文件需要chmod 600。

如果不想再次创建实例。

启动这样的其他剧本:

IdentityFile ~/.ssh/ansible_ec2.pem 

并注意我们如何调用特定的 tag_Name_Nginx

答案 1 :(得分:2)

所有代码都会成为动态广告资源中的分组,因此您可以在" hosts"中指定代码。参数

- 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