Skip to content

Instantly share code, notes, and snippets.

@zoidyzoidzoid
Last active July 15, 2022 02:36
Show Gist options
  • Save zoidyzoidzoid/6af8c80cc5b706e2adcf25df3dc2f7e1 to your computer and use it in GitHub Desktop.
Save zoidyzoidzoid/6af8c80cc5b706e2adcf25df3dc2f7e1 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -e
for full_name in $(kubectl get all -o name | grep -vE replicaset\|pod); do
name="$(echo "$full_name" | sed -e "s/.*\///g")";
type="$(echo "$full_name" | sed -e "s/\/.*//g")";
case "${type}" in
deployment*)
type=Deployment
;;
"service")
type=Service
;;
"configmap")
type=ConfigMap
;;
"job.batch")
type=Job
;;
"cronjob.batch")
type=CronJob
;;
esac
filename="${name}.${type}.yaml"
echo "Exporting ${filename}"
kubectl get $full_name --export -o json --export | jq 'del(.metadata.selfLink)' | jy > "${filename}"
done
# coding: utf-8
import json
from subprocess import check_output
import ruamel.yaml as yaml
def trim_labels(data):
for k, v in data.get('labels', {}).copy().items():
if k not in ('app', 'k8s-app'):
data['labels'].pop(k, None)
if data['labels'] == {}:
data.pop('labels')
def main():
def my_represent_none(self, data):
return self.represent_scalar(u'tag:yaml.org,2002:null', u'null')
yaml.RoundTripRepresenter.add_representer(type(None), my_represent_none)
output = check_output('kubectl get all -o json'.split(' '))
resources = json.loads(output)
for resource in resources['items']:
if resource['metadata'].get('ownerReferences', None):
continue
fn = '{}.{}.yaml'.format(resource['metadata']['name'], resource['kind'])
resource['metadata'].pop('annotations', None)
trim_labels(resource['metadata'])
trim_labels(resource['spec'].get('template', {}).get('metadata', {}))
trim_labels(resource['spec'].get('jobTemplate', {}).get('metadata', {}))
trim_labels(resource['spec'].get('jobTemplate', {}).get('spec', {}).get('template', {}).get('metadata', {}))
resource['metadata']['creationTimestamp'] = None
resource['metadata'].pop('generation', None)
resource['metadata'].pop('namespace', None)
resource['metadata'].pop('resourceVersion', None)
resource['metadata'].pop('selfLink', None)
resource['metadata'].pop('uid', None)
resource['status'] = {}
with open(fn, 'w') as f:
print('Exporting {}'.format(fn))
f.write(yaml.round_trip_dump(resource))
if __name__ == '__main__':
main()
#!/usr/bin/env python3
# coding: utf-8
import json
import sys
from subprocess import check_output
def trim_labels(data):
for k, v in data.get('labels', {}).copy().items():
if k not in ('app', 'k8s-app'):
data['labels'].pop(k, None)
if data['labels'] == {}:
data.pop('labels')
def main():
args = sys.argv[1:]
if not args:
print('No arguments')
sys.exit(1)
output = check_output('kubectl get {} -o json'.format(' '.join(sys.argv[1:])).split(' '))
resources = json.loads(output)
for resource in resources['items']:
if resource['metadata'].get('ownerReferences', None):
continue
resource['metadata'].pop('annotations', None)
trim_labels(resource['metadata'])
trim_labels(resource['spec'].get('template', {}).get('metadata', {}))
trim_labels(resource['spec'].get('jobTemplate', {}).get('metadata', {}))
trim_labels(resource['spec'].get('jobTemplate', {}).get('spec', {}).get('template', {}).get('metadata', {}))
resource['metadata']['creationTimestamp'] = None
resource['metadata'].pop('generation', None)
resource['metadata'].pop('namespace', None)
resource['metadata'].pop('resourceVersion', None)
resource['metadata'].pop('selfLink', None)
resource['metadata'].pop('uid', None)
resource['status'] = {}
print(json.dumps(resources, indent=2, separators=(',', ': ')))
if __name__ == '__main__':
main()
#!/usr/bin/env python3
# coding: utf-8
import sys
import ruamel.yaml as yaml
def split_yaml_file(multiple_document_file):
with open(multiple_document_file) as f:
docs = list(yaml.round_trip_load_all(f))
for doc in docs:
fn = '{}-{}.yaml'.format(doc['metadata']['name'].split('.')[0], doc['kind']).lower().replace('customresourcedefinition', 'crd')
print('Writing {}'.format(fn))
with open(fn, 'w') as f:
f.write(yaml.round_trip_dump(file))
if __name__ == '__main__':
if len(sys.argv) <= 1:
print(
"Specify file name for file to split\n"
"e.g. ./split_yaml_resources.py calico.yaml")
sys.exit(1)
split_yaml_file(sys.argv[1])
@mosheavni
Copy link

What about removing nodePort?

@zoidyzoidzoid
Copy link
Author

@MosheM123 That should be easy enough. I'm planning on moving this to a repo, so folks can PR it.

@mosheavni
Copy link

@MosheM123 That should be easy enough. I'm planning on moving this to a repo, so folks can PR it.

aight, let me know, I'd love to contribute.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment