根据https://docs.docker.com/registry/spec/api/,我可以打电话/v2/<name>/tags/list来获取给定图像的标签列表.它工作正常,例如:
{"name"=>"avi/test", "tags"=>["latest"]}
Run Code Online (Sandbox Code Playgroud)
但是,我想要每个标签的摘要.是的,"摘要"实际上是清单的散列(至少我最好从API中理解它;不是100%清楚).但是,我想知道"最新"(和其他所有标签)的唯一标识符是什么.
使用案例:我可能会有人将某个版本标记为最新版本,并希望检查该版本是最新的:
docker push avi/test:2.6
docker tag avi/test:2.6 avi/test:latest
docker push avi/test:latest
# build 2.7
docker push avi/test:2.7
# oops! Forgot to tag latest to 2.7
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,如果我不仅可以检查标签 - 这将给我"2.6","2.7","最新" - 还有摘要(至少是清单),我可以找到各种标签指向的内容,审计等
假设我有4条路线--2要求用户登录,2则不需要.我的app init看起来像:
$routeProvider.when('/open1',{templateUrl:'/open1.html',controller:'Open1'});
$routeProvider.when('/open2',{templateUrl:'/open2.html',controller:'Open2'});
$routeProvider.when('/secure1',{templateUrl:'/secure1.html',controller:'Secure1'});
$routeProvider.when('/secure2',{templateUrl:'/secure2.html',controller:'Secure2'});
Run Code Online (Sandbox Code Playgroud)
路由/open1和/open2向所有人开放,而路线/secure1和/secure2需要进行登录的用户,如果没有,采取一些行动,例如重定向到登录或启动一个警告.我可以通过使用我的Auth服务和呼叫来确定用户的状态,例如Auth.isLogin().结果将是:
/open1并/open2始终转到上面声明的模板和控制器Auth.isLogin()返回true,/secure1并且/secure2到上面去申报模板和控制器Auth.isLogin()返回false,/secure1并/secure2采取其他一些操作,例如$location.path('/login')我可以把逻辑放在Secure1和Secure2检查的控制器中,但这是重复的,混淆了责任,使它们更难测试等.
有没有办法可以$routeProvider用来声明,"检查这条路线和这条路线,如果没有,重定向"?我想用resolve某种方式,但不太确定如何使用它(文档resolve不是很清楚,几个有用的例子).
编辑:
根据以下答案,看来有三种理念可以做到这一点:
resolve检查登录和失败的承诺,然后捕捉$routeChangeError重定向事件http://www.sitepoint.com/implementing-authentication-angular-applications/$routeChangeStart事件检查登录并重定向http://arthur.gonigberg.com/2013/06/29/angularjs-role-based-auth/第二个选项是两位回答者提出的建议.
在JQ,我可以选择一个项目中很容易的列表:
$ echo '["a","b","c","d","e"]' | jq '.[] | select(. == ("a","c"))'
Run Code Online (Sandbox Code Playgroud)
或者如果您希望将其作为数组:
$ echo '["a","b","c","d","e"]' | jq 'map(select(. == ("a","c")))'
Run Code Online (Sandbox Code Playgroud)
但是,如何选择列表中没有的所有项目?当然. != ("a","c")不起作用:
$ echo '["a","b","c","d","e"]' | jq 'map(select(. != ("a","c")))'
[
"a",
"b",
"b",
"c",
"d",
"d",
"e",
"e"
]
Run Code Online (Sandbox Code Playgroud)
上面给出了每个项目两次,除了"a"和"c"
同样的:
$ echo '["a","b","c","d","e"]' | jq '.[] | select(. != ("a","c"))'
"a"
"b"
"b"
"c"
"d"
"d"
"e"
"e"
Run Code Online (Sandbox Code Playgroud)
如何过滤掉匹配的项目?
如果我创建一个新产品,使用简单的auth,就有一个"创建用户"API.如何限制它,以便只有受邀的电子邮件(通过电子邮件或通过一次性密钥)才能注册?似乎不太容易适应规则,但我可能遗漏了一些东西.
也许我的问题应该重申为:我如何将这些行为重构为CRUD,这是Firebase擅长的?
我觉得CRUD效果很好.我还看到Firebase声明性安全模型如何允许我确保服务器端的适当安全性,它应该存在于哪里.
假设我有订阅服务.每次有人注册服务时,他们都需要自动在其帐户中添加"到期"订单项.简单来说:
/users/john
/services/goodstuff
Run Code Online (Sandbox Code Playgroud)
所以john可以注册goodstuff,我可能会让他在没有支付的情况下工作30天,但会在30天后提醒他,"嘿,你需要付钱,否则你就会失去对goodstuff的认购."
与服务器后端,我会POST到/services/goodstuff/members,例如,已在部分POST处理程序中添加了"你欠"行项目john的帐户,以确保没有人可以加入goodstuff没有被标记为因.
在Firebase BaaS应用程序中,那些服务器端逻辑不存在,我将如何重构应用程序以获得相同的有效行为?
我有一个VPC(通过cloudformation创建),它为该VPC中创建的所有堆栈创建了一些公共共享基础结构,例如ssh jumphost和ssh jumphost的安全组.
我有一个单独的cloudformation模板,用于在现有VPC中创建Web + App + DB堆栈.
如何从第一个模板中定义的常见ssh jumphost允许入站ssh 22到我的堆栈模板中的实例?
根据文档,我需要指定一个VPC SourceSecurityGroupId,它必须具有实际的VPC ID或使用Ref函数来查找此模板中定义的安全组的ID .
如何在同一个VPC中引用现有的SG,但是从另一个模板引用?
编辑:
通过NAT实例出站的相同问题.NAT实例在VPC级别提供,但每个堆栈都需要其安全组才允许仅对 NAT实例进行出站访问.
我试图理解docker images(或docker inspect)报告的图像ID 与注册表或清单中的实际图层或图像(使用v2)之间的联系.
我运行码头图像,我得到(缩写和更改以保护不那么无辜):
REPOSITORY TAG IMAGE ID
my.local.registry/some/image latest abcdefg
Run Code Online (Sandbox Code Playgroud)
如果我使用API拉出上面图像的清单,我会得到一个包含fsLayers,而不是其中一个匹配图像的(完整)ID.我明白了,因为图像是图层的总和.
但是,如果我将该图像拉到别处,我会获得相同的ID.如果我更新图像,推送它,新版本有一个新的ID.
我以为它可能是清单的哈希.但是,(a)通过API提取清单不会返回JSON中清单的哈希值,并且(b)查看注册表目录本身,给定清单中的sha256 /var/lib/registry/v2/repositories/some/image/_manifests/tags/latest/current/link(或那些index/sha256/)给出了正确的链接对于已下载但与图像ID不匹配的清单.
我假设图像ID与blob匹配,但也许我错了?
有没有人想出一个合适的方法来做到这一点?
简而言之,你有一个provider "aws",通过环境变量或配置文件配置,有或没有sts,都没关系。也许你有几个。
现在您想要调用awscli,因为 aws 提供程序中的某些内容没有得到很好的实现。就我而言,我需要生成一些敏感信息并将其直接上传到我不希望出现在状态文件中的 S3 存储桶。无论如何,它是s3 sync,因此该操作是幂等的。
但是,似乎无法将提供者凭据(永久、环境变量、配置文件到临时 sts)传递给子句null_resource:
provider "aws" {
# set using explicit setting or profile or however
alias = "myaws"
}
resource "null_resource" "cli" {
provisioner "local-exec" {
command = "aws <do something>"
environment {
# happy to pass AWS_PROFILE or AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY here...
# if there were a way to retrieve it from the "myaws" provider
}
}
}
Run Code Online (Sandbox Code Playgroud) 我知道我可以使用CloudFormation创建资源,并且我还可以使用CloudFormation以及其中的资源创建VPC.
我可以在预先存在的VPC中使用CloudFormation模板创建堆栈吗?例如,假设我的公司有一个VPC,还有一个服务部门,一些生产部门(私人和公共部门),也许还有一些开发部门.
我想在VPC中使用自己的CloudFormation模板定义每组服务 - 服务,生产环境,开发环境.
我能这样做吗?
围绕此有很多问题,包括为什么您不应该使用import "./my/path"它以及为什么它只能工作,因为某些传统的go代码需要它。
如果这是正确的,那么您如何处理项目的封装,以及如何通过github分支进行封装?在其他每个lang中,我都可以做一个项目的github分支或git clone,所有内容都封装在那里。我如何从go项目中获得相同的行为?
使用go“ hello world”示例的简单示例。
你好
package main
import ("fmt"
"github.com/golang/examples/stringutil")
func main() {
fmt.Printf(stringutil.Reverse("hello, world")+"\n")
}
Run Code Online (Sandbox Code Playgroud)
上面的作品很棒。但是,如果我想使用自己的stringutil,它位于子目录中并可以编译为单个二进制文件,那么我仍然需要完整的路径:
package main
import ("fmt"
"github.com/myrepo/examples/util/stringutil")
func main() {
fmt.Printf(stringutil.Reverse("hello, world")+"\n")
}
Run Code Online (Sandbox Code Playgroud)
现在,如果有人复制或分叉我的存储库,即使它完全在内部使用,它也直接依赖于“ github.com/myrepo/” !
如果要导入20个不同的文件utils/怎么办?每当有人分叉时,我都需要更改每一个?那是很多无关紧要的更改,而且是毫无意义的git commit。
我在这里想念什么?为什么相对路径这么糟糕?如何在不更改数十个文件的情况下派生引用其自己的子目录(及其包)的项目?