小编Bap*_*ias的帖子

ansible:几行的lineinfile?

有一个模块lineinfile在文件中添加一行,有没有办法添加几行?

我不想使用模板,因为您必须提供整个文件.我只是想在现有文件中添加一些东西而不必知道文件已包含的内容,因此模板不是一个选项.

ansible

153
推荐指数
6
解决办法
13万
查看次数

变量是否具有正在执行的当前ansible-playbook的路径?

是否有一个ansible变量,它具有正在执行的当前ansible-playbook的绝对路径?

一些上下文: 我正在运行/创建一个ansible脚本localhost来配置一个mysql docker并希望相对于ansible脚本挂载数据卷.

例如,假设我已经将存储库签出~/branch1/,然后运行ansible-playbook dev.yml我认为它应该将卷保存到~/branch1/.docker_volume/.如果我~/branch2从那时开始运行它应该将卷配置为~/branch2/.docker_volume/.

ansible

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

如何使用ansible在两个节点之间复制文件

我需要将文件格式机A复制到机器B,而我运行所有安全任务的控制机器是机器C(本地机器)

我尝试过以下方法:

在ansible的shell模块中使用scp命令

hosts: machine2
user: user2
tasks:
  - name: Copy file from machine1 to machine2 
    shell: scp user1@machine1:/path-of-file/file1 /home/user2/file1
Run Code Online (Sandbox Code Playgroud)

这种方法一直持续下去.

使用获取和复制模块

hosts: machine1
user: user1
tasks:
  - name: copy file from machine1 to local
    fetch: src=/path-of-file/file1 dest=/path-of-file/file1

hosts: machine2
user: user2
tasks:
  - name: copy file from local to machine2
    copy: src=/path-of-file/file1 dest=/path-of-file/file1
Run Code Online (Sandbox Code Playgroud)

这种方法给我一个错误如下:

error while accessing the file /Users/<myusername>/.ansible/cp/ansible-ssh-machine2-22-<myusername>, error was: [Errno 102] Operation not supported on socket: u'/Users/<myusername>/.ansible/cp/ansible-ssh-machine2-22-<myusername>'
Run Code Online (Sandbox Code Playgroud)

任何的意见都将会有帮助.

ansible

86
推荐指数
3
解决办法
11万
查看次数

获取pandas布尔系列为True的索引列表

我有一个带有布尔条目的熊猫系列.我想得到值为的索引列表True.

例如输入 pd.Series([True, False, True, True, False, False, False, True])

应该产生输出[0,2,3,7].

我可以用列表理解来做到这一点,但有更清洁或更快的东西吗?

python series pandas

14
推荐指数
2
解决办法
8131
查看次数

ansable从stdout解析文本字符串

我的问题是ansible和解析stdout.我需要从ansible play中捕获stdout并将此输出解析为stdout中的特定子字符串并保存到var中.我的具体用例如下

- shell: "vault.sh --keystore EAP_HOME/vault/vault.keystore |
          --keystore-password vault22 --alias vault --vault-block |
          vb --attribute password --sec-attr 0penS3sam3 --enc-dir |
          EAP_HOME/vault/ --iteration 120 --salt 1234abcd" 
  register: results
  become: true
Run Code Online (Sandbox Code Playgroud)

这将生成一个带有以下行的输出,目标是捕获jboss vault生成的掩码密钥并将其保存在ansible var中,以便我可以使用它来配置standalone.xml模板:

vault-option name="KEYSTORE_PASSWORD" value="MASK-5dOaAVafCSd"/>

我需要一种方法解析这个字符串可能正则表达式,并使用set_facts模块或任何其他ansible模块将"MASK-5dOaAVafCSd"子字符串保存到ansible var中.

目前我的代码看起来像这样

#example stdout
results: vault-option name=\"KEYSTORE_PASSWORD\" value=\"MASK-5dOaAVafCSd\"/>
- name: JBOSS_VAULT:define keystore password masked value variable
    set_fact:
    masked_value: |
       "{{ results.stdout | 
        regex_replace('^.+(MASK-.+?)\\.+','\\\1') }}"
Run Code Online (Sandbox Code Playgroud)

此代码将masked_value定义为results.stdout,而不是预期的捕获组.

regex string stdout ansible

11
推荐指数
1
解决办法
3万
查看次数

ansible:促进对错误的警告

我有一些持续的集成检查,它运行一些ansible-playbook命令.每个剧本可能正在运行许多剧本,包括许多大型角色.

每隔一段时间,有人会引入一些在ansible-playbook运行时引起警告的变化,例如:

[WARNING]: when statements should not include jinja2 templating delimiters
such as {{ }} or {% %}. Found: "{{ some_variable}}" not in
some_result.stdout
Run Code Online (Sandbox Code Playgroud)

要么:

[WARNING]: Consider using unarchive module rather than running tar
Run Code Online (Sandbox Code Playgroud)

或者一些弃用警告,例如:

[DEPRECATION WARNING]: ec2_facts is kept for backwards compatibility but usage 
is discouraged. The module documentation details page may explain more about 
this rationale.. This feature will be removed in a future release. Deprecation 
warnings can be disabled by setting deprecation_warnings=False in …
Run Code Online (Sandbox Code Playgroud)

warnings ansible

11
推荐指数
1
解决办法
1218
查看次数

从ansible使用模块包时如何更新包缓存

如果我运行 apt,我可以更新包缓存:

apt:
  name: postgresql
  state: present
  update_cache: yes
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试使用通用package命令,但我看不到这样做的方法。

package:
  name: postgresql
  state: present
Run Code Online (Sandbox Code Playgroud)

我是否必须运行显式命令才能运行apt-get update,还是可以使用包模块执行此操作?

package-managers ansible

9
推荐指数
3
解决办法
2904
查看次数

我想在Jinja2的Ansible上下文中包含另一个Jinja2模板

我有一个Ansible手册,它设置了很多变量.一个剧本有这个任务:

- name: create config file 
  template:
    src: 'templates/main_config.j2'
    dest: "{{ tmp_dir }}/main_config.json"
Run Code Online (Sandbox Code Playgroud)

该模板main_config.j2在父Ansible playbooks和tasks中写入被定义为变量的字符串.

我想基于Ansible变量的值包含另一个Jinja2模板.

{% include "./templates/configurations.j2" %}, 
{% include "./templates/security.j2" %},
{% include './templates/' + {{ job }} + '_steps.j2' %}
Run Code Online (Sandbox Code Playgroud)

job 是在父级剧本中设置的Ansible变量.

这不起作用.可能是什么问题呢?

jinja2 ansible ansible-template

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

在ansible中评估动态变量名称

我有vars,我把这样的东西:

vars/main.yml
hello_port: 80
world_port: 81
Run Code Online (Sandbox Code Playgroud)

在我的ansbile文件中,我加载变量

vars_files:
  - ./vars/main.yml
Run Code Online (Sandbox Code Playgroud)

这是我初始化m_name的方式:

 - name: set_fact
     set_fact:
        m_name:
          - 'hello'
          - 'world'
Run Code Online (Sandbox Code Playgroud)

然后我使用with_items进行迭代任务:

 - debug:
      msg: "{{ (item + '_port') }}"
   with_items: "{{ m_name }}"
Run Code Online (Sandbox Code Playgroud)

但我得到了输出

hello_port
world_port
Run Code Online (Sandbox Code Playgroud)

不是他们的价值观


好吧,我发现如果我使用debug var它正在工作.但是如果我想把这个表达式"{{ (item + '_port') }}"放在shell任务中的一个例子中,它就不会对它进行评估.有没有办法评估动态创建的变量名称 - 获取值?

dynamic-variables ansible

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

Ansible 如何在 ansible 2.7.x 之前忽略无法访问的主机

我正在使用 ansible 一次针对多个服务器运行命令。我想忽略由于“ "SSH Error: data could not be sent to remote host \"1.2.3.4\". Make sure this host can be reached over ssh"”错误而失败的任何主机,因为列表中的某些主机将处于脱机状态。我怎样才能做到这一点?ansible 中是否有默认选项可以忽略离线主机而不会使剧本失败?是否可以选择在ansible剧本之外的单个cli 参数中执行此操作?

更新:我知道ignore_unreachable: true适用于 ansible 2.7 或更高版本,但我在 ansible 2.6.1 环境中工作。

ssh ansible

7
推荐指数
2
解决办法
9374
查看次数