小编Nas*_*asr的帖子

Ansible改变剧本中的ssh端口

这是库存文件

---
[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

20
推荐指数
5
解决办法
2万
查看次数

Ansible在角色之间共享文件

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)

ansible

15
推荐指数
2
解决办法
1万
查看次数

在变量上保存命令输出并检查退出状态

以下命令将解析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)

如何在变量中保存命令输出,同时检查命令是否成功

bash

8
推荐指数
3
解决办法
6465
查看次数

所有主机的全局 Ansible 增量变量

我的库存中有两台服务器(主机)

[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)

ansible

5
推荐指数
2
解决办法
2万
查看次数

将变量从C文件传递给makefile

在我的makefile中,我将链接器标志的参数添加为变量 BOOTLOAD

LDFLAGS += -Wl,--section-start=.bootloader=$(BOOTLOAD) 
Run Code Online (Sandbox Code Playgroud)

如果我BOOTLOAD = 0x3800在makefile中写一切正常.

但我想从C代码传递这个变量,所以我试着定义它#define BOOTLOAD 0x3800.但链接器找不到它.

我应该如何BOOTLOAD从C文件传递?

c makefile

0
推荐指数
1
解决办法
238
查看次数

标签 统计

ansible ×3

bash ×1

c ×1

makefile ×1