小编Nik*_*kar的帖子

在Ansible中,如何在使用过滤器的变量定义中使用变量

我想从URL中提取一些正则表达式匹配.我能做到这一点的唯一方法是:

  - name: Set regex pattern for github URL
    set_fact: pattern="^(git\@github\.com\:|https?\:\/\/github.com\/)(.*)\/([^\.]+)(\.git)?$"

  - name: Extract organization name
    set_fact: project_repo="{{ deploy_fork | regex_replace( "^(git\@github\.com\:|https?\:\/\/github.com\/)(.*)\/([^\.]+)(\.git)?$", "\\3" ) }}"
    when: deploy_fork | match( "{{ pattern }}" )
Run Code Online (Sandbox Code Playgroud)

通过这种方法,我可以patternmatch过滤器中重用该变量,但不能在set_fact我将提取的文本分配给另一个变量的行上重用.有没有办法在set_fact该用途中重用变量filter(s)

regex jinja2 ansible

8
推荐指数
1
解决办法
1万
查看次数

在Ansible中,有没有办法强制变量值为整数?

我正在尝试将ecs_taskdefinition模块用于Ansible(v2.0),我想我已经陷入了基本的Ansible YAML陷阱.

根据模块的示例,如果我为cpu和提供整数值memory,则按预期工作:

- name: "Create task definition"
  ecs_taskdefinition:
    containers:
    - name: simple-app
      cpu: 10
      memory: 300
      essential: true
      image: "httpd:2.4"
      portMappings:
      - containerPort: 80
        hostPort: 80
Run Code Online (Sandbox Code Playgroud)

虽然,我希望memory并且cpu是可怜的.这样我就可以在不同的环境中使用相同的容器定义.

APP_ENV: "test"
test:
  containers:
    simple_app:
      memory: 1920
      cpu: 2560

- name: "Create task definition"
  ecs_taskdefinition:
    containers:
    - name: simple-app
      cpu: "{{vars.get(APP_ENV).containers.simple_app.cpu | int}}"
      memory: "{{vars.get(APP_ENV).containers.simple_app.memory | int}}"
      essential: true
      image: "httpd:2.4"
      portMappings:
      - containerPort: 80
        hostPort: 80
Run Code Online (Sandbox Code Playgroud)

在上面,我从botocore API得到错误:

botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid …
Run Code Online (Sandbox Code Playgroud)

yaml jinja2 ansible botocore

7
推荐指数
1
解决办法
2309
查看次数

有没有办法预先填充 Jenkins 构建页面以进行参数化构建?

我有一个 Jenkins 工作,它将环境名称作为参数。在另一个站点/仪表板上,我想创建指向此 Jenkins 作业的链接。但链接应根据点击位置预先填充参数。

像这样的事情,

<a href="https://jenkins/<someJenkinsAPI>?ENV=env1">env1</a>
<a href="https://jenkins/<someJenkinsAPI>?ENV=env2">env2</a>
Run Code Online (Sandbox Code Playgroud)

这可能吗?

jenkins

7
推荐指数
1
解决办法
4426
查看次数

Mac 与 Linux 上的 Docker 挂载权限

我试图使用 docker 运行elasticsearch。并希望使用卷来保存数据。这是我使用的命令。

docker run -it --rm -v $(pwd)/elasticdata:/usr/share/elasticsearch/data elasticsearch:7.5.1
Run Code Online (Sandbox Code Playgroud)

这在我的 Mac 上运行良好。但是当我尝试在 Travis CI 中运行它时,它失败了,权限被拒绝/usr/share/elasticsearch/data/目录权限被拒绝。

这是我注意到 OSX 与 Linux 上 docker 卷的权限不一致的情况

OSX (Docker 版本 19.03.8,构建 afacb8b)

$ ls -l elasticdata/.keepme
-rw-r--r--  1 nikhil  staff  0 Apr  3 13:07 elasticdata/.keepme

$ docker run -it --rm -v $(pwd)/elasticdata:/usr/share/elasticsearch/data elasticsearch:7.5.1 namei -l /usr/share/elasticsearch/data/.keepme
f: /usr/share/elasticsearch/data/.keepme
drwxr-xr-x root          root /
drwxr-xr-x root          root usr
drwxr-xr-x root          root share
drwxrwxr-x elasticsearch root elasticsearch
drwxr-xr-x root          root data
-rw-r--r-- root          root .keepme …
Run Code Online (Sandbox Code Playgroud)

linux macos elasticsearch docker

4
推荐指数
1
解决办法
3948
查看次数

标签 统计

ansible ×2

jinja2 ×2

botocore ×1

docker ×1

elasticsearch ×1

jenkins ×1

linux ×1

macos ×1

regex ×1

yaml ×1