小编Hub*_*NNN的帖子

为什么 ansible 执行简单任务时速度很慢

使用 ansible 大约一周后,我发现 ansible 花费的时间相似,无论它要执行的任务有多复杂。

  • 使用 apt 安装 20 个软件包 - 3 秒
  • 使用模板复制具有 2 个配置设置的单个文件 - 3 秒。

虽然我可以使用单个命令轻松安装 20 个软件包,但
模板需要循环运行,因此如果我有 20 个配置文件要复制,则需要整整一分钟的时间。

将其扩展到 10 个角色,其中一些角色重复 5 次,您可以用一个多小时来完成简单的部署。

ansible 应该这么慢吗?或者我可以做些什么来提高性能?

编辑:
根据您的回答,我认为这不是正常行为。以下是@U880D 要求的这些简单任务的一些代码示例。正如我所说,没有什么特别的,只是简单的配置:

# tasks/main.yml

- name: Configure php-{{ php_version }}
  template:
    src: '{{ item }}.j2'
    dest: '/etc/php/{{ php_version }}/{{ item }}'
  loop:
    - cli/conf.d/50-memory.ini
    - fpm/conf.d/50-memory.ini
    - fpm/conf.d/50-opcache.ini
    - fpm/pool.d/www.conf
  notify:
    - restart php {{ php_version }}
Run Code Online (Sandbox Code Playgroud)
# templates/fpm/conf.d/50-memory.ini.j2

memory_limit = {{ php_fpm_memory_limit }}
post_max_size = {{ …
Run Code Online (Sandbox Code Playgroud)

ansible

13
推荐指数
1
解决办法
7913
查看次数

如何向 Doctrine Column 类型添加自定义参数

我正在尝试创建自定义列类型,但 SQL 需要依赖于自定义参数。默认类型处理这些参数没有问题,例如。字符串类型有长度。如何为我的类型添加一个。

我正在尝试做的示例:

class EnumType extends Type
{
    const ENUM = 'enum';

    public function getName(): string
    {
        return self::ENUM;
    }

    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform): string
    {
        $class = $fieldDeclaration['class'];

        if (!is_subclass_of($class, Enum::class)) {
            throw new \Exception('You must specify a valid enum class');
        }

        $values = call_user_func([$class, 'getValues']);

        return "ENUM('" . implode("', '", $values) . "')";
    }

    public function convertToPHPValue($value, AbstractPlatform $platform): ?Point
    {
        return $value;
    }

    public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string
    {
        return $value;
    }

    public …
Run Code Online (Sandbox Code Playgroud)

mysql doctrine symfony

10
推荐指数
1
解决办法
2134
查看次数

如何在 docker-compose 中创建基础镜像

我有一些共享通用代码但并不完全相同的图像。有没有办法在 docker-compose 中创建一个基本映像,以便它在执行时不会自行运行,docker-compose up并且我能够在我的 Dockerfiles 中扩展它?

这是我想要实现的示例:

version: '3'
services:
    php:
        build:
            context: .
            dockerfile: ./php/Dockerfile

    php-fpm:
        build:
            context: .
            dockerfile: ./php-fpm/Dockerfile

    php-cron:
        build:
            context: .
            dockerfile: ./php-cron/Dockerfile

    php-worker:
        build:
            context: .
            dockerfile: ./php-worker/Dockerfile
Run Code Online (Sandbox Code Playgroud)

基础dockerfile

FROM php:7.2-fpm-alpine

RUN docker-php-ext-install bcmath
... and other extensions
Run Code Online (Sandbox Code Playgroud)

以及其他 dockerfiles(有小的变化):

php-fpm

FROM my-docker-compose:php

RUN docker-php-ext-install php-fpm

CMD php-fpm 
Run Code Online (Sandbox Code Playgroud)

php-cron

FROM my-docker-compose:php

COPY php/crontab /tmp/crontab
RUN /usr/bin/crontab -u www-data /tmp/crontab

CMD crond 
Run Code Online (Sandbox Code Playgroud)

docker docker-compose

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

将变量从组件传递到插槽

是否可以将变量从组件传递到插槽中。这是一个例子:

{{-- index.blade.php --}}
@component('slider', ['entities' => [0, 1, 2]])
    @slot('title')
        Slider title
    @endslot
    @slot('slide')
        Slider content no {{ $entity }}
    @endslot
@endcomponent


{{-- slider.blade.php --}}
<h1>{{ $title }}</h1>
<ul>
@foreach($entities as $entity)
    <li>{{ $slide }}</li>
@endforeach
</ul>
Run Code Online (Sandbox Code Playgroud)

当前结果:

异常:未定义$ entity

预期结果:

<h1>Slider title</h1>
<ul>
    <li>Slider content no 0</li>
    <li>Slider content no 1</li>
    <li>Slider content no 2</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
  • 如何将$ entity变量传递到幻灯片插槽中?
  • 甚至有可能这样做吗?
  • 如果没有,还有其他选择吗?

components laravel laravel-blade

6
推荐指数
1
解决办法
4519
查看次数

如何在 ansible 角色中使用不同的入口点

基于角色的 ansible 文档,我可以通过创建文件来创建多个角色入口点:

playbooks/roles/my_role/tasks/main.yml
playbooks/roles/my_role/tasks/other.yml
Run Code Online (Sandbox Code Playgroud)

我可以main.yml使用以下代码添加默认角色:

---
- name: Example 1
  hosts: <hostnames>
  roles:
    - my_role
Run Code Online (Sandbox Code Playgroud)

但我该如何使用other.yml入口点呢?
我希望它是这样的,但这些都不起作用:

---
- name: Example 1
  hosts: <hostnames>
  roles:
    - my_role:other
    - my_role/other
    - my_role.other
Run Code Online (Sandbox Code Playgroud)

ansible ansible-role

6
推荐指数
1
解决办法
1758
查看次数

有没有办法告诉教义不要碰特定的桌子?

每次我运行doctrine:migrations:diff为我的更改生成迁移时,它总是包括删除一些不由学说处理的表,例如:

$this->addSql('DROP TABLE messenger_messages');
$this->addSql('DROP TABLE monitoring');
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉doctrine特定的桌子不属于他,这样doctrine就不会每次都尝试删除它们?

doctrine symfony doctrine-orm

4
推荐指数
2
解决办法
1609
查看次数

如何为新捆绑包编写Symfony Flex配方?

我试图找到有关使用Symfony Flex的任何文档,但到目前为止还没有运气。

几乎所有文档都指向安装使用symfony Flex的捆绑软件,而不是如何创建使用它的捆绑软件。

我什至试图对某些软件包进行反向工程,但是再一次,没有运气。

我的目标是为中的捆绑包生成一个默认配置文件config/packages/my_bundle.yaml

我需要知道的是我需要在哪里放置它以及可以使用哪些env变量(如果有)?

php symfony symfony-flex symfony4

2
推荐指数
1
解决办法
91
查看次数

JavaScript,如何从数组中创建对象?

我想转换一个如下所示的数组:

['foo', 'bar', 'baz']
Run Code Online (Sandbox Code Playgroud)

到一个看起来像这样的对象:

{
  foo: true,
  bar: true,
  baz: true,
}
Run Code Online (Sandbox Code Playgroud)

在大多数语言中,您都会有某种形式的fill(keys, value)函数:

var array = ['foo', 'bar', 'baz'];
var object = fill(array, true);
// object = { foo: true, bar: true, baz: true}
Run Code Online (Sandbox Code Playgroud)

但在 JS 中,我只能使用范围而不是键列表找到数字键。有没有一个填充函数可以做到这一点?

javascript

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

即使 git 显示“已经是最新的”,如何强制合并。

大约半年前,一位开发人员搞砸了,并将一个他不应该的分支(我们的 alpha 测试分支)合并到 master 中。我们通过恢复合并很快解决了这个问题。

快进 6 个月了,今天我试图合并那个错误合并中落在 master 上的分支之一,但 git 说我不能。该分支的更改不在 master 上,但 git 不允许合并。

有没有办法强制合并?

git merge

0
推荐指数
1
解决办法
1258
查看次数