小编j00*_*057的帖子

ansible:使用带有通知处理程序的with_items

我想将一个变量传递给通知处理程序,但无法在SO,文档或github repo中的问题中找到它,如何做到这一点.我正在做的是部署多个webapps,当其中一个webapps的代码发生变化时,它应该重新启动该webapp的服务.

这个问题,我得到了这个工作,有点:

- hosts: localhost
  tasks:
  - name: "task 1"
    shell: "echo {{ item }}"
    register: "task_1_output"
    with_items: [a,b]
  - name: "task 2"
    debug:
      msg: "{{ item.item }}"
    when: item.changed
    with_items: task_1_output.results
Run Code Online (Sandbox Code Playgroud)

(将它放在test.yml中并运行它ansible-playbook test.yml -c local.)

但是这会记录第一个任务的结果,并在第二个任务中有条件地循环.我的问题是当你有两个或更多需要通知第二个任务的任务时它会变得混乱!例如,如果代码已更新或配置已更改,请重新启动Web服务.

AFAICT,没有办法将变量传递给处理程序.那会干净利落地为我解决.我在github上发现了一些问题,其他人遇到了同样的问题,并提出了一些语法,但它们都没有实际工作.

包括子剧本也不会起作用,因为with_items与之一起使用include已被弃用.

在我的Playbooks中,我有一个site.yml列出组的角色,然后在该group_vars组中我定义了应该安装的webapps列表(包括版本).这似乎对我来说是正确的,因为这样我可以使用相同的剧本进行分期和制作.但也许唯一的解决方案是多次定义角色,并复制分段和生产的角色列表.

那么这里的智慧是什么?

ansible

10
推荐指数
3
解决办法
3万
查看次数

创建使用async/await的IObservable <T>以原始顺序返回已完成的任务

假设您有一个包含100个URL的列表,并且您想要下载它们,解析响应并通过IObservable推送结果:

public IObservable<ImageSource> GetImages(IEnumerable<string> urls)
{
    return urls
        .ToObservable()
        .Select(async url =>
        {
            var bytes = await this.DownloadImage(url);
            var image = await this.ParseImage(bytes);
            return image;
        });
}
Run Code Online (Sandbox Code Playgroud)

我有一些问题.

一个是同时敲击服务器100个请求是不礼貌的 - 理想情况下,你会在给定时刻限制为6个请求.但是,如果我添加一个Buffer调用,由于异步lambda in Select,所有内容仍然会同时触发.

此外,结果将以与URL的输入序列不同的顺序返回,这是不好的,因为图像是将在UI上显示的动画的一部分.

我已经尝试了各种各样的东西,我有一个有效的解决方案,但感觉很复杂:

public IObservable<ImageSource> GetImages(IEnumerable<string> urls)
{
    var semaphore = new SemaphoreSlim(6);

    return Observable.Create<ImageSource>(async observable =>
    {
        var tasks = urls
            .Select(async url =>
            {
                await semaphore.WaitAsync();
                var bytes = await this.DownloadImage(url);
                var image = await this.ParseImage(url);
            })
            .ToList();

        foreach (var task in tasks) …
Run Code Online (Sandbox Code Playgroud)

c# system.reactive

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

标签 统计

ansible ×1

c# ×1

system.reactive ×1