小编Che*_* A.的帖子

Ansible - 如果未定义变量,则使用默认值

users在我的角色里面定制了linux 创建.我需要让我的角色的用户自定义home_directory,group_name,name,password.

我想知道是否有更灵活的方法来应对默认值.

我知道下面的代码是可能的:

- name: Create default
  user:
    name: "default_name"
  when: my_variable is not defined

 - name: Create custom
  user:
    name: "{{my_variable}}"
  when: my_variable is defined
Run Code Online (Sandbox Code Playgroud)

但正如我所提到的,有很多可选变量,这会产生很多可能性.

是否有类似上面的代码?

user:
  name: "default_name", "{{my_variable}}"
Run Code Online (Sandbox Code Playgroud)

代码应该name="default_name"my_variable未定义时设置.

我可以设置所有变量defaults/main.yml并创建用户:

- name: Create user
  user:
    name: "{{my_variable}}"
Run Code Online (Sandbox Code Playgroud)

但是这些变量都在一个非常大的哈希中,并且哈希中有一些哈希不能作为默认值.

ansible ansible-2.x

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

信号 goroutines 在通道关闭时停止

我有多个select来自两个通道的goroutine :一个 chan 提供数据,一个 chan 用于信号(一种完成/退出通道)。

我使用信号通道来捕获信号(kill)并优雅地关闭 goroutine。

我正在运行 'worker' goroutines from package a,而捕获信号的 goroutine func 从package b.

我使用来自https://gist.github.com/reiki4040/be3705f307d3cd136e85的信号包。

package a

import "sync"

WorkChan := make(chan int)
QuitChan := make(chan struct{})

func Stop() {
        fmt.Println("Stop called, closing channel")
        close(QuitChan)
}

func Work(wg *sync.WaitGroup) {
    var item int
    for {
        select {
        case item = <- WorkChan:
            ... processing
        case <- QuitChan:
            wg.Done()
            return
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

捕捉信号并调用的 goroutine a.Stop()

package b

import ( …
Run Code Online (Sandbox Code Playgroud)

channel go

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

docker-registry磁盘已满,没有节食的想法

我有一台带有docker注册表的服务器,并且已经多次推送构建相同:latest标签的命令,但是我的DD已满,我无法节食它。

磁盘已满

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        48G   45G  397M 100% /
udev             10M     0   10M   0% /dev
tmpfs           794M   81M  713M  11% /run
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/dm-1       9.8G   56M  9.2G   1% /var/lib/docker/devicemapper/mnt/2e895760700ac3e1575e496a4ac6adde4de6129226febba8c0c3126af1655ad9
shm              64M     0   64M   0% /var/lib/docker/containers/5aa47e34d1b8be22deeae473729b4e587e6e4bfe7fb3e262eda891bad4b05042/shm
Run Code Online (Sandbox Code Playgroud)

没有晃来晃去的体积也没有图像

# docker volume ls -qf dangling=true
# 
# docker images -f "dangling=true" -q
#  
Run Code Online (Sandbox Code Playgroud)

码头工人图像

[root@kvm22:/etc/cron.daily] # docker …
Run Code Online (Sandbox Code Playgroud)

docker docker-registry

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

在golang中截断文件

截断文件时,它会在开始时添加额外的零字节:

configFile, err := os.OpenFile("./version.json", os.O_RDWR, 0666)
defer configFile.Close()
check(err)
//some actions happen here
configFile.Truncate(0)
configFile.Write(js)
configFile.Sync()
Run Code Online (Sandbox Code Playgroud)

结果,文件具有我0在开头用一段字节写的内容.

如何在没有前导零的情况下截断并完全重写文件?

go

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

dict.values() 是否按顺序返回?

dict_mark = {'Wang': 'C', 'Li': 'B', 'Ma': 'A'}
s = ''
for c in dict_mark.values():
    s += c
print(s)
Run Code Online (Sandbox Code Playgroud)

字典是无序的,那么为什么dict_mark.values()总是返回这个值序列呢'C' 'B' 'A'

为什么不'B' 'A' 'C'或者'A' 'B' 'C'

python dictionary

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

在 python 中创建 lambda 时,i=i 是什么意思?

我在Python hitchhikers 指南中看到了这个例子:

def create_multipliers():
    return [lambda x, i=i : i * x for i in range(5)]
Run Code Online (Sandbox Code Playgroud)

上面的示例是对后期绑定引起的一些问题的解决方案,其中在调用内部函数时查找闭包中使用的变量。

i=i 是什么意思以及为什么会产生如此大的差异?

python lambda

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

如何在多个线程之间共享 asyncio.Queue?

这个问题不同于Is there a way to use asyncio.Queue in multiple thread?

我有 2 个异步事件循环在两个不同的线程中运行。Thread1 通过asyncio.Queue()向 Thread2 生成数据。

其中一个线程抛出异常:got Future <Future pending> attached to a different loop

现在这是真的,因为我有一个在不同循环中使用的队列。如何在两个不同线程中的两个循环之间共享队列?

示例代码:

q = asyncio.Queue()

async def producer(q):
    await asyncio.sleep(3)
    q.put(1)

def prod_work(q):
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(producer(q))

async def consumer(q):
    await asyncio.sleep(3)
    res = await q.get()

def cons_work(q):
    loop2 = asyncio.new_event_loop()
    asyncio.set_event_loop(loop2)
    loop2.run_until_complete(consumer(q))

def worker(q):
    # main thread - uses this threads loop  
    prod = threading.Thread(target=prod_work, args=(q,))

    # separate …
Run Code Online (Sandbox Code Playgroud)

python multithreading python-asyncio

5
推荐指数
0
解决办法
3003
查看次数

如何在没有下一个的情况下迭代迭代对象?

我已就这个问题对类似的问题进行过研究,但没有发现重复.

声明如果对象实现协议,则该对象是可迭代的__iter__.

iterator.__iter__():返回迭代器对象本身.这是允许容器和迭代器与for和in语句一起使用所必需的.

iterator.__next__():从容器中返回下一个项目.如果没有其他项,请提高StopIteration异常.

根据我的理解,这适用于所有迭代器对象.我遇到过一个实现二叉树容器的代码.容器只有__iter__,节点对象也在其中.

__iter__Node对象的实现返回一个生成器.它产生对象并且似乎完成所有逻辑,没有实现__next__.

这段代码实际上如何工作?它似乎只是作为常规迭代器运行,但这个没有__next__.当然,如果我手动做iter(obj),然后next(obj)它的工作原理.这是代码片段:

class BinaryCont(object):

    def __init__(self):
        self.root = None
        self.size = 0

    def __iter__(self):

        class EmptyIter():
            def next(self):
                raise StopIteration

        if self.root:
            return self.root.__iter__()
        return EmptyIter()

class Node(object):

    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

    def __iter__(self):
        if self.has_left_child():
            for child in self.left:
                yield …
Run Code Online (Sandbox Code Playgroud)

python iterator

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

如何在 Ansible 中将多行字符串转换为 dict?

我使用环境变量在 Ansible 中设置了一个事实 query('env', 'VARIABLE')

VARIABLE是多行字符串(YAML 格式):

device: eth0
bootproto: static
address: 192.168.x.x
netmask: 255.255.255.0 
gateway: 192.168.x.x
Run Code Online (Sandbox Code Playgroud)

当我VARIABLE用 Ansible打印时,我把它作为一个带有\n行间的字符串

"msg": ["device: eth0\nbootproto: static\naddress: 
        192.168.x.x\nnetmask: 255.255.255.0\ngateway: 192.168.x.x"]
Run Code Online (Sandbox Code Playgroud)

有没有方便的方法将其转换为dict?我需要稍后在我的任务中使用它,在配置机器的 NIC 时加载参数。

我尝试使用 Jinja2 过滤器但- debug: msg="{{ network_settings | from_yaml }}"没有成功。

ansible

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

Python无法导入模块virtualenvwrapper.hook_loader?

如果Python无法导入模块virtualenvwrapper.hook_loader,我收到此消息

check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 and that PATH is
set properly.
Run Code Online (Sandbox Code Playgroud)

如何在Debian 9中开始设置它?

python debian virtualenv virtualenvwrapper

3
推荐指数
2
解决办法
3293
查看次数