使用 Ansible 如何在 SSH 服务重新启动时等待或恢复?我有一个 ansible playbook,它对 SSH 配置进行了一些更改,但是当 ssh 重新启动时,Ansible 当然会丢失 SSH 连接。我正在使用内置的 ansible 模块来重新启动服务。
我可以触发重新启动并等待,但是当我只需要 ansible 等待服务完成重新启动时,这似乎太过了,有人有办法解决这个问题吗?
使用 Ansible 如何在 SSH 服务重新启动时等待或恢复?我有一个 ansible playbook,它对 SSH 配置进行了一些更改,但是当 ssh 重新启动时,Ansible 当然会丢失 SSH 连接。我正在使用内置的 ansible 模块来重新启动服务。
我可以触发重新启动并等待,但是当我只需要 ansible 等待服务完成重新启动时,这似乎太过了,有人有办法解决这个问题吗?
我有简单的角色来安装Weblogic服务器;现在我想添加一个 deinstall.yml 任务文件。
目前我创建了一个新的简单剧本,并想用它执行文件tasks/deinstall.yml。请问我怎样才能做到这一点?我最新的方法是使用标签......这是一种可能的方法吗?当我测试它时,main.yml被执行,其中的块和任务没有标签。
- hosts: alf_sandbox
roles:
- role: Weblogic
vars:
domain: TODO
tags: deinstall
角色目录的一部分
├── tasks
│ ├── deinstall.yml
│ ├── main.yml
使用copy
或fetch
,较新的主机目录会覆盖较早的主机目录。我希望每个都位于相同的本地路径下,也许主机特定信息用作后缀。
ansile aid -m copy -a "src=/data/logs/app dest=logs remote_src=true"
ansible用于一堆机器,应该有一种方法来区分copy
每台机器。
我从 Ansible 任务之一得到如下字典输出“
msg": {
"vSwitch0": {
"failback": true,
"failover_active": [
"vmnic1",
"vmnic0"
],
"failover_standby": [],
"failure_detection": "link_status_only",
"lb": "loadbalance_srcid",
"mtu": 1500,
"notify": true,
"num_ports": 128,
"pnics": [
"vmnic0",
"vmnic1"
],
"security": [
false,
false,
false
],
"ts": false
}
}
}
我正在尝试通过将上述输出存储在变量中作为“all_vswitch_info”并尝试提取 pnics 列表来使用 Json 查询,如下所示,当我现在使用下面的内容时,
我得到的是空值
ok: [localhost] => {
"msg": ""
}
注意:我尝试使用其他选项作为 msg: "{{all_vswitch_info| json_query('[].pnics')}}" 但我仍然得到相同的结果
ok: [localhost] => {
"msg": ""
}
有什么遗漏吗?注意:此特定输出具有 vSwitch0。在某些情况下,这可能是 vswitch23 或 vswitch 3 之类的任何名称或其他名称。我不能在 json_query 中将名称硬编码为 vSwitch0。但是,pnics是不会因目标机器而改变的属性名称。
我有两个文件
库存.yaml:
servers:
hosts:
nas:
ansible_host: 10.10.10.27
router:
ansible_host: 10.10.10.1
和 playbook.yaml
- name: pylonl playbook
hosts: all
tasks:
-name: Ping all hosts
ansible.builtin.ping:
运行ansible -i inventory.yaml all -m ping
有效,但运行ansible -i inventory.yaml playbook.yaml
返回:
[WARNING]: Could not match supplied host pattern, ignoring: playbook.yaml
[WARNING]: No hosts matched, nothing to do
我错过了什么?
我们有一个 Ansible 脚本,可以在服务器更新时发送电子邮件。在脚本中,我想使用来自两个不同位置的变量来发送到地址。第一个位置来自库存本身,称为 owner_email,第二个位置来自角色的 vars 部分,称为 mb_addresses。在脚本中,我试图弄清楚如何设置它。相关部分是这样的:
- name: Send the report
mail:
host: our.mailserver.com
port: 25
to:
- "{{ owner_email }}"
- "{{ mb_addresses }}"
from: [email protected]
subject: Linux monthly patch results
body: "{{ lookup('file', '/depot/reports/patch/{{inventory_hostname}}_patch_report.txt') }}"
delegate_to: localhost
become: no
在 vars 部分的 main.yml 中,mb_address 是这样设置的:
mb_addresses: "[email protected],[email protected]"
问题是我收到了第一封电子邮件,但第二封被忽略了。
如果我这样设置,也会发生同样的情况:
mb_addresses: '"[email protected]" "[email protected]"'
我试过这样:
mb_addresses:
- "[email protected]"
- "[email protected]"
以这种方式完成后,不会收到任何电子邮件。
我要避免的是进入每个库存项目并添加一个库存组以接收完成电子邮件。
我错过了什么?
下面是我的流浪文件。但是,它没有创建 1 个 RedHat 虚拟机和 2 个 Ubuntu 虚拟机,而是“流浪”了 3 个 Ubuntu 虚拟机。
有人可以告诉我为什么吗?先感谢您!
Vagrant.configure("2") do |config|
config.ssh.insert_key = false
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.provider :virtualbox do |v|
v.memory = 4000
v.linked_clone = false
end
# App server 1
config.vm.box = "geerlingguy/centos7"
config.vm.define "app1" do |app|
app.vm.hostname = "orc-app1.test"
app.vm.network :private_network, ip: "192.168.60.4"
end
# App server 2
config.vm.box = "geerlingguy/ubuntu2004"
config.vm.define "app2" do |app|
app.vm.hostname = "orc-app2.test"
app.vm.network :private_network, ip: "192.168.60.5"
end
# DB server
config.vm.box = "geerlingguy/ubuntu2004"
config.vm.define "db" do |db|
db.vm.hostname = "orc-db.test"
db.vm.network :private_network, ip: "192.168.60.6"
end
end
像gocryptfs这样的工具在与 systemd 结合使用时具有一些优势,因为可以轻松定义依赖关系、状态和权限。
由于它需要密码,它要么需要系统上的纯文本文件,要么需要使用systemd-ask-password
. 通常首选标准输入变体,因为纯文本文件中的密码短语有一些缺点。
虽然Ansible 有一个 systemd 模块,但它似乎无法直接插入此类参数。
因此,我很好奇在使用 Ansible 时,使用密码输入处理服务(重新)重启的首选方式是什么。
会做类似这个伪代码的事情
- name: Start GoCryptFs
systemd:
name: gocryptfs
state: started
daemon_reload: true
args:
stdin: "{{ gocryptfs_password }}"