From e1e097af65dc9f559ae79392f7ac456901a02d4b Mon Sep 17 00:00:00 2001 From: zirain Date: Sat, 29 Jun 2024 15:22:20 +0800 Subject: [PATCH] egctl: add new formula egctl is a command line tool to provide additional functionality for Envoy Gateway users, add a formula make it easier for brew users to install it. --- .github/autobump.txt | 1 + Formula/e/egctl.rb | 119 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 Formula/e/egctl.rb diff --git a/.github/autobump.txt b/.github/autobump.txt index abbbbb53a76af..46e799d8681a4 100644 --- a/.github/autobump.txt +++ b/.github/autobump.txt @@ -684,6 +684,7 @@ editorconfig-checker efl efm-langserver eg-examples +egctl eget ehco eigenpy diff --git a/Formula/e/egctl.rb b/Formula/e/egctl.rb new file mode 100644 index 0000000000000..86f07750906a9 --- /dev/null +++ b/Formula/e/egctl.rb @@ -0,0 +1,119 @@ +class Egctl < Formula + desc "Command-line utility for operating Envoy Gateway" + homepage "https://gateway.envoyproxy.io/" + url "https://github.com/envoyproxy/gateway/archive/refs/tags/v1.0.2.tar.gz" + sha256 "05406182dc165513925cf60722582613d4de9ea789d60e014e6da456bb229f65" + license "Apache-2.0" + head "https://github.com/envoyproxy/gateway.git", branch: "main" + + depends_on "go" => :build + + def install + ldflags = %W[ + -s -w + -X github.com/envoyproxy/gateway/internal/cmd/version.envoyGatewayVersion=#{version} + -X github.com/envoyproxy/gateway/internal/cmd/version.gitCommitID=#{tap.user} + ] + system "go", "build", *std_go_args(ldflags:), "./cmd/egctl" + + generate_completions_from_executable(bin/"egctl", "completion") + end + + test do + assert_equal version.to_s, shell_output("#{bin}/egctl version --remote=false").strip + + (testpath/"input.yaml").write <<~EOS + apiVersion: gateway.networking.k8s.io/v1 + kind: GatewayClass + metadata: + name: eg + spec: + controllerName: gateway.envoyproxy.io/gatewayclass-controller + --- + apiVersion: gateway.networking.k8s.io/v1 + kind: Gateway + metadata: + name: eg + namespace: default + spec: + gatewayClassName: eg + listeners: + - name: http + protocol: HTTP + port: 80 + --- + apiVersion: v1 + kind: Namespace + metadata: + name: default + --- + apiVersion: v1 + kind: Service + metadata: + name: backend + namespace: default + labels: + app: backend + service: backend + spec: + clusterIP: "1.1.1.1" + type: ClusterIP + ports: + - name: http + port: 3000 + targetPort: 3000 + protocol: TCP + selector: + app: backend + --- + apiVersion: gateway.networking.k8s.io/v1 + kind: HTTPRoute + metadata: + name: backend + namespace: default + spec: + parentRefs: + - name: eg + hostnames: + - "www.example.com" + rules: + - backendRefs: + - group: "" + kind: Service + name: backend + port: 3000 + weight: 1 + matches: + - path: + type: PathPrefix + value: / + EOS + + expected = <<~EOS + xds: + default/eg: + '@type': type.googleapis.com/envoy.admin.v3.RoutesConfigDump + dynamicRouteConfigs: + - routeConfig: + '@type': type.googleapis.com/envoy.config.route.v3.RouteConfiguration + ignorePortInHostMatching: true + name: default/eg/http + virtualHosts: + - domains: + - www.example.com + name: default/eg/http/www_example_com + routes: + - match: + prefix: / + name: httproute/default/backend/rule/0/match/0/www_example_com + route: + cluster: httproute/default/backend/rule/0 + upgradeConfigs: + - upgradeType: websocket + + EOS + + output = shell_output("#{bin}/egctl x translate --from gateway-api --to xds -t route -f #{testpath}/input.yaml") + assert_equal output, expected + end +end