Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions pkg/apis/machineconfiguration.openshift.io/v1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ type MCOConfigSpec struct {
CloudProviderConfig string `json:"cloudProviderConfig"`
ClusterName string `json:"clusterName"`

// The openshift platform, e.g. "libvirt", "openstack", or "aws"
// The openshift platform, e.g. "libvirt", "openstack", "aws", or "none"
Platform string `json:"platform"`

BaseDomain string `json:"baseDomain"`
Expand Down Expand Up @@ -118,7 +118,7 @@ type ControllerConfigSpec struct {
CloudProviderConfig string `json:"cloudProviderConfig"`
ClusterName string `json:"clusterName"`

// The openshift platform, e.g. "libvirt", "openstack", or "aws"
// The openshift platform, e.g. "libvirt", "openstack", "aws", or "none"
Platform string `json:"platform"`

BaseDomain string `json:"baseDomain"`
Expand Down
4 changes: 4 additions & 0 deletions pkg/controller/template/render_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ func TestCloudProvider(t *testing.T) {
}, {
platform: "libvirt",
res: "",
}, {
platform: "none",
res: "",
}}
for idx, c := range cases {
name := fmt.Sprintf("case #%d", idx)
Expand Down Expand Up @@ -251,6 +254,7 @@ var (
"aws": "./test_data/controller_config_aws.yaml",
"openstack": "./test_data/controller_config_openstack.yaml",
"libvirt": "./test_data/controller_config_libvirt.yaml",
"none": "./test_data/controller_config_none.yaml",
}
)

Expand Down
13 changes: 13 additions & 0 deletions pkg/controller/template/test_data/controller_config_none.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: "machineconfigurations.openshift.io/v1"
kind: "ControllerConfig"
spec:
clusterDNSIP: "10.3.0.10"
cloudProviderConfig: ""
clusterName: "my-test-cluster"
baseDomain: "installer.team.coreos.systems"
etcdInitialCount: 3
platform: "none"
etcdCAData: ZHVtbXkgZXRjZC1jYQo=
rootCAData: ZHVtbXkgcm9vdC1jYQo=
pullSecret:
data: ZHVtbXkgZXRjZC1jYQo=
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,%5Bregistries.search%5D%0Aregistries%20%3D%20%5B'registry.access.redhat.com'%2C%20'docker.io'%5D%0A
verification: {}
filesystem: root
mode: 420
path: /etc/containers/registries.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,dummy%20root-ca%0A
verification: {}
filesystem: root
mode: 420
path: /etc/kubernetes/ca.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,apiVersion%3A%20v1%0Akind%3A%20Pod%0Ametadata%3A%0A%20%20name%3A%20etcd-member%0A%20%20namespace%3A%20kube-system%0A%20%20labels%3A%0A%20%20%20%20k8s-app%3A%20etcd%0Aspec%3A%0A%20%20initContainers%3A%0A%20%20-%20name%3A%20discovery%0A%20%20%20%20image%3A%20%22registry.svc.ci.openshift.org%2Fopenshift%2Forigin-v4.0%3Asetup-etcd-environment%22%0A%20%20%20%20args%3A%0A%20%20%20%20-%20%22run%22%0A%20%20%20%20-%20%22--discovery-srv%3Dmy-test-cluster.installer.team.coreos.systems%22%0A%20%20%20%20-%20%22--output-file%3D%2Frun%2Fetcd%2Fenvironment%22%0A%20%20%20%20-%20%22--v%3D4%22%0A%20%20%20%20securityContext%3A%0A%20%20%20%20%20%20priviledged%3A%20true%0A%20%20%20%20volumeMounts%3A%0A%20%20%20%20-%20name%3A%20discovery%0A%20%20%20%20%20%20mountPath%3A%20%2Frun%2Fetcd%2F%0A%20%20-%20name%3A%20certs%0A%20%20%20%20image%3A%20%22quay.io%2Fcoreos%2Fkube-client-agent%3A36c62ccd7b16b522450c61e96fc556b217ee24f5%22%20%23%23%20FIXME(abhinav)%3A%20these%20images%20should%20be%20replacable%20by%20release%20image.%0A%20%20%20%20command%3A%0A%20%20%20%20-%20%2Fbin%2Fsh%0A%20%20%20%20-%20-c%0A%20%20%20%20-%20%7C%0A%20%20%20%20%20%20%23!%2Fbin%2Fsh%0A%20%20%20%20%20%20set%20-euo%20pipefail%0A%0A%20%20%20%20%20%20source%20%2Frun%2Fetcd%2Fenvironment%0A%0A%20%20%20%20%20%20%5B%20-e%20%2Fetc%2Fssl%2Fetcd%2Fsystem%3Aetcd-server%3A%24%7BETCD_DNS_NAME%7D.crt%20-a%20%5C%0A%20%20%20%20%20%20%20%20-e%20%2Fetc%2Fssl%2Fetcd%2Fsystem%3Aetcd-server%3A%24%7BETCD_DNS_NAME%7D.key%20%5D%20%7C%7C%20%5C%0A%20%20%20%20%20%20%20%20%2Fusr%2Flocal%2Fbin%2Fkube-client-agent%20%5C%0A%20%20%20%20%20%20%20%20%20%20request%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20--kubeconfig%3D%2Fetc%2Fkubernetes%2Fkubeconfig%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20--orgname%3Dsystem%3Aetcd-servers%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20--assetsdir%3D%2Fetc%2Fssl%2Fetcd%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20--dnsnames%3Dlocalhost%2Cetcd.kube-system.svc%2Cetcd.kube-system.svc.cluster.local%2C%24%7BETCD_DNS_NAME%7D%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20--commonname%3Dsystem%3Aetcd-server%3A%24%7BETCD_DNS_NAME%7D%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20--ipaddrs%3D%24%7BETCD_IPV4_ADDRESS%7D%2C127.0.0.1%20%5C%0A%0A%20%20%20%20%20%20%5B%20-e%20%2Fetc%2Fssl%2Fetcd%2Fsystem%3Aetcd-peer%3A%24%7BETCD_DNS_NAME%7D.crt%20-a%20%5C%0A%20%20%20%20%20%20%20%20-e%20%2Fetc%2Fssl%2Fetcd%2Fsystem%3Aetcd-peer%3A%24%7BETCD_DNS_NAME%7D.key%20%5D%20%7C%7C%20%5C%0A%20%20%20%20%20%20%20%20%2Fusr%2Flocal%2Fbin%2Fkube-client-agent%20%5C%0A%20%20%20%20%20%20%20%20%20%20request%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20--kubeconfig%3D%2Fetc%2Fkubernetes%2Fkubeconfig%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20--orgname%3Dsystem%3Aetcd-peers%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20--assetsdir%3D%2Fetc%2Fssl%2Fetcd%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20--dnsnames%3D%24%7BETCD_DNS_NAME%7D%2Cmy-test-cluster.installer.team.coreos.systems%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20--commonname%3Dsystem%3Aetcd-peer%3A%24%7BETCD_DNS_NAME%7D%20%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20--ipaddrs%3D%24%7BETCD_IPV4_ADDRESS%7D%20%5C%0A%20%20%20%20%20%20%0A%20%20%20%20securityContext%3A%0A%20%20%20%20%20%20priviledged%3A%20true%0A%20%20%20%20resources%3A%0A%20%20%20%20%20%20requests%3A%0A%20%20%20%20%20%20%20%20memory%3A%20600Mi%0A%20%20%20%20volumeMounts%3A%0A%20%20%20%20-%20name%3A%20discovery%0A%20%20%20%20%20%20mountPath%3A%20%2Frun%2Fetcd%2F%0A%20%20%20%20-%20name%3A%20certs%0A%20%20%20%20%20%20mountPath%3A%20%2Fetc%2Fssl%2Fetcd%2F%0A%20%20%20%20-%20name%3A%20kubeconfig%0A%20%20%20%20%20%20mountPath%3A%20%2Fetc%2Fkubernetes%2Fkubeconfig%0A%20%20containers%3A%0A%20%20-%20name%3A%20etcd-member%0A%20%20%20%20image%3A%20%22quay.io%2Fcoreos%2Fetcd%3Av3.3.10%22%20%23%23%20FIXME(abhinav)%3A%20these%20images%20should%20be%20replacable%20by%20release%20image.%0A%20%20%20%20command%3A%0A%20%20%20%20-%20%2Fbin%2Fsh%0A%20%20%20%20-%20-c%0A%20%20%20%20-%20%7C%0A%20%20%20%20%20%20%23!%2Fbin%2Fsh%0A%20%20%20%20%20%20set%20-euo%20pipefail%0A%0A%20%20%20%20%20%20source%20%2Frun%2Fetcd%2Fenvironment%0A%0A%20%20%20%20%20%20%2Fusr%2Flocal%2Fbin%2Fetcd%20%5C%0A%20%20%20%20%20%20%20%20--discovery-srv%20my-test-cluster.installer.team.coreos.systems%20%5C%0A%20%20%20%20%20%20%20%20--initial-advertise-peer-urls%3Dhttps%3A%2F%2F%24%7BETCD_IPV4_ADDRESS%7D%3A2380%20%5C%0A%20%20%20%20%20%20%20%20--cert-file%3D%2Fetc%2Fssl%2Fetcd%2Fsystem%3Aetcd-server%3A%24%7BETCD_DNS_NAME%7D.crt%20%5C%0A%20%20%20%20%20%20%20%20--key-file%3D%2Fetc%2Fssl%2Fetcd%2Fsystem%3Aetcd-server%3A%24%7BETCD_DNS_NAME%7D.key%20%5C%0A%20%20%20%20%20%20%20%20--trusted-ca-file%3D%2Fetc%2Fssl%2Fetcd%2Fca.crt%20%5C%0A%20%20%20%20%20%20%20%20--client-cert-auth%3Dtrue%20%5C%0A%20%20%20%20%20%20%20%20--peer-cert-file%3D%2Fetc%2Fssl%2Fetcd%2Fsystem%3Aetcd-peer%3A%24%7BETCD_DNS_NAME%7D.crt%20%5C%0A%20%20%20%20%20%20%20%20--peer-key-file%3D%2Fetc%2Fssl%2Fetcd%2Fsystem%3Aetcd-peer%3A%24%7BETCD_DNS_NAME%7D.key%20%5C%0A%20%20%20%20%20%20%20%20--peer-trusted-ca-file%3D%2Fetc%2Fssl%2Fetcd%2Fca.crt%20%5C%0A%20%20%20%20%20%20%20%20--peer-client-cert-auth%3Dtrue%20%5C%0A%20%20%20%20%20%20%20%20--advertise-client-urls%3Dhttps%3A%2F%2F%24%7BETCD_IPV4_ADDRESS%7D%3A2379%20%5C%0A%20%20%20%20%20%20%20%20--listen-client-urls%3Dhttps%3A%2F%2F0.0.0.0%3A2379%20%5C%0A%20%20%20%20%20%20%20%20--listen-peer-urls%3Dhttps%3A%2F%2F0.0.0.0%3A2380%20%5C%0A%20%20%20%20securityContext%3A%0A%20%20%20%20%20%20priviledged%3A%20true%0A%20%20%20%20volumeMounts%3A%0A%20%20%20%20-%20name%3A%20discovery%0A%20%20%20%20%20%20mountPath%3A%20%2Frun%2Fetcd%2F%0A%20%20%20%20-%20name%3A%20certs%0A%20%20%20%20%20%20mountPath%3A%20%2Fetc%2Fssl%2Fetcd%2F%0A%20%20%20%20-%20name%3A%20data-dir%0A%20%20%20%20%20%20mountPath%3A%20%2Fvar%2Flib%2Fetcd%2F%0A%20%20%20%20env%3A%0A%20%20%20%20-%20name%3A%20ETCD_DATA_DIR%0A%20%20%20%20%20%20value%3A%20%22%2Fvar%2Flib%2Fetcd%22%0A%20%20%20%20-%20name%3A%20ETCD_NAME%0A%20%20%20%20%20%20valueFrom%3A%0A%20%20%20%20%20%20%20%20fieldRef%3A%0A%20%20%20%20%20%20%20%20%20%20fieldPath%3A%20metadata.name%0A%20%20%20%20ports%3A%0A%20%20%20%20-%20name%3A%20peer%0A%20%20%20%20%20%20containerPort%3A%202380%0A%20%20%20%20%20%20protocol%3A%20TCP%0A%20%20%20%20-%20name%3A%20server%0A%20%20%20%20%20%20containerPort%3A%202379%0A%20%20%20%20%20%20protocol%3A%20TCP%0A%20%20hostNetwork%3A%20true%0A%20%20restartPolicy%3A%20Always%0A%20%20volumes%3A%0A%20%20-%20name%3A%20certs%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%2Fetc%2Fkubernetes%2Fstatic-pod-resources%2Fetcd-member%0A%20%20-%20name%3A%20kubeconfig%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%2Fetc%2Fkubernetes%2Fkubeconfig%0A%20%20-%20name%3A%20discovery%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%2Frun%2Fetcd%0A%20%20-%20name%3A%20data-dir%0A%20%20%20%20hostPath%3A%0A%20%20%20%20%20%20path%3A%20%2Fvar%2Flib%2Fetcd%0A
verification: {}
filesystem: root
mode: 420
path: /etc/kubernetes/manifests/etcd-member.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,dummy%20etcd-ca%0A
verification: {}
filesystem: root
mode: 420
path: /etc/kubernetes/static-pod-resources/etcd-member/ca.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,dummy%20root-ca%0A
verification: {}
filesystem: root
mode: 420
path: /etc/kubernetes/static-pod-resources/etcd-member/root-ca.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,CRIO_NETWORK_OPTIONS%3D%22--cni-config-dir%3D%2Fetc%2Fkubernetes%2Fcni%2Fnet.d%20--cni-plugin-dir%3D%2Fvar%2Flib%2Fcni%2Fbin%22%0A
verification: {}
filesystem: root
mode: 420
path: /etc/sysconfig/crio-network
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,net.ipv4.ip_forward%20%3D%201%0A
verification: {}
filesystem: root
mode: 420
path: /etc/sysctl.d/forward.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,%7B%22dummy%22%3A%22dummy%22%7D%0A
verification: {}
filesystem: root
mode: 420
path: /var/lib/kubelet/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,kind%3A%20KubeletConfiguration%0AapiVersion%3A%20kubelet.config.k8s.io%2Fv1beta1%0AcgroupDriver%3A%20systemd%0AclusterDNS%3A%0A%20%20-%2010.3.0.10%0AclusterDomain%3A%20cluster.local%0AmaxPods%3A%20250%0AruntimeRequestTimeout%3A%2010m%0AserializeImagePulls%3A%20false%0AstaticPodPath%3A%20%2Fetc%2Fkubernetes%2Fmanifests%0AsystemReserved%3A%0A%20%20cpu%3A%20500m%0A%20%20memory%3A%20500Mi%0AfeatureGates%3A%0A%20%20RotateKubeletServerCertificate%3A%20true%0AserverTLSBootstrap%3A%20true%0A
verification: {}
filesystem: root
mode: 420
path: /etc/kubernetes/kubelet.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
contents: |
[Unit]
Description=Kubernetes Kubelet
Wants=rpc-statd.service

[Service]
Type=notify
ExecStartPre=/bin/mkdir --parents /etc/kubernetes/manifests
EnvironmentFile=-/etc/kubernetes/kubelet-workaround
EnvironmentFile=-/etc/kubernetes/kubelet-env

ExecStart=/usr/bin/hyperkube \
kubelet \
--config=/etc/kubernetes/kubelet.conf \
--bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \
--rotate-certificates \
--kubeconfig=/var/lib/kubelet/kubeconfig \
--container-runtime=remote \
--container-runtime-endpoint=/var/run/crio/crio.sock \
--allow-privileged \
--node-labels=node-role.kubernetes.io/master \
--minimum-container-ttl-duration=6m0s \
--client-ca-file=/etc/kubernetes/ca.crt \
--cloud-provider= \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For aws this line denotes aws. For openstack the --cloud-provider line is not listed. Should this be removed or is there a reason it needs to be set empty?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(note this is the case with the other unit file in this PR as well)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vrutkovs spoke with me in chat and will verify the difference here. If needed he'll do a follow on PR.

Copy link
Contributor Author

@vrutkovs vrutkovs Jan 4, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bparees @sjenning might know the difference, I simply copied this from libvirt. CI would run this on GCP, so we don't want it to accidentally guess that

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also @rajatchopra might know more about that

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Its empty by default, so removing it or giving it empty string is the same. Eventually we will move this argument to value 'external'. But this is okay for now.

\
--anonymous-auth=false \
--register-with-taints=node-role.kubernetes.io/master=:NoSchedule \

Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
enabled: true
name: kubelet.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,%5Bregistries.search%5D%0Aregistries%20%3D%20%5B'registry.access.redhat.com'%2C%20'docker.io'%5D%0A
verification: {}
filesystem: root
mode: 420
path: /etc/containers/registries.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,dummy%20root-ca%0A
verification: {}
filesystem: root
mode: 420
path: /etc/kubernetes/ca.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,CRIO_NETWORK_OPTIONS%3D%22--cni-config-dir%3D%2Fetc%2Fkubernetes%2Fcni%2Fnet.d%20--cni-plugin-dir%3D%2Fvar%2Flib%2Fcni%2Fbin%22%0A
verification: {}
filesystem: root
mode: 420
path: /etc/sysconfig/crio-network
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,net.ipv4.ip_forward%20%3D%201%0A
verification: {}
filesystem: root
mode: 420
path: /etc/sysctl.d/forward.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,%7B%22dummy%22%3A%22dummy%22%7D%0A
verification: {}
filesystem: root
mode: 420
path: /var/lib/kubelet/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
contents:
source: data:,kind%3A%20KubeletConfiguration%0AapiVersion%3A%20kubelet.config.k8s.io%2Fv1beta1%0AcgroupDriver%3A%20systemd%0AclusterDNS%3A%0A%20%20-%2010.3.0.10%0AclusterDomain%3A%20cluster.local%0AmaxPods%3A%20250%0ArotateCertificates%3A%20true%0AruntimeRequestTimeout%3A%2010m%0AserializeImagePulls%3A%20false%0AstaticPodPath%3A%20%2Fetc%2Fkubernetes%2Fmanifests%0AsystemReserved%3A%0A%20%20cpu%3A%20500m%0A%20%20memory%3A%20500Mi%0AfeatureGates%3A%0A%20%20RotateKubeletServerCertificate%3A%20true%0AserverTLSBootstrap%3A%20true%0A
verification: {}
filesystem: root
mode: 420
path: /etc/kubernetes/kubelet.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
contents: |
[Unit]
Description=Kubernetes Kubelet
Wants=rpc-statd.service

[Service]
Type=notify
ExecStartPre=/bin/mkdir --parents /etc/kubernetes/manifests
EnvironmentFile=-/etc/kubernetes/kubelet-workaround
EnvironmentFile=-/etc/kubernetes/kubelet-env

ExecStart=/usr/bin/hyperkube \
kubelet \
--config=/etc/kubernetes/kubelet.conf \
--bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \
--kubeconfig=/var/lib/kubelet/kubeconfig \
--container-runtime=remote \
--container-runtime-endpoint=/var/run/crio/crio.sock \
--allow-privileged \
--node-labels=node-role.kubernetes.io/worker \
--minimum-container-ttl-duration=6m0s \
--client-ca-file=/etc/kubernetes/ca.crt \
--cloud-provider= \
\
--anonymous-auth=false \

Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
enabled: true
name: kubelet.service
2 changes: 2 additions & 0 deletions pkg/operator/render.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ func platformFromInstallConfig(ic installertypes.InstallConfig) string {
return "openstack"
case ic.Libvirt != nil:
return "libvirt"
case ic.None != nil:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not replace platformFromInstallConfig(config) with config.Platform.Name()? Or use config.Platform.Name() inside platformFromInstallConfig and raise errors on empty-string results?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd rather handle this in a different PR, I'm not sure if other components are relying on the function - and unblocking BYOR ASAP is the priority

return "none"
default:
panic("invalid platform")
}
Expand Down
Empty file.
Empty file.
Empty file.
Empty file.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading