Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
devel:kubic
kubeconfig-merger
kubeconfig-merger-0.1.0.obscpio
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kubeconfig-merger-0.1.0.obscpio of Package kubeconfig-merger
07070100000000000081A40000000000000000000000016448370800000007000000000000000000000000000000000000002300000000kubeconfig-merger-0.1.0/.gitignore dist/ 07070100000001000081A40000000000000000000000016448370800000462000000000000000000000000000000000000002900000000kubeconfig-merger-0.1.0/.goreleaser.yamlbefore: hooks: # You may remove this if you don't use go modules. - go mod tidy # you may remove this if you don't need go generate - go generate ./... builds: - env: - CGO_ENABLED=0 goos: - linux - windows - darwin archives: - format: tar.gz # this name template makes the OS and Arch compatible with the results of uname. name_template: >- {{ .ProjectName }}_ {{- title .Os }}_ {{- if eq .Arch "amd64" }}x86_64 {{- else if eq .Arch "386" }}i386 {{- else }}{{ .Arch }}{{ end }} {{- if .Arm }}v{{ .Arm }}{{ end }} # use zip for windows archives format_overrides: - goos: windows format: zip checksum: name_template: 'checksums.txt' snapshot: name_template: "{{ incpatch .Version }}-next" changelog: sort: asc filters: exclude: - '^docs:' - '^test:' # The lines beneath this are called `modelines`. See `:help modeline` # Feel free to remove those if you don't want/use them. # yaml-language-server: $schema=https://goreleaser.com/static/schema.json # vim: set ts=2 sw=2 tw=0 fo=cnqoj 07070100000002000081A4000000000000000000000001644837080000097B000000000000000000000000000000000000002200000000kubeconfig-merger-0.1.0/README.md# KubeConfig-Merger ## Introduction kubeconfig-merger is a command-line tool that concatenates two Kubernetes configuration files (kubeconfig files) into a single file. The resulting file can be used as a single kubeconfig file to manage multiple Kubernetes clusters. ## Prerequisites To use kubeconfig-merger, you must have Go version 1.16 or later installed on your system. You can download Go from the official website: https://golang.org/dl/ ## Installation ### Downloading the Pre-Compiled Release You can download a pre-compiled release of kubeconfig-merger from the [release page](https://github.com/QJoly/kubeconfig-merger/releases). Select the latest release and download the binary for your operating system. Once you have downloaded the binary, you can use it directly without needing to compile the code. ### Compiling from Source 1. Clone this repository: ```bash git clone https://github.com/QJoly/kubeconfig-merger ``` 2. Change to the directory where the repository was cloned: ```bash cd kubeconfig-merger ``` 3. Compile the Go code into an executable binary: ```bash go build -o kubeconfig-merger main.go ``` This will create an executable binary named `kubeconfig-merger` in the current directory. ## Usage To use kubeconfig-merger, run the executable binary with the following command: ``` ./kubeconfig-merger <first-file> <second-file> ``` Replace `<first-file>` and `<second-file>` with the names of the two kubeconfig files you want to concatenate. For example, if you have two kubeconfig files named `kubeconfig-1.yaml` and `kubeconfig-2.yaml`, you can concatenate them into a single file named `combined-kubeconfig.yaml` with the following command: ``` ./kubeconfig-merger kubeconfig-1.yaml kubeconfig-2.yaml ``` The concatenated kubeconfig file will be saved as `combined-kubeconfig.yaml` in the current directory. [![asciicast](https://asciinema.org/a/5Myq4ZzzvYo9uSuhx7LgMMPEH.svg)](https://asciinema.org/a/5Myq4ZzzvYo9uSuhx7LgMMPEH) ## Purpose The purpose of kubeconfig-merger is to simplify management of multiple Kubernetes clusters by allowing you to use a single kubeconfig file to access them all. By concatenating multiple kubeconfig files into a single file, you can avoid the need to switch between different kubeconfig files when working with different clusters. This can make it easier to manage and automate Kubernetes operations. 07070100000003000081A40000000000000000000000016448370800001608000000000000000000000000000000000000002B00000000kubeconfig-merger-0.1.0/examples/first.ymlapiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1EUXlOVEU1TXpReU1Gb1hEVE16TURReU1qRTVNelF5TUZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS0NZCklGZ2VNdWNOeGZWanpIY3RkclNzREdiNnRNT08zVktNS0VHVEU1em92ZGNZTXRZdHhydThTMTBoWVFWMUVCSlAKNUtndnd3Z2h1dVBaN0IrbTJRaHpZNGpxdE5uOVk5UXpEN3FuZjlvUFV3UG9sOEtFcXFVaGdjZUFPQUtyaDRGVwpPU0R2S2MwUmdSeE10UEMyRjFnQkpNbnRFTkZibWg0K1FlM1BSTkJMZGpLM0ZDSlVEQnRERFB6d3d4ZzF1U1RFCnozc2MvTnpNMVZmUm9pc2ZiY0hWVnMwM3A0ZzZZd1ZoalFDZHN3Yk1yU1NkbzJDbXo1MFJxam9OQXdiZ01OeVUKTXI4azVRQjAxMXV2OE55TmlXakMxN01UaGVpd2o4T3NWaUZHK0FwU0MrZnlXWXpZd2lUVUtvZEd0a09DWnJZMApHOGNyYnVCZUVPRGtEYUw1OERFQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZBME51cysxQkYrNnpmSHNlT0U4NFpYSFZmaEhNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRUlNSkFhZkRuS0NPLzYwR05iVwpuLzF0Ni9LTjdncVI3cFBlOGI5eGUvcW1peDhjS05IK09kL3B1V0d4b09za2xaV2NZVHZ2Nm9raU9YSEN4QW1GClVKOGpGUDhjVkJnNDB1M28yNnNXSVdrMGpXODU4NEVWbEdYckdSTHdxZmZZWjlQakhpckN5NEw4aGJESVRGTlgKUW9Vb2xIb2t0RlE2aTBUNWxKcFVWQ1hOSWdOaGl2NU1UZ2FUdGFpc3hxZm8rSjFpQytrQXloSWMzMENMSjlkMgo0NTJDQlQ0bG1TUG1SZEE4R1lkYit6SVpTVWFHbjBoQ2Mvc3JKUFVUc2JVb1lhR3FCbUR2cm1YSmpHY0FRVktMClVVcDN0ZURiaC83UHFSVDIvYW1EN3JFa29kZ1dtOXVuazR4Z1NPMUhBOXI4eEZHb21BVjJEaFRCT2RxejFwOHMKbThvPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== server: https://127.0.0.1:41429 name: kind-first-cluster contexts: - context: cluster: kind-first-cluster user: kind-first-cluster name: kind-first-cluster current-context: kind-first-cluster kind: Config preferences: {} users: - name: kind-first-cluster user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJUCtPQ2dSOC9Tdnd3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TXpBME1qVXhPVE0wTWpCYUZ3MHlOREEwTWpReE9UTTBNakZhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXd5WUlZTjA1WlRHWm1LbGEKcnUrSk9UdjZReUdzMDUweS9ENmhtN2ZSaXNGRXVscVJPMm1ZQVlyczl3ZnREVW1WblM1L0JIU01wMmVRS1JxZQozdDA2ZmcvMGpZUUt2ajJLQUY4ZXVrVDNrK1ZNaks1MkVRaXVYbnA1eXkySUVURmZCbnl0aWJXWkUzRE13VktMCjZlUDlrdnp4VWEwMjRiczluQ3BKemsycjZDa2VtdTdxeldRMWF4YW94cTVMYlp0S05KWTgwdzJwb3ExblRYc2gKeEF3dUdBakVNaDRSczNsUm5GMXpoKzNCQUNqM3BtTmJzeFloTlhZaXYxZzRUZTBTS0JKZUd6SHZteDBvTWs2UQpIeWhWaUVCbGlQZFVwMGd2NG9rS3FFQi9SaUdKWDFUQzFPczZ5MVFlN1NoaUF4Q24zbGVWTXY3dU54Z1BwVnRSCkJ4QVNwUUlEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JRTkRiclB0UVJmdXMzeDdIamhQT0dWeDFYNApSekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBQVQvTlk5WngrbWhscTNoaEJKZ0NZbGpleDFsQkRRVjN5SkdkCm1ReUN1V2c4eGRFZGRLcVpUMjJkV1lBaEZ2cEtDYld2TldvNnlaeWtNaXN5NDV3QW54OEMybktlQ3JqSkpyZEwKRnJBYjVyNHI2YmRNTFNDMWoxWi9vZjc3NVc2OHJjWDJ5SWZFakI5dkYxYUMrSWk2bHdKUHc5dXNWaytVMU11WQpoaDdtUnlDc2VTSHkzdXF3WVBPWWlPSWhHYnZNRGtIVVl3blZZVUFxMTFaUnd0T3pGMzdLR3VVNmxSWXlxSFE5CkdaelEzdm5QS1ROeUY0cThWdmVXMmNuZFY0Tlo3d3V1YTNpMTFTK1NzaHZ5dUhaZ2NMWkgvYmdCRUxCUUozL2oKN04zbUJsRFRRR1ljNzBEdGROZjRxVjdEY2lGcEFkMmVnNUs5Qml4anBrM0N0MjdMTnc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBd3lZSVlOMDVaVEdabUtsYXJ1K0pPVHY2UXlHczA1MHkvRDZobTdmUmlzRkV1bHFSCk8ybVlBWXJzOXdmdERVbVZuUzUvQkhTTXAyZVFLUnFlM3QwNmZnLzBqWVFLdmoyS0FGOGV1a1QzaytWTWpLNTIKRVFpdVhucDV5eTJJRVRGZkJueXRpYldaRTNETXdWS0w2ZVA5a3Z6eFVhMDI0YnM5bkNwSnprMnI2Q2tlbXU3cQp6V1ExYXhhb3hxNUxiWnRLTkpZODB3MnBvcTFuVFhzaHhBd3VHQWpFTWg0UnMzbFJuRjF6aCszQkFDajNwbU5iCnN4WWhOWFlpdjFnNFRlMFNLQkplR3pIdm14MG9NazZRSHloVmlFQmxpUGRVcDBndjRva0txRUIvUmlHSlgxVEMKMU9zNnkxUWU3U2hpQXhDbjNsZVZNdjd1TnhnUHBWdFJCeEFTcFFJREFRQUJBb0lCQUh0bE1TY091NXdoSU41SApOL0FseHI5S0RaVWxWZ0w1QTZROGRqUGdwNzcxTm1BZnBIWE03ekVLaDR3c2x0Z3dEMHEwZTl4MVZmc0VvVU5jCmNkaTZTcUlydEpkSFJ3UEVKZDdXUnJmQnBFc0FVc2NpQ2NYN2wwWm1hMXp1RFh2Um5DU2Q4WjJDRnFrVVNtUnoKcmNUWFJTQU1rUXIwWEIrZ0pmVDVTSElLNndpQTNMSUtPUWNHNmRib0ZYY2hkaXVpS3NjY2JnYTVxTi9Gd2w0RwpVWjREeDlzZmJoS2V4S0hHVnNYdDdTRFJMUVY1ckJxenlsMjB6QnpaRnBpRUJuWGVKZURheFBpZktNOWJmVUkzCmNqU3pHdXVjb3VmdHptclhaWXF0dkJ0UlhPcXdWcjMwMzJzckVGYnVBNkNaTU9ubGhLS3daQnl4NGFEMTZodVIKckZxUWtvRUNnWUVBMUhib1hOSDJBWTI3RmRTVWdNV2RFY2MxaE9uVkJ1d0xIdGU1TElWcUVGVVVCVGZ0VkwrSQoyTlBRN1ZrbzlJRmx6YkM5ZWo5eU5sZlljL3lmc0ZCMW1sRzV2SHR3VU1JbHcwbzAwdzBZYUluRkdhZFg1TVdXCkoyZmt1V05SWFJmSUFYSmRuWmRHSXk5Ykw3d2VoOWdhOVgwbVpDRlZYWi9FZXpIcFlHTEt3OU1DZ1lFQTZ5TEwKK05LQ3FGQk1lVUJ3ZmhKazRKazRFQTd1YUcvNGRiVEQxcE96M3hwSmZ0RCtMMmlCT05zYUpUb01FN2dNbC9GLwpUUlRCNTVmL3o2bzl4ckdISElPRFM0TVJGSlBBS1oya3lCRFg0b1pYbjZ1LzZyQTlHZHpGZklHS0trOTZpUVgvCjNCa0NPcFkvNzdIQUFoU3VQa251N1B3dE8zaUtSUkpvbVpYYjNLY0NnWUVBcjBFQ1BJWm9nVEdTejlnUlF3TSsKbzhxSnlBQkYyemJibVc1aWJXb0Rha056aHpaeHkwVk9zV1JQWTJqM1VuQm1ORHdFbjVFME9jVk9ZNlpQWnRXSApuR3FyWmVFQWJXMG9UeVduMnl0akpkLzJ1RW1FUTg0RUpLOGJTUnkyb2E2YktTNVlNRVQyOHREK1M2ckdHRkhYCk13WXZvOHFuS3RvOTdVem5iNzB0K2tjQ2dZRUEybVE1V3VQNjR1V2lBY1J1TjBwU1U2RTd4djUzUkowckFmaGgKSkwyUEJScmZSR0JNbGkvVVJjQ0s2aVNkN3ZxMUI3TVA3OEhsejNzSDZCTlF5V2s5K3FmVG5LRWhqaUVsREFJVgplSlRjVHRORU0xTk1MMmg5ZDdYcjN4WmFBNjVLTzFaTkxGbzJEY0JicGY5TVBTS0VLK3B6ZGIxTExiOXBmWG41Cm1SenRWbVVDZ1lFQW82bzNkdXRHalUyYzVvWnc5c1JNRFJ0bFdweXdUaUlTSGtudG9vcGJ6UEh6U2luYWRsZ2gKSW1SUG1zN3pxUkJldXVFMkNHTEIwdDVXUUxaN0hvQ0U2bWFERVVDenhSbExDcXhEcHJCY1I0Sm1WZlg3L1BKKwpYTjM2TmMreXBPcWM5NFFkMEVWS1c1YzUzdVJLcU1GQ1BMaE5BWXBFb2FQZjRMaWJ5ZFVXVTJFPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= 07070100000004000081A40000000000000000000000016448370800000095000000000000000000000000000000000000003300000000kubeconfig-merger-0.1.0/examples/kindcluster-1.ymlkind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 name: first-cluster networking: podSubnet: "192.168.101.0/24" serviceSubnet: "192.168.102.0/24" 07070100000005000081A40000000000000000000000016448370800000096000000000000000000000000000000000000003300000000kubeconfig-merger-0.1.0/examples/kindcluster-2.ymlkind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 name: second-cluster networking: podSubnet: "192.168.103.0/24" serviceSubnet: "192.168.104.0/24" 07070100000006000081A4000000000000000000000001644837080000160E000000000000000000000000000000000000002C00000000kubeconfig-merger-0.1.0/examples/second.ymlapiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1EUXlOVEU1TXpVek0xb1hEVE16TURReU1qRTVNelV6TTFvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTnJsCkhnVCtPNnZIN3pDYmRHQndrbXZZK21uODU5SDVkNWlITFdlVTJVMDdzVFBMcHZheHlnYzBHcThyT1ZIa2l0SHYKeXZMOEwybEtRNHhMeTdiNEMxNWFkeHFjT2krbHQ4a096SVJSVG5sUGVzQVN2azJlME5FSTFGaVVKV1NHaVFsVQpHVndSdXErd0lGSEhwUWJVYXpXK3VSUmNSWUFHS1dmRmd0eWEyR205K3IwS0F2cG9taFkwZDZhaHJaYjdhU09NCklUd1RHWDIwWk1zRFg5U3FDSjh5d2YyeTcyeWNWd2dUTTB3dmhYK0hNSThobUNVUkhmT2xRT2hEYlg0NE85Z2MKTkx1NUVQTUNucFdEUFBnREYwUEgwNjRzRmlCLzFsbldPR2R5eVZ5bVYxSk44TktlY2cvZzdzZTlsNnIvcG5lUAptN2lxKzI3VGlaZmswQTAxQnhFQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZKY3Y5UWs2eTVMU2FiUndkNDFIeE9DM1RmR3VNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRFJJaFpZM1lIQ3pMZHhPVWlEKwpFTEZUczNDZVJwcE5yTVhPb2g4RlpiOG5yYlFvNjR6SVdjN0R0MWZHaXpWdHZTa2haMkVYRWRDaDd1UDlWWktYClQxZllycWIzNGxHVGcxdG5WaXMyblF5YmZ0TUxUUXhzRmlFZlE0SVBQT0wrSjU0SkZYQmlPc0M0Z2lwWHlFRWMKQzgvMkV5WFJQMWZ5MTJBZ0ZMbThGV3lnVzdIaWdxNVI2N3R0YWZpUG00a3p5dERTblgrZU1icVBURUxzVUQvZApmWGdla2pEbk9xZEgyaFFRS1Z2VFp5WDlpMUFjWWJRclAwdndxVGUvTWFxem5sdTR0N3d0dDBDVnM2bUorUVZKCmZXSVlSVjQ4Q2taRVRLUmQvMVpLY0I4M1J5aVBwWEJ5S0UzNXJkN1BJemZsU0pYclUyTDlXMEZRWlFLcnZQZHQKNkhRPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== server: https://127.0.0.1:41439 name: kind-second-cluster contexts: - context: cluster: kind-second-cluster user: kind-second-cluster name: kind-second-cluster current-context: kind-second-cluster kind: Config preferences: {} users: - name: kind-second-cluster user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJVWd2YXplbUs5UVV3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TXpBME1qVXhPVE0xTXpOYUZ3MHlOREEwTWpReE9UTTFNelJhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXNQOHRCR2JxaW83UU40VmoKdWthSlFBclhQbk9hMEpnRzNLM3VWUzA3R0FGQjVzQ2lsWlFhWWVFVDNiUWZ2bU0xWjV5bWNjSjNTUjFka0RONgpONXZvT3ZUZE9iMjFLMFVKMTNScUtDNlJmdmhnYWFDOFQzb0UvSDhwRW1JNEgyNVJmUzJUME5LVUdGMUg5aFA2CkxLQ0pCWk5xdHhCVXdPc2tJRUtYM0RIY0l2UjlvR1JGc25xMUI0MUMvaElObm43dUVYV1prd3cxNFRYWDlTWlAKU1ZLWFlaS0dmZmorcjFxQmREYTMvdXdFMWEwN2FNLzZPa0hETm1vR3Z6ZmVrcEwvbkZmb24ydFlQV2RiYjVwWgpOalB6THpQYlF5a0tMckZBMFk2bC83eWplK3lrR3hFS1RrOHdZaFdzd25oYWVhblNRMVg4Yi85OFhYdUV6Ym10CmVGMENtd0lEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JTWEwvVUpPc3VTMG1tMGNIZU5SOFRndDAzeApyakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBVmthanFTMC9zYnRPc2hhSmlkSUVMV0dmcEs0dHk1elRVVFFRCkZJL0N4S2tTVkRwb29aaE9nTnEwTzJJcWtJb0dpcGY5MjlmUERxM3ljVVpkM2tuK3lycmF0MU9uRVMvT0xicVYKQVMwSGJOVHRqNjNrKzhPMnlmcndYVGl0UmdaV1d2SklYWnU4SlQrdXRJMWZKanU4ZzY4dzF3bm5xcUVGSGRyeQpmK3lER0Q0d0o0ODQwazhhOWNuZUk2ZmhmOHU5K3hIZUkwNy9wbFc3N3pHaCtoanE0SzE0VjRVRG83aUY4Z0h6Ckhub21nUTNNMlE1Q3NnSktjZWQrcGVOQnBOTzBBbHR6WU9iUVlIRk1nMzJVZDVrOGdNNzNOVjQ1VXk3RTA5Z3cKUjVxdkd3QnRpZ25mTTROVjJ3SXZsOHExcmo3S3RlaU5zR3NLSjJ6dFBWeFd0bllWclE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBc1A4dEJHYnFpbzdRTjRWanVrYUpRQXJYUG5PYTBKZ0czSzN1VlMwN0dBRkI1c0NpCmxaUWFZZUVUM2JRZnZtTTFaNXltY2NKM1NSMWRrRE42TjV2b092VGRPYjIxSzBVSjEzUnFLQzZSZnZoZ2FhQzgKVDNvRS9IOHBFbUk0SDI1UmZTMlQwTktVR0YxSDloUDZMS0NKQlpOcXR4QlV3T3NrSUVLWDNESGNJdlI5b0dSRgpzbnExQjQxQy9oSU5ubjd1RVhXWmt3dzE0VFhYOVNaUFNWS1hZWktHZmZqK3IxcUJkRGEzL3V3RTFhMDdhTS82Ck9rSERObW9HdnpmZWtwTC9uRmZvbjJ0WVBXZGJiNXBaTmpQekx6UGJReWtLTHJGQTBZNmwvN3lqZSt5a0d4RUsKVGs4d1loV3N3bmhhZWFuU1ExWDhiLzk4WFh1RXpibXRlRjBDbXdJREFRQUJBb0lCQVFDc3NuNXhJaDNNemVYWgpsbndrLzdmaFZmS0l5L0dOZ0JpSjcrZHhFbTNyVVNiRkNNWmFYaVNUeGpKRkN3QkNHcmk3L1B2bVdaRmNOSnZiCkhHOHVuUit0anNmZ0Uvc1dXZ2x0UVBobmRuQ2VTNmgreDhlVllJQkhBYWZJZVM4N2M3OXMvVENSK3pWbXhIVjMKWkN5Z3FJNnBjeG9Ydm9hRHFhc1pFd0RyWjNiY1hzUmNKKzliQkhrMVRSUElzVGgxSGg1WVlzOGtQSmxDbHphegpPZ0NJdWZaNDNKREZzbjhsMnExNy8vV2xhU2VsR2pCd1B1VkViZVl6WFJzbGFZZ043d0IvdFlzZUlqV2hMYnNZCmVBcnMreWlJUTNJY1pLOHF6VmdnTVpESmdQSUQwamxsN2l4djRrUWpUNjlYdnFyTXg5Qy9iZ0tMQnZHSlkyMm4KYVdFOUdncjVBb0dCQU5lQTc3ajl5N3E2Znh5Rjk2Um9ONFN6SWJUS2NMZU1zSzkyeUZWSllSYlE1VnRDajdvZgp1ckRqaTRpN0ZNdGpyNXJrR3BkcXArYnk4TEtMaGNJaWNGOVE4alB5d0Y0MytibWIyTGF3NnpZa1lDbVNDbjh1CnBTaWZsM2xDY043czVrVDdyNFB5MjhsTXIrZlYzbEhmQTZBRkZTWHZ3S3pVRkpVZVljMEhuNnBsQW9HQkFOSkIKMGRMZzE1WjF5UDZYZ0l2UkFHbW9vSDlXRlA3enNlNTJSUEt3eWhOV0FvY1hCK2FZU2RYaEJCWWhRb0lraVczVApPUUZLTXB6MzF2ZWo2K1lkRFRmUVd2b3I1MmJLQkFoRU0xR25zWUNlNU81eDJZbVV2YkVCSE44SlVIcFAwMXZkCi9wWWFQM2xWUExNRzhiMGlLY2Q3Z2NNRkl6cU9MS0ZITjdmdWdLai9Bb0dBWGxJa21nY2JBQ05ZTnhlN2g4M0YKWHVNNFFYVEpXTXpQR0QwWStac2dUMmdtdW9hcmVYOGhxd0lzdEMrTnJtZDNHSWYxeTRmMjdQSXZ2eldwMllwUgpQS2FsRzIrSUdyVE5MQnUyQWwvMDBzR2hCUkRTWDAvL0lZU1lPNDZFOEUwbmk5SE14Q2VyWXJPWjJoS1ZONmd3CllmMVhnRDhyU1htWmVKclBtM2xXdkxFQ2dZRUFubXN2VUFkUENMTzRmSExrVFBSdHJpNTZ0MWJCdlJNYWRvU3cKRUhlNTJmWE5NOEhibHhnWlVjZ1h6eURDUHRLT3Bhd25ZRnhxWkRDc3pLdTZtd2c2cEZvZG9pOGdUQ2RjQUdwNgpqRVNnamp1cVhDcDE4SjZjaWxnL1M2RjEvS0pXcXZwSnp3ajUyRTZyekd3b0NneEtsRjN2ZUdSUGxkZjNzcEM1Clg2R1pXVHNDZ1lBS0dLN293NisvbFErMVRnYXV6OFpYRktHKzAzWlgvMnFvNXdHZFdYdDJzN2dwOEF1NHNnNHYKb2s3WlJhQ0Nnd0sramwyZWhPTFJmc29EeHBSWnFqK3o2MjEwRURqK29Va0ZCZmc5ekJXWFJ1L2IrRTI4amIxdQpFeGVJMjEzVjRBUUtnaGlha2pBbldaTGZ2WW5YbjViUUNUNFBOeTZtTHdUVG5BbUdaYnQrN0E9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= 07070100000007000081A40000000000000000000000016448370800000040000000000000000000000000000000000000001F00000000kubeconfig-merger-0.1.0/go.modmodule concatenate.go go 1.20 require gopkg.in/yaml.v2 v2.4.0 07070100000008000081A40000000000000000000000016448370800000168000000000000000000000000000000000000001F00000000kubeconfig-merger-0.1.0/go.sumgopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 07070100000009000081A40000000000000000000000016448370800000D42000000000000000000000000000000000000002000000000kubeconfig-merger-0.1.0/main.gopackage main import ( "fmt" "io/ioutil" "os" "path/filepath" "gopkg.in/yaml.v2" ) type kubeconfig struct { APIVersion string `yaml:"apiVersion"` Kind string `yaml:"kind"` Clusters []struct { Name string `yaml:"name"` Cluster struct { Server string `yaml:"server"` CertificateAuthorityData string `yaml:"certificate-authority-data"` } `yaml:"cluster"` } `yaml:"clusters"` Contexts []struct { Name string `yaml:"name"` Context struct { Cluster string `yaml:"cluster"` Namespace string `yaml:"namespace"` User string `yaml:"user"` } `yaml:"context"` } `yaml:"contexts"` Users []struct { Name string `yaml:"name"` User struct { ClientCertificateData string `yaml:"client-certificate-data"` ClientKeyData string `yaml:"client-key-data"` Username string `yaml:"username"` Password string `yaml:"password"` } `yaml:"user"` } `yaml:"users"` } func main() { if len(os.Args) != 3 { fmt.Println("Usage: kubeconfig-merger <first-file> <second-file>") os.Exit(1) } // Load first kubeconfig file firstKubeConfig, err := loadKubeConfig(os.Args[1]) if err != nil { fmt.Println("Error loading first kubeconfig file:", err) os.Exit(1) } // Load second kubeconfig file secondKubeConfig, err := loadKubeConfig(os.Args[2]) if err != nil { fmt.Println("Error loading second kubeconfig file:", err) os.Exit(1) } for _, firstCluster := range firstKubeConfig.Clusters { for _, secondCluster := range secondKubeConfig.Clusters { if firstCluster.Name == secondCluster.Name { fmt.Printf("Error: Both kubeconfigs have a cluster named '%s'\n", firstCluster.Name) os.Exit(1) } } } // if hasDefaultCluster(firstKubeConfig) && hasDefaultCluster(secondKubeConfig) { // fmt.Println("Both kubeconfig files contain a cluster named 'default'") // os.Exit(1) // } // Concatenate clusters for _, cluster := range secondKubeConfig.Clusters { firstKubeConfig.Clusters = append(firstKubeConfig.Clusters, cluster) } // Concatenate contexts for _, context := range secondKubeConfig.Contexts { firstKubeConfig.Contexts = append(firstKubeConfig.Contexts, context) } // Concatenate users for _, user := range secondKubeConfig.Users { firstKubeConfig.Users = append(firstKubeConfig.Users, user) } // Write concatenated kubeconfig file err = writeKubeConfig("combined-kubeconfig.yaml", firstKubeConfig) if err != nil { fmt.Println("Error writing combined kubeconfig file:", err) os.Exit(1) } fmt.Println("Kubeconfig files combined successfully!") } func loadKubeConfig(filename string) (*kubeconfig, error) { // Read kubeconfig file data, err := ioutil.ReadFile(filepath.Clean(filename)) if err != nil { return nil, err } // Parse kubeconfig file kc := kubeconfig{} err = yaml.Unmarshal(data, &kc) if err != nil { return nil, err } return &kc, nil } func writeKubeConfig(filename string, kc *kubeconfig) error { // Convert kubeconfig to YAML data, err := yaml.Marshal(kc) if err != nil { return err } // Write YAML to file err = ioutil.WriteFile(filepath.Clean(filename), data, 0644) if err != nil { return err } return nil } //func hasDefaultCluster(kc *kubeconfig) bool { // for _, cluster := range kc.Clusters { // if cluster.Name == "default" { // return true // } // } // return false //} 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!41 blocks
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor