Проблемы с пониманием файла YAML

#kubernetes #yaml

#kubernetes #yaml

Вопрос:

Я новичок в YAML, и я хотел бы понять следующую часть.файл yaml:

 version: "3.7"
services:
    influxdb:
        image: influxdb:alpine
        environment:
            INFLUXDB_DB: ft_services
            INFLUXDB_ADMIN_USER: admin
            INFLUXDB_ADMIN_PASSWORD: admin
        volumes:
            - datainfluxdb:/var/lib/influxdb
        deploy:
            restart_policy:
                condition: on-failure
  

Насколько я знаю, в файле .yaml можно использовать 3 типа данных: скаляры, последовательности и сопоставления. Например, version: "3.7" является скаляром. Но я не уверен, каковы следующие:

 volumes:
            - datainfluxdb:/var/lib/influxdb
  
 environment:
            INFLUXDB_DB: ft_services
            INFLUXDB_ADMIN_USER: admin
            INFLUXDB_ADMIN_PASSWORD: admin
  

Я не совсем понимаю, что это за данные и как они работают, может кто-нибудь дать мне подсказку?

Комментарии:

1. В дополнение к приведенным ниже ответам, могу ли я порекомендовать мой краткий учебник по YAML ? В нем рассматриваются некоторые типичные примеры. Обратная связь приветствуется 🙂

Ответ №1:

Списки

пример

 volumes:
   - data: /var/lib
     other-field: "example"
   - data: /etc
  

Каждая строка с отступом, начинающаяся с - above, является началом элемента списка. В списке в примере есть два элемента, и весь список назван volumes . Примером является список карт, но также допустим список скаляров.

Карты

пример

 environment:
    INFLUXDB_DB: ft_services
    INFLUXDB_ADMIN_USER: admin
    INFLUXDB_ADMIN_PASSWORD: admin
  

как вы писали, это карта с парами ключ-значение, и вся карта называется environment .

Скаляры

Как вы писали, существуют также скаляры различных типов. Значение в кавычках, подобное "3.7" a string .

Комментарии:

1. Lists — приведенный пример на самом деле List of Maps , который, я думаю, должен присутствовать как очень популярный в yaml, но как отдельный пример

Ответ №2:

Но я не уверен, каковы следующие:

  • Список карт:

     volumes:
      - datainfluxdb:/var/lib/influxdb
      

    Равный json:

     {
      "volumes": [
        {"datainfluxdb": "/var/lib/influxdb"}
      ]
    }
      
  • Карта:

     environment:
      INFLUXDB_DB: ft_services
      INFLUXDB_ADMIN_USER: admin
      INFLUXDB_ADMIN_PASSWORD: admin
      

    Равный json:

     {
      "environment": {
        "INFLUXDB_DB": "ft_services",
        "INFLUXDB_ADMIN_USER": "admin",
        "INFLUXDB_ADMIN_PASSWORD": "admin"
      }
    }
      
  • И не упоминается в вашем вопросе, а простой список строк

     accessModes:
      - ReadWriteOnce
      

    Равный json:

     {
      "accessModes": [
        "ReadWriteOnce"
      ]
    }
      

Эти 3 наиболее часто встречаются в Kubernetes.

На мой взгляд, в начале YAML становится наиболее запутанным, когда у вас есть вложенные структуры. Для облегчения понимания я предлагаю использовать что-то вроде https://onlineyamltools.com/convert-yaml-to-json преобразовать в JSON, который имеет более явный синтаксис структур.