我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)
但是这些变量都在一个非常大的哈希中,并且哈希中有一些哈希不能作为默认值.
我有多个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) 我有一台带有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) 截断文件时,它会在开始时添加额外的零字节:
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在开头用一段字节写的内容.
如何在没有前导零的情况下截断并完全重写文件?
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 hitchhikers 指南中看到了这个例子:
def create_multipliers():
return [lambda x, i=i : i * x for i in range(5)]
Run Code Online (Sandbox Code Playgroud)
上面的示例是对后期绑定引起的一些问题的解决方案,其中在调用内部函数时查找闭包中使用的变量。
i=i 是什么意思以及为什么会产生如此大的差异?
这个问题不同于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) 我已就这个问题对类似的问题进行过研究,但没有发现重复.
声明如果对象实现协议,则该对象是可迭代的__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) 我使用环境变量在 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 }}"没有成功。
如果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 ×5
ansible ×2
go ×2
ansible-2.x ×1
channel ×1
debian ×1
dictionary ×1
docker ×1
iterator ×1
lambda ×1
virtualenv ×1