ansible-fastly
 
 
Модуль Ansible для настройки сервисов в Fastly
Установка
$ ansible-galaxy install Jimdo.fastly
Документация
Опции модуля
| Название | Обязательно | Описание | По умолчанию | 
| name | да | Уникальное имя для создаваемого сервиса |  | 
| fastly_api_key | нет | Ключ API Fastly. Если не указан, используется значение переменной окружения FASTLY_API_KEY. |  | 
| activate_new_version | нет | Настройка автоматической активации вновь созданных версий | true | 
| domains | да | Список доменных имен, которые будут служить точками доступа для вашего сервиса |  | 
| backends | да | Список бэкендов для обслуживания запросов от ваших доменов |  | 
| cache_settings | нет | Список настроек кэша |  | 
| conditions | нет | Список условий |  | 
| directors | нет | Список директоров |  | 
| gzips | нет | Список настроек gzip |  | 
| headers | нет | Список заголовков для изменения для каждого запроса |  | 
| healthchecks | нет | Список проверок работоспособности для бэкендов |  | 
| request_settings | нет | Список настроек запросов |  | 
| response_objects | нет | Список объектов ответов |  | 
| settings | нет | Объект настроек |  | 
| s3s | нет | Список логгеров S3 |  | 
| syslogs | нет | Список логгеров Syslog |  | 
| vcl_snippets | нет | Список фрагментов VCL |  | 
Бэкенд
Документация Fastly
| Поле | Обязательно | Тип | По умолчанию | 
| name | да | строка |  | 
| port | нет | целое число | 80 | 
| address | да | строка |  | 
| ssl_hostname | нет | строка |  | 
| ssl_ca_cert | нет | строка |  | 
| ssl_cert_hostname | нет | строка |  | 
| shield | нет | строка |  | 
| healthcheck | нет | строка |  | 
| weight | нет | целое число | 100 | 
| connect_timeout | нет | целое число | 1000 | 
| first_byte_timeout | нет | целое число | 15000 | 
| between_bytes_timeout | нет | целое число | 10000 | 
| error_threshold | нет | целое число | 0 | 
| max_conn | нет | целое число | 200 | 
Настройки кэша
Документация Fastly
| Поле | Обязательно | Тип | По умолчанию | 
| name | да | строка |  | 
| action | нет | перечисление ('cache', 'pass', 'restart') |  | 
| cache_condition | нет | строка |  | 
| stale_ttl | нет | целое число | 0 | 
Условие
Документация Fastly
| Поле | Обязательно | Тип | По умолчанию | 
| name | да | строка |  | 
| comment | нет | строка |  | 
| priority | нет | целое число | 0 | 
| statement | да | строка |  | 
| type | да | перечисление ('REQUEST', 'PREFETCH', 'CACHE', 'RESPONSE') |  | 
Директор
Документация Fastly
| Поле | Обязательно | Тип | По умолчанию | 
| name | да | строка |  | 
| backends | нет | массив строк |  | 
| capacity | нет | целое число | 100 | 
| comment | нет | строка | '' | 
| quorum | нет | целое число | 75 | 
| shield | нет | строка |  | 
| type | нет | целое число (одно из [1,2,3,4]) | 1 | 
| retries | нет | целое число | 5 | 
Заголовок
Документация Fastly
| Поле | Обязательно | Тип | По умолчанию | 
| name | да | строка |  | 
| action | нет | перечисление ('set', 'append', 'delete', 'regex', 'regex_repeat') | set | 
| dst | да | строка |  | 
| ignore_if_set | нет | целое число (одно из [0,1]) | 0 | 
| priority | нет | целое число | 100 | 
| regex | нет | строка |  | 
| request_condition | нет | строка |  | 
| response_condition | нет | строка |  | 
| cache_condition | нет | строка |  | 
| src | да | строка |  | 
| substitution | нет | строка |  | 
| type | да | перечисление ('request', 'fetch', 'cache', 'response') |  | 
Проверка состояния
Документация Fastly
| Поле | Обязательно | Тип | По умолчанию | 
| name | да | строка |  | 
| check_interval | нет | целое число |  | 
| comment | нет | строка | '' | 
| expected_response | нет | целое число | 200 | 
| host | да | строка |  | 
| http_version | нет | строка | 1.1 | 
| initial | нет | целое число |  | 
| method | нет | строка | HEAD | 
| path | нет | строка | '/' | 
| threshold | нет | целое число |  | 
| timeout | нет | целое число |  | 
| window | нет | целое число |  | 
Настройка запроса
Документация Fastly
| Поле | Обязательно | Тип | По умолчанию | 
| name | да | строка |  | 
| request_condition | нет | строка |  | 
| action | нет | перечисление ('lookup', 'pass') |  | 
| xff | нет | перечисление ('clear', 'leave', 'append', 'append_all', 'overwrite') |  | 
| hash_keys | нет | строка |  | 
| default_host | нет | строка |  | 
| max_stale_age | нет | целое число | 0 | 
| force_miss | нет | целое число | 0 | 
| force_ssl | нет | целое число | 0 | 
| timer_support | нет | целое число | 0 | 
| geo_headers | нет | целое число | 0 | 
| bypass_busy_wait | нет | целое число | 0 | 
Объект ответа
Документация Fastly
| Поле | Обязательно | Тип | По умолчанию | 
| name | да | строка |  | 
| request_condition | нет | строка |  | 
| response | нет | строка | Ok | 
| status | нет | целое число | 200 | 
| content | нет | строка |  | 
| content_type | нет | строка |  | 
Фрагменты VCL
Документация Fastly
| Поле | Обязательно | Тип | По умолчанию | 
| name | да | строка |  | 
| dynamic | нет | целое число | 0 | 
| type | нет | строка | "init" | 
| content | да | строка |  | 
| priority | нет | целое число | 100 | 
Логирование S3
Документация Fastly
| Поле | Обязательно | Тип | По умолчанию | 
| name | да | строка |  | 
| access_key | нет | строка |  | 
| bucket_name | нет | строка |  | 
| domain | нет | строка |  | 
| format | нет | строка | %{%Y-%m-%dT%H:%M:%S}t %h "%r" %>s %b | 
| format_version | нет | целое число | 2 | 
| gzip_level | нет | целое число | 0 | 
| message_type | нет | перечисление ('classic', 'loggly', 'logplex', 'blank') | classic | 
| path | нет | строка | / | 
| period | нет | целое число | 3600 | 
| placement | нет | строка |  | 
| redundancy | нет | строка |  | 
| response_condition | нет | строка | '' | 
| secret_key | нет | строка |  | 
| server_side_encryption_kms_key_id | нет | строка |  | 
| server_side_encryption | нет | строка |  | 
| timestamp_format | нет | строка | %Y-%m-%dT%H | 
Логирование Syslog
Документация Fastly
| Поле | Обязательно | Тип | По умолчанию | 
| name | да | строка |  | 
| address | да | строка |  | 
| format | нет | строка | %{%Y-%m-%dT%H:%M:%S}t %h "%r" %>s %b | 
| format_version | нет | целое число | 2 | 
| hostname | нет | строка |  | 
| ipv4 | нет | строка |  | 
| message_type | нет | перечисление ('classic', 'loggly', 'logplex', 'blank') | classic | 
| placement | нет | строка |  | 
| port | да | целое число |  | 
| response_condition | нет | строка | '' | 
| tls_ca_cert | нет | строка |  | 
| tls_hostname | нет | строка |  | 
| token | нет | строка |  | 
| use_tls | нет | целое число | 0 | 
Настройки
Документация Fastly
| Поле | Обязательно | Тип | По умолчанию | 
| general.default_ttl | нет | целое число | 3600 | 
Примеры
Использование модуля fastly_service в плейбуке
---
- hosts: localhost
  connection: local
  gather_facts: False
  roles:
    - Jimdo.fastly
  tasks:
    - fastly_service:
        name: Redirect service
        domains:
          - name: test1.example.net
            comment: redirect domain
        backends:
          - name: localhost
            port: 80
            address: 127.0.0.1
        headers:
          - name: Set Location header
            dst: http.Location
            type: response
            action: set
            src: http://test3.example.net req.url.path
            ignore_if_set: 0
            priority: 10
        response_objects:
          - name: Set 301 status code
            status: 301
$ ansible-playbook -i localhost, fastly.yml
Разработка
Запуск тестов
FASTLY_API_KEY=some_secret python -m unittest discover tests
Обновление кассет VCR
VCR.py используется в тестах для имитации HTTP-запросов.
Чтобы обновить кассеты, просто удалите директорию tests/fixtures/cassettes и запустите тесты как обычно. Вам необходимо использовать действительный ключ API Fastly для корректной записи.