我想使用 terraform 将大使设置为 kubernetes 的 API 网关。配置大使的方法有多种。根据文档,推荐的方法是对在集群外部路由和公开的每个服务使用 kubernetes 注释。使用 kubernetes yaml 配置可以轻松完成此操作:
kind: Service
apiVersion: v1
metadata:
name: my-service
annotations:
getambassador.io/config: |
---
apiVersion: ambassador/v0
kind: Mapping
name: my_service_mapping
prefix: /my-service/
service: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Run Code Online (Sandbox Code Playgroud)
该getambassador.io/config字段的值以|suggest 开头,它是一个多行字符串值。如何使用 terraform HCL 实现同样的效果?
我在CircleCI配置中具有以下工作流程设置:
// <<< definition of unit_tests, integration_tests and deploy jobs >>>
workflows:
version: 2
build-test-and-deploy:
jobs:
- unit_tests
- integration_tests:
requires:
- unit_tests
- build_images:
requires:
- integration_tests
filters:
branches:
only:
- production
- deploy:
type: approval
requires:
- build_images
filters:
branches:
only:
- production
Run Code Online (Sandbox Code Playgroud)
目标是停止工作流程执行,直到手动批准部署到生产。触发工作流程执行后,它会在部署作业之前正确停止,但是在UI中单击“批准”后,不会触发部署作业,并且工作流程成功结束。
你知道出什么事了吗
我正在尝试在 App Engine 上发现其他已部署的服务。像这篇文章这样的建议。
这是我的代码的样子:
import (
"fmt"
"net/http"
"google.golang.org/appengine"
)
func ServiceHostname(serviceName string, r *http.Request) (string, error) {
ctx := appengine.NewContext(r)
hostname, err := appengine.ModuleHostname(ctx, serviceName, "", "")
if err != nil {
return "", fmt.Errorf("unable to find service %s: %v", serviceName, err)
}
return hostname, nil
}
Run Code Online (Sandbox Code Playgroud)
我在常规 http 处理程序中调用此函数。我得到的错误是:not an App Engine context。
我的代码和引用的文章之间的唯一区别在于 app engine go 版本。我go111在他使用go1运行时的地方使用新的。
你知道如何克服这个问题吗?
请考虑此代码段
package main
import (
"fmt"
"sync"
"time"
)
func main() {
wg := new(sync.WaitGroup)
nap := func() {
wg.Add(1)
time.Sleep(2 * time.Second)
fmt.Println("nap done")
wg.Done()
}
go nap()
go nap()
go nap()
fmt.Println("nap time")
wg.Wait()
fmt.Println("all done")
}
Run Code Online (Sandbox Code Playgroud)
运行此类代码可获得预期输出:
nap time
nap done
nap done
nap done
all done
Run Code Online (Sandbox Code Playgroud)
现在让我们先省略第一个标准输出打印wg.Wait():
// fmt.Println("nap time")
wg.Wait()
fmt.Println("all done")
Run Code Online (Sandbox Code Playgroud)
输出现在变为意外:
all done
Run Code Online (Sandbox Code Playgroud)
预期的地方是:
nap done
nap done
nap done
all done
Run Code Online (Sandbox Code Playgroud)
操场上的相同代码确实提供了此输出,而无需省略stdout打印.
你能解释一下,我在那里失踪了吗?