Ansible: выполнение команд на только что созданном экземпляре EC2 - PullRequest
1 голос
/ 28 мая 2019

У меня есть конфигурация Ansible, в которой я создаю экземпляр EC2. После того, как экземпляр будет готов, я хочу отключить периодические обновления apt и дождаться завершения текущего процесса обновления. Всякий раз, когда я добавляю конфигурацию в файл yml, она выполняет команду в моей локальной системе. Что я делаю не так?

файл yml:

---
  - name: Provision an EC2 Instance
    hosts: localhost
    connection: local
    gather_facts: False
    tags: provisioning
 tasks:

      - name: Create New security group with below given name
        local_action:
          module: ec2_group
          name: "{{ security_group }}"
          description: Security Group for Newly Created EC2 Instance
          region: "{{ region }}"
          rules:
            - proto: tcp
              from_port: 22
              to_port: 22
              cidr_ip: 0.0.0.0/0
            - proto: tcp
              from_port: 80
              to_port: 80
              cidr_ip: 0.0.0.0/0
          rules_egress:
            - proto: all
              cidr_ip: 0.0.0.0/0


      - name: Launch the new t2 micro EC2 Instance
        local_action: ec2
                      group={{ security_group }}
                      instance_type={{ instance_type}}
                      image={{ image }}
                      wait=true
                      region={{ region }}
                      keypair={{ keypair }}
                      count={{count}}
        register: ec2

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

- name: Disable timers for unattended upgrade, so that none will be triggered by the `date -s` call.
  raw: systemctl disable --now {{item}}
  with_items:
    - 'apt-daily.timer'
    - 'apt-daily-upgrade.timer'

- name: Reload systemctl daemon to apply the new changes
  raw: systemctl daemon-reload

- name: Purge autoupdate
  raw: apt -y purge unattended-upgrades    

- name: Update apt cache
  raw: apt -y update

Но добавление их как raw не работает или даже добавление их в качестве команды.

1 Ответ

2 голосов
/ 28 мая 2019

Первый раздел кода, который вы опубликовали, - это подготовка нового экземпляра EC2 путем вызова API AWS из вашей локальной системы:

  - name: Provision an EC2 Instance
    hosts: localhost
    connection: local
    gather_facts: False
...
 - name: Create New security group with below given name
   local_action:
     module: ec2_group

Обратите внимание на раздел local_action, в котором указано, как выполнить действие локально.Кроме того, ваша цель - localhost.

Если вы затем хотите настроить новую систему, вы можете добавить ее в группу хостов и выполнить некоторые шаги по настройке.Например, добавьте это после шага Provision an EC2 Instance, чтобы добавить общедоступный IP-адрес нового экземпляра в группу хостов с именем ec2hosts:

   - name: Add instance public IP to host group
     add_host: hostname={{ item.public_ip }} groups=ec2hosts
     loop: "{{ ec2.instances }}"

Теперь вы можете настроить хост, настроив группу хостов:

- hosts: ec2hosts
  name: configuration play
  user: ec2-user
  gather_facts: true
  tasks:
  - name:  Disable timers for unattended upgrade, so that none will be triggered by the `date -s` call.
    raw: systemctl disable --now {{item}}
    with_items:
      - 'apt-daily.timer'
      - 'apt-daily-upgrade.timer'

  - name: Reload systemctl daemon to apply the new changes
    raw: systemctl daemon-reload

  - name: Purge autoupdate
    raw: apt -y purge unattended-upgrades    

  - name: Update apt cache
    raw: apt -y update

Подводя итог, вы сначала создаете экземпляр из локальной системы, ждете его загрузки, добавляете его IP-адрес в группу хостов, затем выполняете дополнительные шаги по настройке, выполняя ansible для этой группы хостов.Чтобы это работало, обязательно используйте пару ключей SSH, для которых закрытый ключ был добавлен в агент SSH.Кроме того, обязательно запустите экземпляр EC2 в общедоступной подсети.

См. Ansible Amazon Web Service Guide .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...