GVKun编程网logo

Python yaml 使用的包(python yaml.load)

2

如果您对Pythonyaml使用的包和pythonyaml.load感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Pythonyaml使用的包的各种细节,并对pythonyaml.load进行

如果您对Python yaml 使用的包python yaml.load感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Python yaml 使用的包的各种细节,并对python yaml.load进行深入的分析,此外还有关于2022-12-23:portainer 是 docker 的 web 可视化工具。如果根据 docker 部署去写 yaml,默认 local 是 k8s,而不是 docker,这不符合需求,需要修改 yaml。请问部署在、API 管理 - 定制 yaml 文件管理 api 并基于 yaml 文件生成 client 端、server 端、springboot 完整程序、Azure DevOps YAML 管道从传递的变量中删除引号和双反斜杠 Classic Pipeline 通过 Playbook (")YAML 管道通过 Playbook (")元:Classic Pipeline 通过 Playbook (\\)YAML 管道通过 Playbook (\\)YAML 管道内容说明buildOption 作为对象buildOption 作为 JSON、Doctrine.yaml" 不包含有效的 YAML:不能在不带引号的映射值中使用冒号的实用技巧。

本文目录一览:

Python yaml 使用的包(python yaml.load)

Python yaml 使用的包(python yaml.load)

通常 Python 使用的 Yaml 文件处理的包有 2 个。

  • PyYAML
  • ruamel.yaml

可以理解为 PyYAML 是 Python 自带的 Yaml 数据处理库,ruamel.yaml 是 PyYAML 的增强版。

因此使用 ruamel.yaml 的会比较多,而且很多语法和函数都是通用的。

安装

PyYAML 和 ruamel.yaml 都需要安装。

使用 pip install 进行安装就可以了。过程非常简单。

pip install pyyaml
pip install ruamel.yaml

输出

对比了下 2 个包的输出格式,ruamel.yaml 输出格式更好,更加标准。

这也许就是很多人使用 ruamel.yaml 的原因吧。

 

yaml-01

 

对比下使用 PyYAML 的输出来看,确实 PyYAML 的输出文件更加不好阅读。

 

yaml-02

 

因为我们在测试的时候只有很少的数据量,如果你的 yaml 文件的数据量比较大的话,那读起来还是很费劲的。

https://www.ossez.com/t/python-yaml/13386

2022-12-23:portainer 是 docker 的 web 可视化工具。如果根据 docker 部署去写 yaml,默认 local 是 k8s,而不是 docker,这不符合需求,需要修改 yaml。请问部署在

2022-12-23:portainer 是 docker 的 web 可视化工具。如果根据 docker 部署去写 yaml,默认 local 是 k8s,而不是 docker,这不符合需求,需要修改 yaml。请问部署在

2022-12-23:portainer 是 docker 的 web 可视化工具。如果根据 docker 部署去写 yaml,默认 local 是 k8s,而不是 docker,这不符合需求,需要修改 yaml。请问部署在 k3s 中,并且默认 local 是 docker,yaml 文件如何写?

答案 2022-12-23:

1.portainer 在默认情况下用的是 k8s 环境,所以需要改成 docker 环境,根据如下代码块一的 go 代码可知,把 "KUBERNETES_SERVICE_HOST" 环境变量设置为空,就会把默认环境变成 docker 环境。

2. 根据命令行参数,给 --admin-password 一个值,你就不需要创建用户了。

3.--admin-password 是一个哈希值,根据如下代码块二的 go 代码可知,需要将密码转成哈希才行。"moonfdd--moonfdd" 转换成哈希是 "$2a$10$4m4rYwK/TA8GRkyz4UrZ2e8B4GDG8ZhBkyGawJ05q1zJ7zmLywzmW"。

// 代码块一
// api/platform/platform.go

const (
	PodmanMode            = "PODMAN"
	KubernetesServiceHost = "KUBERNETES_SERVICE_HOST"
	NomadJobName          = "NOMAD_JOB_NAME"
)

// DetermineContainerPlatform will check for the existence of the PODMAN_MODE
// or KUBERNETES_SERVICE_HOST environment variable to determine if
// the container is running on Podman or inside the Kubernetes platform.
// Defaults to Docker otherwise.
func DetermineContainerPlatform() (ContainerPlatform, error) {
	podmanModeEnvVar := os.Getenv(PodmanMode)
	if podmanModeEnvVar == "1" {
		return PlatformPodman, nil
	}
	serviceHostKubernetesEnvVar := os.Getenv(KubernetesServiceHost)
	if serviceHostKubernetesEnvVar != "" {
		return PlatformKubernetes, nil
	}
	nomadJobName := os.Getenv(NomadJobName)
	if nomadJobName != "" {
		return PlatformNomad, nil
	}

	if !isRunningInContainer() {
		return "", nil
	}

	dockerCli, err := client.NewClientWithOpts()
	if err != nil {
		return "", errors.WithMessage(err, "failed to create docker client")
	}
	defer dockerCli.Close()

	info, err := dockerCli.Info(context.Background())
	if err != nil {
		if client.IsErrConnectionFailed(err) {
			log.Warn().
				Err(err).
				Msg("failed to retrieve docker info")
			return "", nil
		}

		return "", errors.WithMessage(err, "failed to retrieve docker info")
	}

	if info.Swarm.NodeID == "" {
		return PlatformDockerStandalone, nil
	}

	return PlatformDockerSwarm, nil
}

// 代码块二
// api/cmd/portainer/main.go
	adminPasswordHash := ""
	if *flags.AdminPasswordFile != "" {
		content, err := fileService.GetFileContent(*flags.AdminPasswordFile, "")
		if err != nil {
			log.Fatal().Err(err).Msg("failed getting admin password file")
		}

		adminPasswordHash, err = cryptoService.Hash(strings.TrimSuffix(string(content), "\n"))
		if err != nil {
			log.Fatal().Err(err).Msg("failed hashing admin password")
		}
	} else if *flags.AdminPassword != "" {
		adminPasswordHash = *flags.AdminPassword
	}

yaml 如下:

# 用户名:admin
# 密码:moonfdd--moonfdd
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: portainer
  name: portainer
  namespace: moonfdd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: portainer
  template:
    metadata:
      labels:
        app: portainer
    spec:
      containers:
        - env:
            - name: "KUBERNETES_SERVICE_HOST"
              value: ""
          args:
            - "--admin-password"
            - "$2a$10$4m4rYwK/TA8GRkyz4UrZ2e8B4GDG8ZhBkyGawJ05q1zJ7zmLywzmW"
          image: portainer/portainer-ce:alpine
          imagePullPolicy: IfNotPresent
          name: portainer
          securityContext:
            privileged: true
          volumeMounts:
            - mountPath: /var/run/docker.sock
              name: volv
            # - mountPath: /data
            #   name: volv2
      volumes:
        - hostPath:
            path: /var/run/docker.sock
            type: Socket
          name: volv
        # - hostPath:
        #     path: /root/k8s/moonfdd/portainer/data
        #     type: DirectoryOrCreate
        #   name: volv2
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: portainer
  name: portainer
  namespace: moonfdd
spec:
  ports:
    - port: 8000
      protocol: TCP
      targetPort: 8000
      name: 8000-8000
    - port: 9443
      protocol: TCP
      targetPort: 9443
      name: 9443-9443
    - port: 9000
      protocol: TCP
      targetPort: 9000
      name: 9000-9000
  selector:
    app: portainer
  type: NodePort

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

API 管理 - 定制 yaml 文件管理 api 并基于 yaml 文件生成 client 端、server 端、springboot 完整程序

API 管理 - 定制 yaml 文件管理 api 并基于 yaml 文件生成 client 端、server 端、springboot 完整程序

1. api 管理方式背景

随着项目团队不断地规范,开发流程的每一步都在不断的变化,变得更加高效并且方便管理;api 管理也经历了不少的变化,主要变化从上到下演进:

  • 编写后端接口 api,从 status 的 action 到 springmvc 的 @RequestMapping,这些框架的确可以帮我们完成后端接口的编写,但对于前后端分离的项目,还需要编写项目组制定的接口文档;我相信,没多少程序员写完接口后还想写接口文档的。
  • 由于项目组开发系统比较多,为了统一管理公司内部所有系统的接口文档,这个时候有的公司会定制化自己的接口文档管理应用,通过这个应用可以简单的实现在网站上直接编写接口文档信息,无须考虑接口文档样式等等,这样做的确比上一种好一点,通过对定制化这个网站,我们可以做到在线调试接口情况、分版本管理、分配 api 管理权限。API 管理 - 使用开源 xxl-api 项目管理接口
  • 在项目中集成 swagger 并在接口上加上 api 信息的注解,并通过 swagger-ui.html 界面进行 api 接口的查看和调试,详细请参考:API 管理 - 基于 SpringBoot 项目集成 swagger 实现接口文档自动生成,如果觉得这套 ui 不友好,没关系,可以换,API 管理 - 舍弃 springfox-swagger-ui,采用功能更加丰富的 swagger-bootstrap-ui
  • 通过上面一种就基本可以完成 api 管理操作了,但这样的 swagger 管理起来也存在代码侵入性太高,为了达到目的还需要反复的调整接口注解或参数;既然存在问题,阅读完这篇文章你就会学会:如何定制 yaml 文件管理 api 并基于 yaml 文件生成 client 端、server 端、springboot 完整程序,接下来进入主题。

2. 需要了解几个概念

  • swagger 2.0 和 open api 3.0 规范,其实就是规范对于的 yaml 文件格式定义,不同的情况下可以通过特定的规范进行不同后端代码生成,对于 swagger 2.0 和 open api 3.0 规范生成代码的插件也有好多个,swagger 2.0 和 open api 3.0 还支持互转,请参考:swagger2openapi。

这里先介绍基于 swagger 2.0 生成后端代码,试过 open api 3.0 去做,但插件不太给力,没有达到我想要的效果,没法达到:基于 yaml 文件生成 client 端、server 端、springboot 完整程序;

  • 满足 swagger 2.0 文件有 json、yaml 二种格式的,所以以后我们只要学会编写这种 yaml 或 json 文件编写规范就可以对接口进行管理。

3. 使用 swagger-codegen 完成基于 yaml 文件生成 client 端、server 端、springboot 完整程序

请先阅读,这篇文章,写的不错:spring boot 项目使用 swagger-codegen 生成服务间调用的 jar 包,百度了很多帖子,就这篇文章给了我想要的效果。

通过这种方法我可以生成一个只带 NameApi 的接口的程序("interfaceOnly" : "true"),通过对这个程序的打包依赖到项目中,就可以完成对 api 管理,每次更新 api 接口只需要编写好 yaml 重新生成一下 jar 并依赖到项目中就行,这样还可以减少 swagger 相关注解的侵入性。通过这种方式只用在 controller 上实现对于的 jar 中的接口,还不需要调整 service 和 mapper 中的逻辑,service 和 mapper 层还可以通过之前方式直接生成与数据库交互的通用接口。

除此之外 swagger-codegen 还可以通过 "library" : "feign" 生产我们想要的客户端代码(jar),这里的客户端代码就是一些封装过的工具,可以通过指定方式去和 server 交互,如:sso-client.jar 就是负责与 sso-server 进行交互的。swagger-codegen 功能还有很多,这里就不一一介绍了。

Azure DevOps YAML 管道从传递的变量中删除引号和双反斜杠 Classic Pipeline 通过 Playbook (

Azure DevOps YAML 管道从传递的变量中删除引号和双反斜杠 Classic Pipeline 通过 Playbook (")YAML 管道通过 Playbook (")元:Classic Pipeline 通过 Playbook (\\)YAML 管道通过 Playbook (\\)YAML 管道内容说明buildOption 作为对象buildOption 作为 JSON

如何解决Azure DevOps YAML 管道从传递的变量中删除引号和双反斜杠 Classic Pipeline 通过 Playbook (")YAML 管道通过 Playbook (")元:Classic Pipeline 通过 Playbook (\\\\)YAML 管道通过 Playbook (\\\\)YAML 管道内容说明buildOption 作为对象buildOption 作为 JSON

我有一个管道,它期望 Ansible-Playbook 作为在队列时间 (string) 上传递的变量。将我的经典 Pipeline 转换为 YAML 后,我发现 Playbook-String 中的 Quotes 丢失了。

Classic Pipeline 通过 Playbook (")

  1. ---
  2. -
  3. hosts: "all"
  4. gather_facts: true
  5. vars:
  6. SoftwareFolder: "ansibleshare"
  7. SoftwareSource: "/mnt/{{ SoftwareFolder }}"
  8. AnsibleRoot: "D:/Ansible"
  9. Proxy: "http://www-cache.de:3128"
  10. tasks:
  11. -
  12. name: "set windows proxy settings"
  13. win_inet_proxy:
  14. auto_detect: false
  15. proxy: "{{ Proxy }}"
  16. ...

YAML 管道通过 Playbook (")

  1. ---
  2. -
  3. hosts: all
  4. gather_facts: true
  5. vars:
  6. SoftwareFolder: ansibleshare
  7. SoftwareSource: /mnt/{{ SoftwareFolder }}
  8. AnsibleRoot: D:/Ansible
  9. Proxy: http://www-cache.de:3128
  10. tasks:
  11. -
  12. name: set windows proxy settings
  13. win_inet_proxy:
  14. auto_detect: false
  15. proxy: {{ Proxy }}
  16. ...

我尝试将 Playbook 包装在单引号中,然后再传递它 (''${yaml}''),但这无济于事。

引用是 Playbooks 的一个重要组成部分,我很确定是有原因的,为什么管道会这样。但是作为利益相关者,当一个变量通过它被改变时感觉很糟糕,而且在经典的 Pipelines 中没有必要这样做。

我该如何解决?


元:

  1. 18.170.30525.1 (Azure DevOps Server 2020)
  2. on prem
  3. API: "azure-devops-node-api": "^10.2.1"

编辑 1

ansible-playbooks 上下文中的另一个问题是 YAML 管道也会误解双反斜杠 \\\\,这对于 playbooks 中的 windows 路径非常重要:

Classic Pipeline 通过 Playbook (\\\\)

  1. -
  2. name: "msi install 7z"
  3. win_package:
  4. path: "{{ AnsibleRoot }}\\\\{{ SoftwareFolder }}\\\\7z\\\\7z.msi"
  5. state: "present"
  6. -
  7. name: "exe install git client"
  8. win_package:
  9. path: "{{ AnsibleRoot }}\\\\{{ SoftwareFolder }}\\\\git\\\\Git.exe"
  10. state: "present"
  11. product_id: "git"
  12. creates_path: "C:\\\\Program Files\\\\Git\\\\cmd\\\\git.exe"
  13. arguments:
  14. - "/SILENT"

YAML 管道通过 Playbook (\\\\)

  1. -
  2. name: msi install 7z
  3. win_package:
  4. path: {{ AnsibleRoot }}\\{{ SoftwareFolder }}\\7z\\7z.msi
  5. state: present
  6. -
  7. name: exe install git client
  8. win_package:
  9. path: {{ AnsibleRoot }}\\{{ SoftwareFolder }}\\git\\Git.exe
  10. state: present
  11. product_id: git
  12. creates_path: C:\\Program Files\\Git\\cmd\\git.exe
  13. arguments:
  14. - /SILENT

这使得 YAML-Pipelines 很难用于该用例。 :(


编辑 2

YAML 管道内容

  1. # NAME
  2. name: "$(Build.BuildId)-$(Build.sourceBranchName) ($(Build.RequestedFor))"
  3. # TRIGGER
  4. trigger: none
  5. # VARIABLES
  6. variables:
  7. - name: "PathPlaybook"
  8. value: "ansible-playbook.yml"
  9. - name: "PathInventory"
  10. value: "ansible-inventory.yml"
  11. # STAGES
  12. stages:
  13. # ----------------------------------------------------------- BUILD
  14. - stage: "Build"
  15. # POOL
  16. pool:
  17. name: "Ansible"
  18. # JOBS
  19. jobs:
  20. - job:
  21. displayName: "Agent job"
  22. # STEPS
  23. steps:
  24. # BASH SCRIPT TO CREATE FILE FROM PASSED ParaMETER TO TARGET MACHINE
  25. - task: Bash@3
  26. inputs:
  27. targettype: "inline"
  28. script: |
  29. echo ''$(Inventory)'' > $(PathInventory)
  30. echo ''$(Playbook)'' > $(PathPlaybook)
  31. echo Inventory:
  32. echo ''$(Inventory)''
  33. echo Playbook:
  34. echo ''$(Playbook)''
  35. # ANSIBLE
  36. - task: Ansible@0
  37. displayName: Ansible Agent''
  38. inputs:
  39. playbookPathOnAgentMachine: ''$(PathPlaybook)''
  40. inventoriesAgentMachine: file
  41. inventoryFileOnAgentMachine: ''$(PathInventory)''
  42. failOnStdErr: false

说明

  • 管道接收 InventoryPlaybook 作为 string
  • Bash 任务将 string 写入文件并生成我在上面发布的输出(更多用于调试)
  • Ansible 执行文件

请记住。经典中的相同管道运行良好:

enter image description here


编辑 3:queueBuild 函数的参数

我为 queueBuild 函数使用了 3 个参数

  • ``buildOption = 见下文
  • 项目名称 = MyProject
  • ignoreWarnings = true

buildOption 作为对象

  1. deFinition:{id: 23}
  2. parameters:''{"Inventory":"---\\n all: \\n hosts: \\n PTC-BLD-ADA5: \\n ansible_user: \\"PTC-SVC-ADS-AGT\\"\\n ansible_password: \\"AgentPW2019\\"\\n ansible_port: 5986\\n ansible_connection: \\"winrm\\"\\n ansible_winrm_transport: \\"ntlm\\"\\n ansible_winrm_server_cert_validation: \\"ignore\\"\\n","Playbook":"---\\n - \\n hosts: \\"all\\"\\n gather_facts: true\\n vars: \\n SoftwareFolder: \\"ansibleshare\\"\\n SoftwareSource: \\"/mnt/{{ SoftwareFolder }}\\"\\n AnsibleRoot: \\"D:\\\\\\\\Ansible\\"\\n Proxy: \\"http://www-cache.psitrans.de:3128\\"\\n tasks: \\n - \\n name: \\"set windows proxy settings\\"\\n win_inet_proxy: \\n auto_detect: false\\n proxy: \\"{{ Proxy }}\\"\\n - \\n name: \\"create directory ansible\\"\\n win_file: \\n path: \\"{{ AnsibleRoot }}\\"\\n state: \\"directory\\"\\n - \\n name: \\"copy software to target machine\\"\\n win_copy: \\n src: \\"{{ SoftwareSource }}\\"\\n dest: \\"{{ AnsibleRoot }}\\"\\n - \\n name: \\"exe install git client\\"\\n win_package: \\n path: \\"{{ AnsibleRoot }}\\\\\\\\{{ SoftwareFolder }}\\\\\\\\git\\\\\\\\Git.exe\\"\\n state: \\"present\\"\\n product_id: \\"git\\"\\n creates_path: \\"C:\\\\\\\\Program Files\\\\\\\\Git\\\\\\\\cmd\\\\\\\\git.exe\\"\\n arguments: \\n - \\"/SILENT\\"\\n - \\n name: \\"msi install 7z\\"\\n win_package: \\n path: \\"{{ AnsibleRoot }}\\\\\\\\{{ SoftwareFolder }}\\\\\\\\7z\\\\\\\\7z.msi\\"\\n state: \\"present\\"\\n"}''
  3. sourceBranch:''refs/heads/master''

buildOption 作为 JSON

  1. {
  2. "deFinition": { "id": 23 },"id": 23,"parameters": "{\\"Inventory\\":\\"---\\n all: \\n hosts: \\n PTC-BLD-ADA5: \\n ansible_user: \\"PTC-SVC-ADS-AGT\\"\\n ansible_password: \\"AgentPW2019\\"\\n ansible_port: 5986\\n ansible_connection: \\"winrm\\"\\n ansible_winrm_transport: \\"ntlm\\"\\n ansible_winrm_server_cert_validation: \\"ignore\\"\\n\\",\\"Playbook\\":\\"---\\n - \\n hosts: \\"all\\"\\n gather_facts: true\\n vars: \\n SoftwareFolder: \\"ansibleshare\\"\\n SoftwareSource: \\"/mnt/{{ SoftwareFolder }}\\"\\n AnsibleRoot: \\"D:\\\\\\\\Ansible\\"\\n Proxy: \\"http://www-cache.psitrans.de:3128\\"\\n tasks: \\n - \\n name: \\"set windows proxy settings\\"\\n win_inet_proxy: \\n auto_detect: false\\n proxy: \\"{{ Proxy }}\\"\\n - \\n name: \\"create directory ansible\\"\\n win_file: \\n path: \\"{{ AnsibleRoot }}\\"\\n state: \\"directory\\"\\n - \\n name: \\"copy software to target machine\\"\\n win_copy: \\n src: \\"{{ SoftwareSource }}\\"\\n dest: \\"{{ AnsibleRoot }}\\"\\n - \\n name: \\"exe install git client\\"\\n win_package: \\n path: \\"{{ AnsibleRoot }}\\\\\\\\{{ SoftwareFolder }}\\\\\\\\git\\\\\\\\Git.exe\\"\\n state: \\"present\\"\\n product_id: \\"git\\"\\n creates_path: \\"C:\\\\\\\\Program Files\\\\\\\\Git\\\\\\\\cmd\\\\\\\\git.exe\\"\\n arguments: \\n - \\"/SILENT\\"\\n - \\n name: \\"msi install 7z\\"\\n win_package: \\n path: \\"{{ AnsibleRoot }}\\\\\\\\{{ SoftwareFolder }}\\\\\\\\7z\\\\\\\\7z.msi\\"\\n state: \\"present\\"\\n\\"}","sourceBranch": "refs/heads/master"
  3. }

我的应用程序使用 queueBuild 作为对象调用 buildOption 函数,就像预期的那样。

重要的是要知道这对于经典流水线来说完全没问题,只有 YAML 流水线对上面描述的传递参数进行更改。

解决方法

我可以使用 String.raw 方法成功传递带有 " 和 " \\" 的参数字符串。见下文:

  1. let ps = String.raw `{"Inventory":"---\\n all: \\n hosts: \\n PTC-BLD-ADA5: \\n ansible_user: \\"PTC-SVC-ADS-AGT\\"\\n ansible_password: \\"AgentPW2019\\"\\n ansible_port: 5986\\n ansible_connection: \\"winrm\\"\\n ansible_winrm_transport: \\"ntlm\\"\\n ansible_winrm_server_cert_validation: \\"ignore\\"\\n","Playbook":"---\\n - \\n hosts: \\"all\\"\\n gather_facts: true\\n vars: \\n SoftwareFolder: \\"ansibleshare\\"\\n SoftwareSource: \\"/mnt/{{ SoftwareFolder }}\\"\\n AnsibleRoot: \\"D:\\\\\\\\Ansible\\"\\n Proxy: \\"http://www-cache.psitrans.de:3128\\"\\n tasks: \\n - \\n name: \\"set windows proxy settings\\"\\n win_inet_proxy: \\n auto_detect: false\\n proxy: \\"{{ Proxy }}\\"\\n - \\n name: \\"create directory ansible\\"\\n win_file: \\n path: \\"{{ AnsibleRoot }}\\"\\n state: \\"directory\\"\\n - \\n name: \\"copy software to target machine\\"\\n win_copy: \\n src: \\"{{ SoftwareSource }}\\"\\n dest: \\"{{ AnsibleRoot }}\\"\\n - \\n name: \\"exe install git client\\"\\n win_package: \\n path: \\"{{ AnsibleRoot }}\\\\\\\\{{ SoftwareFolder }}\\\\\\\\git\\\\\\\\Git.exe\\"\\n state: \\"present\\"\\n product_id: \\"git\\"\\n creates_path: \\"C:\\\\\\\\Program Files\\\\\\\\Git\\\\\\\\cmd\\\\\\\\git.exe\\"\\n arguments: \\n - \\"/SILENT\\"\\n - \\n name: \\"msi install 7z\\"\\n win_package: \\n path: \\"{{ AnsibleRoot }}\\\\\\\\{{ SoftwareFolder }}\\\\\\\\7z\\\\\\\\7z.msi\\"\\n state: \\"present\\"\\n"}`;
  2. let vstsdef : bi.Build = {
  3. definition: { id: 48 },parameters: ps
  4. };
  5. let nq = await build.queueBuild(vstsdef,"TestProject")

查看以下 yaml 管道的输出:

enter image description here

Doctrine.yaml

Doctrine.yaml" 不包含有效的 YAML:不能在不带引号的映射值中使用冒号

如何解决Doctrine.yaml" 不包含有效的 YAML:不能在不带引号的映射值中使用冒号

我看到有人问过类似的问题,但没有找到我的答案。 大多数是某种类型的错别字,这对我来说可能是真的,但我已经盯着这个看了一个小时却找不到,也许其他人可以,我真的很感激!

  1. doctrine:
  2. dbal:
  3. default_connection: default
  4. connections:
  5. default:
  6. #User DB
  7. url: ''%env(resolve:DATABASE_URL)%''
  8. driver: ''pdo_MysqL''
  9. server_version: ''5.7''
  10. charset: utf8mb4
  11. mededelingen:
  12. #mededelingen DB
  13. url: ''%env(resolve:DATABASE_MEDEDELINGEN_URL)%''
  14. driver: ''pdo_MysqL''
  15. server_version: ''5.7''
  16. charset: utf8mb4
  17. # IMPORTANT: You MUST configure your server version,# either here or in the DATABASE_URL env var (see .env file)
  18. #server_version: ''13''
  19. orm:
  20. auto_generate_proxy_classes: true
  21. naming_strategy: doctrine.orm.naming_strategy.underscore
  22. auto_mapping: true
  23. default:
  24. connection: default
  25. mappings:
  26. users:
  27. is_bundle: false
  28. type: annotation
  29. dir: ''%kernel.project_dir%/src/Entity''
  30. prefix: ''App\\Entity\\User''
  31. alias: App
  32. mededelingen:
  33. connection: mededelingen
  34. mappings:
  35. Mededelingen:
  36. is_bundle: false
  37. type: annotation
  38. dir: ''%kernel.project_dir%/src/Entity''
  39. prefix: ''App\\Entity\\Mededeling''
  40. alias: Mededeling

第 41 行(靠近“别名:Mededeling”)

解决方法

我尝试使用 linter 解决您的问题。

首先,您在 entity_managers 之后错过了属性 orm,然后我不得不移动 naming_strategyauto_mapping

auto_mapping 只能在一个实体管理器上使用,所以我将其设置为默认值。

对我来说没有问题的结果:

  1. doctrine:
  2. dbal:
  3. default_connection: default
  4. connections:
  5. default:
  6. #User DB
  7. url: ''%env(resolve:DATABASE_URL)%''
  8. driver: ''pdo_mysql''
  9. server_version: ''5.7''
  10. charset: utf8mb4
  11. mededelingen:
  12. #mededelingen DB
  13. url: ''%env(resolve:DATABASE_MEDEDELINGEN_URL)%''
  14. driver: ''pdo_mysql''
  15. server_version: ''5.7''
  16. charset: utf8mb4
  17. # IMPORTANT: You MUST configure your server version,# either here or in the DATABASE_URL env var (see .env file)
  18. #server_version: ''13''
  19. orm:
  20. entity_managers:
  21. auto_generate_proxy_classes: true
  22. default:
  23. connection: default
  24. naming_strategy: doctrine.orm.naming_strategy.underscore
  25. auto_mapping: true
  26. mappings:
  27. users:
  28. is_bundle: false
  29. type: annotation
  30. dir: ''%kernel.project_dir%/src/Entity''
  31. prefix: ''App\\Entity\\User''
  32. alias: App
  33. mededelingen:
  34. connection: mededelingen
  35. naming_strategy: doctrine.orm.naming_strategy.underscore
  36. mappings:
  37. Mededelingen:
  38. is_bundle: false
  39. type: annotation
  40. dir: ''%kernel.project_dir%/src/Entity''
  41. prefix: ''App\\Entity\\Mededeling''
  42. alias: Mededeling

我们今天的关于Python yaml 使用的包python yaml.load的分享已经告一段落,感谢您的关注,如果您想了解更多关于2022-12-23:portainer 是 docker 的 web 可视化工具。如果根据 docker 部署去写 yaml,默认 local 是 k8s,而不是 docker,这不符合需求,需要修改 yaml。请问部署在、API 管理 - 定制 yaml 文件管理 api 并基于 yaml 文件生成 client 端、server 端、springboot 完整程序、Azure DevOps YAML 管道从传递的变量中删除引号和双反斜杠 Classic Pipeline 通过 Playbook (")YAML 管道通过 Playbook (")元:Classic Pipeline 通过 Playbook (\\)YAML 管道通过 Playbook (\\)YAML 管道内容说明buildOption 作为对象buildOption 作为 JSON、Doctrine.yaml" 不包含有效的 YAML:不能在不带引号的映射值中使用冒号的相关信息,请在本站查询。

本文标签: