I need to access and store a pod properties in kubernetes during creation. I can access to regular variables in the yaml without problem but i don't know (and could not find online) the syntax to access elements of a list.
apiVersion: "agones.dev/v1"
kind: GameServer
metadata:
# generate a unique name
# will need to be created with `kubectl create`
generateName: ed-
spec:
ports:
- name: game
portPolicy: Dynamic
containerPort: 7777
protocol: UDP
template:
spec:
containers:
- name: ed-server
image: myimage
imagePullPolicy: Always # add for development
command: ["sh", "-c"]
args:
- echo MY_ID=$(MY_ID)\nMY_IP=$(MY_IP)\nMY_PROTOCOL=$(MY_PROTOCOL)\n";
env:
- name: MY_ID # THIS WORKS FINE
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_IP # THIS WORKS FINE
valueFrom:
fieldRef:
fieldPath: status.podIP
#- name: MY_PROTOCOL # THIS FAILS
# valueFrom:
# fieldRef:
# fieldPath: spec.ports[0].protocolI will like to know the correct syntax and get some proper documentation source on the topic.
EDIT: I've put the actual yaml i'm using after requested. I'm using agones framwork but the question is generic. If the parser knows how to access a literal and a dictionary it should be able to access an array.
Thanks!
First of all, your YAML isn't a valid one. Seems like you've Frankensteined both Deployment and Pod YAMLs.
Your YAML should look like below:
apiVersion: apps/v1
kind: Deployment
metadata:
name: foo
spec:
replicas: 1
selector:
matchLabels:
app: foo
template:
metadata:
labels:
app: foo
spec:
containers:
- name: foo
image: dummy_image:0.0.1
ports:
- name: game
portPolicy: Dynamic
containerPort: 7777
protocol: UDPAnswer:
Unfortunately, the ports field is not supported by the fieldRef.
Check Downward API for the supported field list.
Since the port information doesn't change dynamically on the pod runtime, you can export it like this:
env:
- name: MY_PORT
value: "game"