我们有一个CloudFormation模板,用于创建EC2实例和安全组(以及许多其他资源),但我们需要能够向同一个EC2实例添加一些其他预先存在的安全组.
我们遇到的问题是,预先存在的安全组的数量并不总是相同,我们希望有一个模板来处理所有情况.
目前,我们有一个输入参数,如下所示:
"WebTierSgAdditional": {
"Type": "String",
"Default": "",
"Description": ""
}
Run Code Online (Sandbox Code Playgroud)
我们将此参数传递给逗号分隔的预先存在的安全组字符串,例如'sg-abc123,sg-abc456'
.
EC2实例的SecurityGroup标记如下所示:
"SecurityGroups": [
{
"Ref": "WebSg"
},
{
"Ref": "WebTierSgAdditional"
}
]
Run Code Online (Sandbox Code Playgroud)
使用此代码,在创建实例时,我们会在AWS控制台中收到此错误:
必须对所有安全组使用group-id或group-name,而不是同时使用
上面的'WebSg'参考是在模板中其他地方创建的安全组之一.如果我们通过输入参数传入组名列表而不是组ID列表,则会出现同样的错误.
当我们将输入参数的"类型"字段更改为"CommaDelimitedList"时,我们会收到错误消息:
属性值SecurityGroups的类型必须是List of String
它显然无法使用字符串连接列表以使其成为新列表.
当参数只包含一个sg id时,所有内容都会成功创建,但是,我们需要能够添加多个sg id.
我们Fn::Join
在SecurityGroups标记中尝试了许多不同的使用组合,但似乎没有任何效果.我们真正需要的是某种"爆炸"功能,用于从参数字符串中提取单个id.
有谁知道一个很好的方法让这个工作?
以下是AngularJS项目中的文件.正如一些帖子所建议的那样,我补充说:
ngModel name="currentPassword" #currentPassword="ngModel
Run Code Online (Sandbox Code Playgroud)
在输入字段中,但仍然出错.
的package.json
.........
"dependencies": {
"@angular/common": "^2.3.1",
"@angular/compiler": "^2.3.1",
"@angular/core": "^2.3.1",
"@angular/forms": "^2.3.1",
"@angular/http": "^2.3.1",
"@angular/platform-browser": "^2.3.1",
"@angular/platform-browser-dynamic": "^2.3.1",
"@angular/router": "^3.3.1",
"core-js": "^2.4.1",
"rxjs": "^5.0.1",
"ts-helpers": "^1.1.1",
"zone.js": "^0.7.2"
},
...............
Run Code Online (Sandbox Code Playgroud)
变化password.component.html
<form #f="ngForm" [formGroup]="changePasswordForm">
<div class="form-group">
<label for="currentPassword">Current Password</label> <input
placeholder="currentPassword" ngModel name="currentPassword"
#currentPassword="ngModel" id="currentPassword"
name="currentPassword" type="text" class="form-control" required
minlength="6" formControlName="currentPassword">
</div>
</div>
<button class="btn btn-primary" type="submit">Change Password</button>
</form>
Run Code Online (Sandbox Code Playgroud)
变化password.component.ts
import { Component, OnInit } from '@angular/core';
import { FormBuilder, Validators, ControlContainer, FormGroup, FormControl } …
Run Code Online (Sandbox Code Playgroud) 我尝试在docker容器上运行一个简单的Symfony 4项目.我已经测试了常规PHP脚本,并且它们运行良好.但是,使用Symfony项目,执行变得非常缓慢.例如,没有任何重要内容的页面需要5-6秒.
我附上了Symfony的性能分析器的截图.
您是否知道如何将执行时间缩短到可接受的水平?
所以我正在尝试使用Packer创建AWS映像并通过user_data_file指定一些用户数据.实例启动时需要运行此文件的内容,因为每次实例都是唯一的.我不能把它加入AMI.
使用打包器我有以下内容:
{
"variables": {
"ami_name": ""
},
"builders": [
{
"type": "amazon-ebs",
"region": "us-east-1",
"source_ami": "ami-c8580bdf",
"instance_type": "t2.micro",
"ssh_username": "ubuntu",
"ami_name": "{{ user `ami_name` }}-{{ isotime | clean_ami_name }}",
"user_data_file": "user_data.sh",
"tags": {
"os_version": "ubuntu",
"built_by": "packer",
"build_on": "{{ isotime | clean_ami_name }}",
"Name": "{{ user `ami_name` }}"
}
}],
"provisioners": [
{
"type": "ansible",
"playbook_file": "playbook.yml",
"user": "ubuntu"
}]
}
Run Code Online (Sandbox Code Playgroud)
我的user_data shell脚本的内容只是通过在供应商步骤中运行的ansible脚本安装的软件包的几个基本配置行.观察Packer的输出我可以确认ansible脚本全部运行.
Packer完成并创建AMI,但永远不会执行用户数据.结果图像中不存在任何记录.没有/userdata.log文件并且/var/lib/cloud/instance/user-data.txt
是空的我觉得我错过了一些基本的东西,因为这应该是一个非常简单的事情与Packer.
我是Git的新手,并尽我所能找到关于这个问题的一些文档无济于事.
这是我的命令:
$ git submodule add https://github.com/joliver/EventStore.git externalsource/JOliverEventStore/
Run Code Online (Sandbox Code Playgroud)
致命:不是git存储库:../.git/modules/externalsource/JOliverEventStore无法签出子模块'externalsource/JOliverEventStore'
我在我的回购根目录中,目前没有目录/externalsource/JO
liverEventStore/
.错误是谈论我不知道的目录.
如果我将子模块添加到根目录,如下所示:
$ git submodule add https://github.com/joliver/EventStore.git JOliverEventStore
Run Code Online (Sandbox Code Playgroud)
我没有问题,它在根目录中创建了该文件夹.
任何见解将不胜感激.
我对依赖于需要在测试环境中模拟的第三方API的控制器进行了一系列测试.我们覆盖功能测试客户端爬虫并模拟我们需要测试的依赖项.这里的关键是每次测试都会改变模拟.
在Symfony 3.2中,这个工作正常,但在Symfony 3.3中,由于现在注入服务的方式,我有一些弃用警告:
示例控制器测试用例:
class MyControllerTest extends WebTestCase
{
private static $kernelModifier = null;
public function setKernelModifier(\Closure $kernelModifier)
{
self::$kernelModifier = $kernelModifier;
$this->ensureKernelShutdown();
}
protected static function createClient(array $options = [], array $server = [])
{
static::bootKernel($options);
if ($kernelModifier = self::$kernelModifier) {
$kernelModifier->__invoke();
self::$kernelModifier = null;
};
$client = static::$kernel->getContainer()->get('test.client');
$client->setServerParameters($server);
return $client;
}
protected function getPropertyClient()
{
$mockService = (new PropertyMock())->getPropertyMock();
$this->setKernelModifier(function () use ($mockService) {
static::$kernel->getContainer()->set('app.property_service', $mockService);
});
return static::createClient();
}
protected function getPropertyFailureClient()
{
$mockService = …
Run Code Online (Sandbox Code Playgroud) 我遵循ZF2惯例,在模块中存储测试,当每个模块中运行测试时,一切正常.我想要做的是有一个根级phpunit.xml,它调用单个模块测试并合并它们以产生代码覆盖率数据和其他指标.
问题是每个单独的测试套件都在模块化的phpunit.xml文件中引导.我知道做事的唯一方法是在每个phpunit.xml文件中配置引导程序,当从root运行测试时,由于忽略了单独的xml文件,这显然无法获取.
所以我的问题是:是否有一种方法可以让根级phpunit.xml文件从模块中读取单独的phpunit.xml和bootstrap文件,如果你愿意的话,还有一种phpunit配置继承?我可以沿着Phing或CI脚本编写这个版本的路线,但我希望它在开发过程中快速而肮脏,这个解决方案仍然不会产生合并的代码报告.
基本上,我想要这样的东西,但不是运行测试,我希望它在每个模块中运行各个phpunit.xml文件.这可能吗?
<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
<testsuites>
<testsuite name="Site Tests">
<directory>./module/Application/test/ApplicationTest</directory>
<directory>./module/User/test/UserTest</directory>
</testsuite>
</testsuites>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
更新
目标是让PHPUnit生成的代码度量标准提供项目概述,而不是模块化的特定概述.我很欣赏答案中的脚本将按模块运行单元测试,但这不是我想要的.据我所知,就PHPUnit而言,这可能是一个限制.我将在接下来的几天内对此进行研究,并尝试找到一个解决方案,因为它似乎对许多处理自定义模块的项目很有用.
更新2
Robert Basic提出了一个脚本,该脚本创建了一个目录结构,其中包含模块内部报告,并且它工作得很好但是很高兴让它在PHPUnit中运行并具有适当的度量报告.
有没有办法在自动化dockerhub构建期间连接到多个私有git repos?我们正在构建golang应用程序,并且需要"获取"其他私有存储库作为我们构建的一部分,并且当它们失败时,因为docker无法连接到它们,只有目标私有存储库.
主要仓库很好,因为部署密钥是通过Dockerhub安装的,但任何后续的私有仓库导入都会失败.
我可以看到,解决这个问题的一种方法是在本地构建映像,"docker push"到dockerhub,然后在部署端将其拉下来,这会破坏dockerhub和自动构建系统的目的.另一种是将ssh键烘焙到基本图像中,这不是一个好主意.
有没有人有这个解决方案,不涉及将ssh密钥烧成图像或在本地构建?
非常感谢.
在删除列的迁移操作期间,如何在尝试删除列之前先生成 SQL 以检查该列是否存在?
对于删除列操作,实体框架当前生成这样的 sql 来删除列:
// Migration Operation:
DropColumn("dbo.Table", "Column");
// TSQL generated:
// Dependency management logic ...
ALTER TABLE [dbo].[Table] DROP COLUMN [Column]
Run Code Online (Sandbox Code Playgroud)
如何更改 SQL 以首先检查列是否存在:
// Migration Operation:
DropColumn("dbo.Table", "Column");
// TSQL desired:
IF EXISTS (SELECT * FROM sys.columns WHERE object_id = Object_id('dbo.Table') AND name = 'Column')
BEGIN
// Dependency management logic ...
ALTER TABLE [dbo].[Table] DROP COLUMN [Column]
END
Run Code Online (Sandbox Code Playgroud)
我知道可以通过继承自SqlServerMigrationSqlGenerator
. 我这样做的尝试未能将默认放置列逻辑包装在一个IF
块中。请参阅下面的示例:
public class CustomSqlServerMigrationSqlGenerator: SqlServerMigrationSqlGenerator
{
/// <summary>
/// Drop column only …
Run Code Online (Sandbox Code Playgroud) entity-framework sql-generation ef-code-first entity-framework-6 entity-framework-migrations
我正在尝试使用以下命令删除故障转移别名记录集:
aws route53 change-resource-record-sets \
--hosted-zone-id <my-zone-id> \
--change-batch file://file.json
Run Code Online (Sandbox Code Playgroud)
json的内容:
{
"Comment": "test-rdc",
"Changes": [
{
"Action": "DELETE",
"ResourceRecordSet": {
"Name": "abc.aws-ab-xyz.abcd.com",
"Type": "A",
"SetIdentifier": "abc-Secondary",
"Failover": "SECONDARY" ,
"AliasTarget": {
"HostedZoneId": "jashkhakh",
"DNSName": "hhhkjhkh",
"EvaluateTargetHealth": false
},
"HealthCheckId": "hhjhkh"
}
}]
}
Run Code Online (Sandbox Code Playgroud)
错误:尝试删除资源记录集 [name='abc.aws-ab-xyz.abcd.com.', type='A', set-identifier='abc-Secondary', health check='hhjhkh'] 但是提供的值与当前值不匹配
我已验证 json 文件中的条目是否正确。
php ×3
amazon-ec2 ×2
docker ×2
git ×2
phpunit ×2
symfony ×2
angular ×1
aws-cli ×1
dockerhub ×1
entity-framework-migrations ×1
github ×1
go ×1
packer ×1
symfony-3.3 ×1
symfony4 ×1
unit-testing ×1
user-data ×1