我有一个使用线程并发出大量HTTP请求的python脚本.我认为发生的事情是,当HTTP请求(使用urllib2)正在读取时,它会阻塞并且不响应CtrlC以停止程序.有没有办法解决?
我必须检查文件是否存在/etc/
.如果该文件存在,那么我必须跳过该任务.这是我正在使用的代码:
- name: checking the file exists
command: touch file.txt
when: $(! -s /etc/file.txt)
Run Code Online (Sandbox Code Playgroud)
如果file.txt
存在则我必须跳过任务.
在我的剧本中,我想创建一个包含外部命令输出的变量.之后我想在几个模板中使用该变量.
以下是剧本的相关部分:
tasks:
- name: Create variable from command
command: "echo Hello"
register: command_output
- debug: msg="{{command_output.stdout}}"
- name: Copy test service
template: src=../templates/test.service.j2 dest=/tmp/test.service
- name: Enable test service
shell: systemctl enable /tmp/test.service
- name: Start test service
shell: systemctl start test.service
Run Code Online (Sandbox Code Playgroud)
让我们说这是我的模板:
[Unit]
Description=MyApp
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "while true; do echo {{ string_to_echo }}; sleep 1; done"
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
(注意{{ …
我在Ansible中注册了名为"network"的变量:
{
"addresses": {
"private_ext": [
{
"type": "fixed",
"addr": "172.16.2.100"
}
],
"private_man": [
{
"type": "fixed",
"addr": "172.16.1.100"
},
{
"type": "floating",
"addr": "10.90.80.10"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
是否有可能获得类型="浮动"的IP地址("addr")做这样的事情?
- debug: var={{ network.addresses.private_man | filter type="fixed" | get "addr" }}
Run Code Online (Sandbox Code Playgroud)
我知道语法错了,但你明白了.
我想允许任何人列出并读取目录树中的所有文件,但我不想让文件可执行:
dir
\subdir1
file1
\subdir2
file2
...
\subdirX
fileX
Run Code Online (Sandbox Code Playgroud)
以下任务使我的目录和文件可读,但它使所有文件也可执行:
- name: Make my directory tree readable
file:
path: dir
mode: 0755
recurse: yes
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我选择模式0644,那么我的所有文件都不可执行,但我无法列出我的目录.
是否可以为所有目录设置模式755,为目录树中的所有文件设置644?
谢谢.
在编写和调试Ansible playbooks时,典型的工作流程如下:
ansible-playbook ./main.yaml
理想情况下,我希望在失败的任务上恢复执行,拥有库存以及之前任务收集的所有事实.它甚至可能吗?如何让剧本编写/调试更快?
如何逃避Ansible 1.9.2中的双花括号?
例如,如何在以下shell命令中转义双花括号?
- name: Test
shell: "docker inspect --format '{{ .NetworkSettings.IPAddress }}' instance1"
Run Code Online (Sandbox Code Playgroud) 在网上搜索了一下后,似乎我无法映射CtrlSpace到任何东西/很多.今天有办法做到这一点,我发现通常是2岁.
我非常习惯用 - Ctrl点击我的光标下面的单词,在Eclipse中,作者似乎认为最好让它移动到定义.我不同意,但无法找到如何/在哪里解决这个问题.在互联网上搜索并在这里导致数百人想要Eclipse风格 - Ctrl点击无处不在 - 我想摆脱它.
怎么样?
我有一个任务,创建一个组.
- name: add user to docker group
user: name=USERNAME groups=docker append=yes
sudo: true
Run Code Online (Sandbox Code Playgroud)
在另一个剧本中,我需要运行一个依赖于拥有新组权限的命令.不幸的是,这不起作用,因为只有在我注销并再次登录后才会加载新组.
我尝试了一些类似的东西:
su -l USERNAME
要么
newgrp docker; newgrp
但没有任何效果.是否有任何更改迫使Ansible重新连接到主机并进行重新连接?重启将是最后一个选项.