这是库存文件
---
[de-servers]
192.26.32.32
[uk-servers]
172.21.1.23
172.32.2.11
Run Code Online (Sandbox Code Playgroud)
我的剧本看起来像这样:
- name: Install de-servers configurations
hosts: de-servers
roles:
- de-server-setup
- name: Install uk-servers configurations
hosts: uk-servers
roles:
- uk-server-setup
- name: Do some other job on de-servers (cannot be done until uk-servers is installed)
hosts: de-servers
roles:
- de-servers-rest-of-jobs
Run Code Online (Sandbox Code Playgroud)
在角色de-servers-setup角色中,ssh端口从22更改为8888,因此当调用最后一个任务时,它会失败,因为它无法通过22端口连接到主机.如何克服这个ssh端口的变化?
Ansible Best Practices描述了每个角色都包含具有此规则所需的所有文件的文件目录.
在我的情况下,我有不同的角色,共享相同的文件.但我不能在每个角色中复制这些文件,因为这些文件没有任何一个来源,如果其中一个文件发生编辑,对每个角色进行此更改将变得很繁琐.
我做的一个解决方案是创建另一个文件夹并使用绝对或相对路径引用它.这是最好的方式吗?
我的ansible目录看起来像这样
play.yml
roles/
web/
tasks/
files/
common-1
common-2
other-multiple-files
role-2/
tasks/
files/
common-1
common-2
other-multiple-files
role-3/
tasks/
files/
common-2
role-4/
tasks/
files/
common-1
Run Code Online (Sandbox Code Playgroud) 以下命令将解析google ip
> ip=`dig +short google.com`
> echo $ip
> 216.58.210.238
Run Code Online (Sandbox Code Playgroud)
有时(特别是当互联网连接丢失时)此命令失败并显示此错误
> ;; connection timed out; no servers could be reached
Run Code Online (Sandbox Code Playgroud)
当命令失败并且我使用$#
输出为0时为分配
> ip=`dig +short google.com`
> echo $#
> 0
> echo $ip # Command failed
> ;; connection timed out; no servers could be reached
Run Code Online (Sandbox Code Playgroud)
如何在变量中保存命令输出,同时检查命令是否成功
我的库存中有两台服务器(主机)
[server]
10.23.12.33
10.23.12.40
Run Code Online (Sandbox Code Playgroud)
和剧本(play.yml)
---
- hosts: all
roles:
web
Run Code Online (Sandbox Code Playgroud)
在 vars 目录中的 web 角色内部,我有 main.yml
---
file_number : 0
Run Code Online (Sandbox Code Playgroud)
在任务目录中的 web 角色内部我有 main.yml
---
- name: Increment variable
set_fact: file_number={{ file_number | int + 1 }}
- name: create file
command: 'touch file{{ file_number }}'
Run Code Online (Sandbox Code Playgroud)
现在我希望在第一台机器上我会有file1而在第二台机器上我会有file2但在两台机器上我都有文件1
所以这个变量对于每台机器都是本地的,我怎么能让它对所有机器都是全局的。
我的文件结构是:
hosts
play.yml
roles/
web/
tasks/
main.yml
vars/
main.yml
Run Code Online (Sandbox Code Playgroud) 在我的makefile中,我将链接器标志的参数添加为变量 BOOTLOAD
LDFLAGS += -Wl,--section-start=.bootloader=$(BOOTLOAD)
Run Code Online (Sandbox Code Playgroud)
如果我BOOTLOAD = 0x3800
在makefile中写一切正常.
但我想从C代码传递这个变量,所以我试着定义它#define BOOTLOAD 0x3800
.但链接器找不到它.
我应该如何BOOTLOAD
从C文件传递?