# Ansible Master/Client Setup

##### <span style="color: rgb(53, 152, 219);">Настройка ansible.cfg </span>

**Отключаем проверку ключей хостов и задаём базовые параметры:**

```ruby
sudo tee /etc/ansible/ansible.cfg > /dev/null <<EOF
[defaults]
host_key_checking = False
inventory = /etc/ansible/hosts
forks = 10
timeout = 30
EOF
```

<p class="callout info">Вместо глобального файла можно использовать локальный ./ansible.cfg в каталоге проекта  
или переменную окружения ANSIBLE\_HOST\_KEY\_CHECKING=False.</p>

##### <span style="color: rgb(53, 152, 219);">Настройка inventory</span>

<span style="color: rgb(22, 145, 121);">[**+Manual**](https://docs.ansible.com/projects/ansible/latest/inventory_guide/intro_inventory.html#assigning-a-variable-to-one-machine-host-variables)</span>

**Linux-серверы (SSH, ключи)**

```ruby
sudo tee -a /etc/ansible/hosts > /dev/null <<EOF
[unix_servers]
Ubuntu1 ansible_host=192.168.1.10 ansible_user=ubuntu ansible_ssh_private_key_file=/home/ec2-user/.ssh/aws.note_private.pem
CentOS1 ansible_host=192.168.1.11 ansible_user=centos ansible_ssh_private_key_file=/home/ec2-user/.ssh/aws.note_private.pem
EOF
```

**Windows-серверы (WinRM, HTTPS)**

```ruby
sudo tee -a /etc/ansible/hosts > /dev/null <<EOF
[win_servers]
WinSrv2012R2 ansible_host=192.168.1.20
WinSrv2016  ansible_host=192.168.1.21

[win_servers:vars]
ansible_user = Administrator
ansible_password = YourStrongPassword
ansible_port = 5986
ansible_connection = winrm
ansible_winrm_server_cert_validation = ignore
ansible_winrm_transport = ntlm   # или kerberos для домена
EOF
```

<p class="callout warning">Используйте групповые переменные в отдельном файле group\_vars/win\_servers.yml  
с шифрованием (ansible-vault), а не храните пароли открыто в hosts.</p>

**Установка пакета pywinrm**

```ruby
pip3 install "pywinrm>=0.3.0"
```

##### <span style="color: rgb(53, 152, 219);">Настройка Ansible Clients</span>

**Требования к Linux клиенту:**

- Учётная запись с правами на выполнение команд (желательно с `sudo` без пароля).
- Открытый SSH-порт 22.
- SSH-ключ добавлен в `~/.ssh/authorized_keys`.

**Требования к Windows клиенту:**

- Учётная запись администратора.
- PowerShell 3.0 или выше.
- WinRM-порт 5986 (HTTPS) открыт в брандмауэре.

**Настройка WinRM на Windows-клиенте:** <span style="color: rgb(22, 145, 121);">[**+Manual**](https://docs.ansible.com/projects/ansible/latest/os_guide/windows_winrm.html#winrm-setup)</span>

```ruby
# Автоматический способ (рекомендуется для тестов)
Invoke-Expression (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1')
```

##### <span style="color: rgb(53, 152, 219);">Проверка подключения</span>

**Linux:**

```ruby
ansible unix_servers -m ping
```

**Windows:**

```ruby
ansible win_servers -m win_ping
```