Выполнение [домашнего задания](https://github.com/netology-code/virt-homeworks/blob/master/07-terraform-01-intro/README.md)
по теме "7.1. Инфраструктура как код".

## Q/A

### Задание 1

> #### Легенда
> 
> Через час совещание на котором менеджер расскажет о новом проекте. Начать работу над которым надо будет уже сегодня.
> На данный момент известно, что это будет сервис, который ваша компания будет предоставлять внешним заказчикам.
> Первое время, скорее всего, будет один внешний клиент, со временем внешних клиентов станет больше.
> 
> Так же по разговорам в компании есть вероятность, что техническое задание еще не четкое, что приведет к большому
> количеству небольших релизов, тестирований интеграций, откатов, доработок, то есть скучно не будет.
> 
> Вам, как девопс инженеру, будет необходимо принять решение об инструментах для организации инфраструктуры.
> На данный момент в вашей компании уже используются следующие инструменты:
> - остатки Сloud Formation,
> - некоторые образы сделаны при помощи Packer,
> - год назад начали активно использовать Terraform,
> - разработчики привыкли использовать Docker,
> - уже есть большая база Kubernetes конфигураций,
> - для автоматизации процессов используется Teamcity,
> - также есть совсем немного Ansible скриптов,
> - и ряд bash скриптов для упрощения рутинных задач.
> 
> Для этого в рамках совещания надо будет выяснить подробности о проекте, что бы в итоге определиться с инструментами:
> 
> 1. Какой тип инфраструктуры будем использовать для этого проекта: изменяемый или не изменяемый?
> 1. Будет ли центральный сервер для управления инфраструктурой?
> 1. Будут ли агенты на серверах?
> 1. Будут ли использованы средства для управления конфигурацией или инициализации ресурсов?
> 
> В связи с тем, что проект стартует уже сегодня, в рамках совещания надо будет определиться со всеми этими вопросами.
> 
> #### В результате задачи необходимо
> 
> 1. Ответить на четыре вопроса представленных в разделе "Легенда".
> 1. Какие инструменты из уже используемых вы хотели бы использовать для нового проекта?
> 1. Хотите ли рассмотреть возможность внедрения новых инструментов для этого проекта?
> 
> Если для ответа на эти вопросы недостаточно информации, то напишите какие моменты уточните на совещании.

* Ответить на четыре вопроса представленных в разделе "Легенда".
    1. Какой тип инфраструктуры будем использовать для этого проекта: изменяемый или не изменяемый?
       
        Для ответа на данный вопрос недостаточно данных о требованиях к новому проекту со стороны безопасности.
        Если на совещании можно это выяснить, то будет два варианта: если требования к безопасности выставляются в рамках расширенных требований по типу `PCI DSS`,
        то будет использоваться не изменяемый тип инфраструктуры, иначе - изменяемый.
    
    2. Будет ли центральный сервер для управления инфраструктурой?
    
        Так как на текущий момент в инфраструктуре компании не используются решения на базе центрального сервера 
        для управления инфраструктурой, то внедрять данное решение смысла нет. Ответ: нет.
    
    3. Будут ли агенты на серверах?
    
        Ответ вытекает из предыдущего вопроса. Если в новом проекте не используется центральный сервер управления,
        то и в использовании агентов нет необходимости. Ответ: нет.

    4. Будут ли использованы средства для управления конфигурацией или инициализации ресурсов?
        
        Да, средства будут использованы, так как планируется расширение и необходимо будет разворачивать инфраструктуру 
        для каждого нового внешнего клиента. Плюс, скорее всего, будет необходимость реплицирования
        и горизонтального расширения сервисов в рамках существующей инфраструктуры.
        

* Какие инструменты из уже используемых вы хотели бы использовать для нового проекта?

  Точно стоит использовать `terraform` как средство инициализации ресурсов в совокупности с `ansible`.
  Для стандартизации образов виртуальных машин стоит использовать `packer`.
  Так как в разработке принято использовать образы `docker`, то для построения инфраструктуры можно задуматься
  над использованием `kubernetes`.
  
  В данном случае стоит рассмотреть переход от bash-скриптов к плагинам `ansible` для автоматизации.
  Либо перенос скриптов на другой, более поддерживаемый и принятый в компании скриптовый язык программирования.

* Хотите ли рассмотреть возможность внедрения новых инструментов для этого проекта?
  
  В текущем стеке собраны все инструменты, которые представляют собой best-practice в построении инфраструктуры.
  Дополнительно, увеличение количества используемых инструментов ведёт к "распылению" знаний, а значит невозможности
  проведения более глубокой оптимизации процессов для достижения главной цели - уменьшения TTM.

### Задание 2

> Официальный сайт: https://www.terraform.io/
> 
> Установите терраформ при помощи менеджера пакетов используемого в вашей операционной системе.
> В виде результата этой задачи приложите вывод команды `terraform --version`.

```shell
terraform --version
Terraform v1.2.3
on linux_amd64
```

## Задача 3. Поддержка легаси кода.

> В какой-то момент вы обновили терраформ до новой версии, например с 0.12 до 0.13.
> А код одного из проектов настолько устарел, что не может работать с версией 0.13.
> В связи с этим необходимо сделать так, чтобы вы могли одновременно использовать последнюю версию терраформа установленную при помощи
> штатного менеджера пакетов и устаревшую версию 0.12.
> 
> В виде результата этой задачи приложите вывод `--version` двух версий терраформа доступных на вашем компьютере
> или виртуальной машине.

Для примера были взяты актуальная версия `1.2.3` и последняя доступная на официальном сайте версия из линейки `1.0.x`: `1.0.11`.
Другие версии можно собрать из [source codes](https://github.com/hashicorp/terraform).

![terraform_versions](./terraform_versions.png)
