Hướng dẫn python hcl parser - python hcl parser

Hướng dẫn python hcl parser - python hcl parser

Thực hiện trình phân tích cú pháp cho HCL (ngôn ngữ cấu hình Hashicorp) trong Python. Việc triển khai này nhằm mục đích tương thích với phiên bản Golang gốc của trình phân tích cú pháp.

Ngữ pháp và nhiều bài kiểm tra/đồ đạc đã được sao chép/chuyển từ trình phân tích cú pháp Golang vào PYHCL. Tất cả các bản phát hành được thử nghiệm với nhiều phiên bản Python từ Python 2.7 trở đi.

Phiên bản này đã được sửa đổi để làm việc với cú pháp Terraform 0.12. Nó nên tương thích ngược với các phiên bản trước. Nó không bao gồm mọi tình huống. Xem Thảo luận trong Yêu cầu kéo: https://github.com/virtuald/pyhcl/pull/57

Cài đặt

pip install pyhcl

Cách sử dụng

Mô -đun này được dự định sẽ được sử dụng theo cách tương tự như cách người ta sẽ sử dụng mô -đun JSON trong Python và tải/tải/bãi rác được triển khai.

import hcl

with open('file.hcl', 'r') as fp:
    obj = hcl.load(fp)

Hiện tại chức năng Dumps đầu ra JSON, và không HCL.

Chuyển đổi HCl sang JSON

PYHCL đi kèm với một kịch bản mà bạn có thể sử dụng để dễ dàng chuyển đổi HCL thành JSON, tương tự như json.tool đi kèm với Python:

hcltool INFILE [OUTFILE]

Xác thực cấu trúc

Tương tự như JSON, đầu ra của phân tích cú pháp HCL là từ điển Python không có cấu trúc xác định. Thư viện Golang cho HCL thực hiện hỗ trợ phân tích cú pháp HCL theo các đối tượng được xác định, nhưng việc triển khai này hiện không hỗ trợ các cấu trúc đó.

Thay vào đó, tôi khuyên bạn nên sử dụng các công cụ được thiết kế để xác nhận JSON, chẳng hạn như thư viện sơ đồ.

Cú pháp

  • Nhận xét dòng duy nhất bắt đầu bằng # hoặc //# or //

  • Nhận xét đa dòng được gói trong / * và * / //* and */

  • Các giá trị được gán với phím Syntax Key = value (khoảng trắng không quan trọng). Giá trị có thể là bất kỳ nguyên thủy: chuỗi, số, boolean, đối tượng hoặc danh sách.key = value (whitespace doesn’t matter). The value can be any primitive: a string, number, boolean, object, or list.

  • Chuỗi được trích dẫn kép và có thể chứa bất kỳ ký tự UTF-8 nào. Ví dụ: "Xin chào, Thế giới""Hello, World"

  • Các số được coi là cơ sở 10. Nếu bạn có tiền tố một số có 0x, nó được coi là thập lục phân. Nếu nó được đặt trước với 0, nó được coi là một bát phân. Số có thể có trong ký hiệu khoa học: 1E10.

  • Giá trị Boolean: Đúng, Saitrue, false

  • Mảng có thể được thực hiện bằng cách gói nó trong []. Ví dụ: ["Foo", "Bar", 42]. Mảng có thể chứa các nguyên thủy và các mảng khác, nhưng không thể chứa các đối tượng. Các đối tượng phải sử dụng cú pháp khối được hiển thị bên dưới.[]. Example: ["foo", "bar", 42]. Arrays can contain primitives and other arrays, but cannot contain objects. Objects must use the block syntax shown below.

Các đối tượng và các đối tượng lồng nhau được tạo bằng cấu trúc được hiển thị bên dưới:

variable "ami" {
    description = "the AMI to use"
}

Kiểm tra

Để chạy các bài kiểm tra:

pip install -r testing-requirements.txt
tests/run_tests.sh

Chế độ kiểm tra sửa lỗi

Để bật chế độ gỡ lỗi:

import hcl
hcl.parser.DEBUG = True

Tác giả

Dustin Spicuzza ([email protected])@virtualroadside.com)

Lưu ý: Dự án này không liên quan đến Hashicorp

Pygohcl

Vòng bao Python cho Hashicorp/HCl (V2).

Yêu cầu

Các phiên bản sau được hỗ trợ - 3.6, 3.7, 3.8, 3.9.

Thành lập

Cách sử dụng

>>> import pygohcl
>>> pygohcl.loads("""variable "docker_ports" {
...   type = list(object({
...     internal = number
...     external = number
...     protocol = string
...   }))
...   default = [
...     {
...       internal = 8300
...       external = 8300
...       protocol = "tcp"
...     }
...   ]
... }""")
{'variable': {'docker_ports': {'default': [{'external': 8300, 'internal': 8300, 'protocol': 'tcp'}], 'type': 'list(object({internal=numberexternal=numberprotocol=string}))'}}}

Mô -đun này được dự định sẽ được sử dụng theo cách tương tự như cách người ta sẽ sử dụng mô -đun JSON trong Python và tải/tải/bãi rác được triển khai.

Hiện tại chức năng Dumps đầu ra JSON, và không HCL.

pip install wheel
python setup.py bdist_wheel

Chuyển đổi HCl sang JSON