Golang k8s相关yaml包的区别

问题背景

大概是因为 k8s 定义了一些特殊的数据类型,所以 k8s 对象 yaml 序列化时与其它 yaml 包结果不同。

源代码

package mainimport ("log""os""github.com/ghodss/yaml"yamlv2 "gopkg.in/yaml.v2"yamlv3 "k8s.io/apimachinery/pkg/util/yaml"corev1 "k8s.io/api/core/v1"v1 "k8s.io/apimachinery/pkg/apis/meta/v1""k8s.io/apimachinery/pkg/util/intstr"
)func main() {// 输出重定向到文件f, err := os.OpenFile("test.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)if err != nil {panic(err)}defer f.Close()log.SetOutput(f)var service *corev1.Serviceservice = &corev1.Service{ObjectMeta: v1.ObjectMeta{Name:      "test-service",Namespace: "default",Labels: map[string]string{"app": "test-app",},},Spec: corev1.ServiceSpec{Selector: map[string]string{"app": "test-app",},Ports: []corev1.ServicePort{{Name: "http",Port: 80,TargetPort: intstr.IntOrString{Type:   intstr.Int,IntVal: 8080,},},},},}{bytes, err := yaml.Marshal(service)if err != nil {panic(err)}log.Printf("yaml:\n%s\n\n", string(bytes))var service2 *corev1.Serviceerr = yaml.Unmarshal(bytes, &service2)if err != nil {panic(err)}log.Printf("service2: %+v\n\n", service2)log.Println()}{bytes, err := yamlv2.Marshal(service)if err != nil {panic(err)}log.Printf("yamlv2:\n%s\n\n", string(bytes))var service2 *corev1.Serviceerr = yamlv2.Unmarshal(bytes, &service2)if err != nil {panic(err)}log.Printf("service2: %+v\n\n", service2)log.Println()}{bytes3, err := yaml.Marshal(service)if err != nil {panic(err)}log.Printf("yaml:\n%s", string(bytes3))var service2 *corev1.Serviceerr = yamlv3.Unmarshal(bytes3, &service2)if err != nil {panic(err)}log.Printf("service2: %+v\n\n", service2)log.Println()}
}
module tmpGogo 1.20require (github.com/ghodss/yaml v1.0.0gopkg.in/yaml.v2 v2.4.0k8s.io/api v0.29.1k8s.io/apimachinery v0.29.1
)require (github.com/go-logr/logr v1.3.0 // indirectgithub.com/gogo/protobuf v1.3.2 // indirectgithub.com/google/gofuzz v1.2.0 // indirectgithub.com/json-iterator/go v1.1.12 // indirectgithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirectgithub.com/modern-go/reflect2 v1.0.2 // indirectgolang.org/x/net v0.19.0 // indirectgolang.org/x/text v0.14.0 // indirectgopkg.in/inf.v0 v0.9.1 // indirectk8s.io/klog/v2 v2.110.1 // indirectk8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirectsigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirectsigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirectsigs.k8s.io/yaml v1.3.0 // indirect
)

输出结果:

2024/01/31 17:10:20 yaml:
metadata:creationTimestamp: nulllabels:app: test-appname: test-servicenamespace: default
spec:ports:- name: httpport: 80targetPort: 8080selector:app: test-app
status:loadBalancer: {}2024/01/31 17:10:20 service2: &Service{ObjectMeta:{test-service  default    0 0001-01-01 00:00:00 +0000 UTC <nil> <nil> map[app:test-app] map[] [] [] []},Spec:ServiceSpec{Ports:[]ServicePort{ServicePort{Name:http,Protocol:,Port:80,TargetPort:{0 8080 },NodePort:0,AppProtocol:nil,},},Selector:map[string]string{app: test-app,},ClusterIP:,Type:,ExternalIPs:[],SessionAffinity:,LoadBalancerIP:,LoadBalancerSourceRanges:[],ExternalName:,ExternalTrafficPolicy:,HealthCheckNodePort:0,PublishNotReadyAddresses:false,SessionAffinityConfig:nil,IPFamilyPolicy:nil,ClusterIPs:[],IPFamilies:[],AllocateLoadBalancerNodePorts:nil,LoadBalancerClass:nil,InternalTrafficPolicy:nil,},Status:ServiceStatus{LoadBalancer:LoadBalancerStatus{Ingress:[]LoadBalancerIngress{},},Conditions:[]Condition{},},}2024/01/31 17:10:20 
2024/01/31 17:10:20 yamlv2:
typemeta:kind: ""apiversion: ""
objectmeta:name: test-servicegeneratename: ""namespace: defaultselflink: ""uid: ""resourceversion: ""generation: 0creationtimestamp: "0001-01-01T00:00:00Z"deletiontimestamp: nulldeletiongraceperiodseconds: nulllabels:app: test-appannotations: {}ownerreferences: []finalizers: []managedfields: []
spec:ports:- name: httpprotocol: ""appprotocol: nullport: 80targetport:type: 0intval: 8080strval: ""nodeport: 0selector:app: test-appclusterip: ""clusterips: []type: ""externalips: []sessionaffinity: ""loadbalancerip: ""loadbalancersourceranges: []externalname: ""externaltrafficpolicy: ""healthchecknodeport: 0publishnotreadyaddresses: falsesessionaffinityconfig: nullipfamilies: []ipfamilypolicy: nullallocateloadbalancernodeports: nullloadbalancerclass: nullinternaltrafficpolicy: null
status:loadbalancer:ingress: []conditions: []2024/01/31 17:10:20 service2: &Service{ObjectMeta:{test-service  default    0 0001-01-01 00:00:00 +0000 UTC <nil> <nil> map[app:test-app] map[] [] [] []},Spec:ServiceSpec{Ports:[]ServicePort{ServicePort{Name:http,Protocol:,Port:80,TargetPort:{0 8080 },NodePort:0,AppProtocol:nil,},},Selector:map[string]string{app: test-app,},ClusterIP:,Type:,ExternalIPs:[],SessionAffinity:,LoadBalancerIP:,LoadBalancerSourceRanges:[],ExternalName:,ExternalTrafficPolicy:,HealthCheckNodePort:0,PublishNotReadyAddresses:false,SessionAffinityConfig:nil,IPFamilyPolicy:nil,ClusterIPs:[],IPFamilies:[],AllocateLoadBalancerNodePorts:nil,LoadBalancerClass:nil,InternalTrafficPolicy:nil,},Status:ServiceStatus{LoadBalancer:LoadBalancerStatus{Ingress:[]LoadBalancerIngress{},},Conditions:[]Condition{},},}2024/01/31 17:10:20 
2024/01/31 17:10:20 yaml:
metadata:creationTimestamp: nulllabels:app: test-appname: test-servicenamespace: default
spec:ports:- name: httpport: 80targetPort: 8080selector:app: test-app
status:loadBalancer: {}
2024/01/31 17:10:20 service2: &Service{ObjectMeta:{test-service  default    0 0001-01-01 00:00:00 +0000 UTC <nil> <nil> map[app:test-app] map[] [] [] []},Spec:ServiceSpec{Ports:[]ServicePort{ServicePort{Name:http,Protocol:,Port:80,TargetPort:{0 8080 },NodePort:0,AppProtocol:nil,},},Selector:map[string]string{app: test-app,},ClusterIP:,Type:,ExternalIPs:[],SessionAffinity:,LoadBalancerIP:,LoadBalancerSourceRanges:[],ExternalName:,ExternalTrafficPolicy:,HealthCheckNodePort:0,PublishNotReadyAddresses:false,SessionAffinityConfig:nil,IPFamilyPolicy:nil,ClusterIPs:[],IPFamilies:[],AllocateLoadBalancerNodePorts:nil,LoadBalancerClass:nil,InternalTrafficPolicy:nil,},Status:ServiceStatus{LoadBalancer:LoadBalancerStatus{Ingress:[]LoadBalancerIngress{},},Conditions:[]Condition{},},}2024/01/31 17:10:20 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

八数码问题dfs

import java.util.*;public class Main{static String end "12345678x";public static void swap(char[] arr,int x,int y){char temp arr[x];arr[x] arr[y];arr[y] temp;}public static int bfs(String start){//key:String 存放12345678x这种格式的字符//value…

基金分红方式:现金分红与红利再投

基金是一种集合性投资工具&#xff0c;通过基金&#xff0c;投资者可以间接持有多种证券组合&#xff0c;包括股票、债券等。在投资基金时&#xff0c;投资者通常会关注基金的收益分配方式&#xff0c;其中现金分红和红利再投是两种常见的方式。 一、什么是基金分红 基金分红…

Centos7安装原生Nginx并配置反向代理

一、背景 当我的应用程序需要集群化部署之时&#xff0c;必然需要一个反向代理&#xff0c;当然Nginx的大名&#xff0c;这里不做更多的介绍了&#xff0c;这里介绍一下Nginx常用的四大阵营 1 Ngnix 原生版本 nginx news 2 Nginx Plus 商用版&#xff08;收费的&#xff09…

Android 12系统源码_页面管理(四)获取系统当前最上层的Activity信息

前言 很多应用开发人员&#xff0c;在日常开发过程中&#xff0c;经常会遇到一些需求&#xff0c;例如需要知道当前最上层的Activity是哪个&#xff0c;并结合这个Activity的名称来完成一些特定场景的需求。最简单的方法&#xff0c;是在创建Activity的时候将该Actvity存储到一…

20240127在ubuntu20.04.6下配置whisper

20240131在ubuntu20.04.6下配置whisper 2024/1/31 15:48 首先你要有一张NVIDIA的显卡&#xff0c;比如我用的PDD拼多多的二手GTX1080显卡。【并且极其可能是矿卡&#xff01;】800&#xffe5; 2、请正确安装好NVIDIA最新的驱动程序和CUDA。可选安装&#xff01; 3、配置whispe…

经典左旋,指针面试题

今天给大家带来几道面试题&#xff01; 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 我们可以先自己自行思考&#xff0c;下面是参考答案&#xff1a; 方法一&#xff1a; #define _CRT_SEC…

2024美赛数学建模D题思路+模型+代码+论文(持续更新)

2024美赛数学建模A题B题C题D题E题F题思路模型代码论文&#xff1a;开赛后第一时间更新&#xff0c;获取见文末名片 组队环节&#xff1a; 美赛最多是3个人参赛&#xff0c;一般的队伍都是由三人组成&#xff08;当然如果你很大佬也可以一个人参赛&#xff09;&#xff0c;队伍…

力扣hot100 划分字母区间 贪心 思维 满注释版

Problem: 763. 划分字母区间 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 代码随想录 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public List<Integer> partitionLabels(String s){// 创建哈希…

【nginx实战】通过nginx实现http请求的keep alive长连接

文章目录 一. 概述二. nginx与client的长连接1. keepalive_timeout指令2. keepalive_requests指令场景分析 三. 保持和server的长连接1. location设置场景分析 2. upstream设置3. 场景分析场景1&#xff1a;场景2&#xff1a;场景3&#xff1a; 一. 概述 当使用nginx作为反向代…

神经网络的一些常规概念

epoch&#xff1a;是指所有样本数据在神经网络训练一次&#xff08;单次epoch(全部训练样本/batchsize)/iteration1&#xff09;或者&#xff08;1个epochiteration数 batchsize数&#xff09; batch-size&#xff1a;顾名思义就是批次大小&#xff0c;也就是一次训练选取的样…

Vue中使用定义的函数时,无法访问到data()里面的数据

const translateItems1 () > {this.translatedItems this.items1.map(item > {return {...item,label: this.$t(item.labelKey)};}); items1是我们data()里面的数据&#xff0c;无法访问到 解决办法 把箭头函数替换为普通函数 const translateItems1 function() {th…

EXCEL VBA实现重复字段出现次数并列显示

EXCEL VBA实现重复字段出现次数并列显示 Sub dotest() Dim arr, dApplication.ScreenUpdating FalseSet d CreateObject("Scripting.Dictionary")With Sheets("Sheet2")r .Cells(.Rows.Count, "a").End(xlUp).Rowarr .[a1].Resize(r, 1)En…

HTML标签 - 1

文章目录 HTML标签简介HTML书写规范常见网页制作软件常用标签结构标签排版标签标题标签容器标签字体标签文本格式化标签列表标签图片标签 HTML标签 简介 一门使用标记标签来描述网页&#xff0c;展示信息给用户的语言。 超文本标记语言&#xff08;Hyper Text Markup Langua…

保障网络环境清朗与安全:非法关键字过滤的重要性与实现方法

在当今数字化时代&#xff0c;网络已经成为人们获取信息、交流思想的主要平台。然而&#xff0c;随着互联网的普及&#xff0c;一些不法分子也越发倾向于通过网络渠道散布有害信息。为了维护网络环境的清朗与安全&#xff0c;非法关键字过滤技术应运而生。本文将探讨非法关键字…

WMS系统与电商平台快速拉通库存数量

什么是WMS系统 WMS系统是指仓储管理系统&#xff08;Warehouse Management System&#xff09;。它是一种用于管理和控制仓库运营的软件系统。WMS系统通过集成信息技术&#xff0c;提供仓库内货物的存储、出入库、库存管理、订单处理等功能&#xff0c;优化仓库的运作效率和准…

Flask 入门3:Flask 请求上下文与请求

1. 前言 Flask 在处理请求与响应的过程&#xff1a; 首先我们从浏览器发送一个请求到服务端&#xff0c;由 Flask 接收了这个请求以后&#xff0c;这个请求将会由路由系统接收。然后在路由系统中&#xff0c;还可以挂入一些 “勾子”&#xff0c;在进入我们的 viewFunction …

ubuntu22.04 安装conda

要在Ubuntu 22.04上安装Anaconda&#xff0c;可以遵循以下步骤&#xff1a; 首先&#xff0c;打开终端并更新系统包仓库&#xff0c;也需要安装curl工具&#xff0c;这可以通过以下命令完成&#xff1a; sudo apt update && sudo apt install curl -y使用curl命令行工具…

adb 无线连接 操作Android设备

最近集五福活动比较热门 可以用这个工具 用自己擅长的语言写一个循环程序 运行起来就可以 自动帮我们 看视频得福卡了 很方便 while (true) {sleep(mt_rand(15, 25));system(adb shell input swipe 500 2000 500 1000 100); } 1. 首先下载 安卓开发工具 adb adb网盘链接 链接…

Django中的模板

目录 一:基本概念 二&#xff1a;模板继承 在Django中&#xff0c;模板是用于呈现动态内容的HTML文件。它们允许你将动态数据与静态模板结合起来&#xff0c;生成最终的HTML页面。 Django模板使用特定的语法和标签来插入动态内容。你可以在模板中使用变量、过滤器和标签来控…

【HarmonyOS】鸿蒙开发之HTTP网络请求——第5章

HTTP网络请求封装 network/request.ets import { configInterface } from ./type import http from ohos.net.http import { getToken } from ../utils/storage//网络请求封装 export const request (config:configInterface)>{let httpRequest:http.HttpRequest http.c…