有一个模块lineinfile在文件中添加一行,有没有办法添加几行?
我不想使用模板,因为您必须提供整个文件.我只是想在现有文件中添加一些东西而不必知道文件已包含的内容,因此模板不是一个选项.
是否有一个ansible变量,它具有正在执行的当前ansible-playbook的绝对路径?
一些上下文:
我正在运行/创建一个ansible脚本localhost来配置一个mysql docker并希望相对于ansible脚本挂载数据卷.
例如,假设我已经将存储库签出~/branch1/,然后运行ansible-playbook dev.yml我认为它应该将卷保存到~/branch1/.docker_volume/.如果我~/branch2从那时开始运行它应该将卷配置为~/branch2/.docker_volume/.
我需要将文件格式机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)
任何的意见都将会有帮助.
我有一个带有布尔条目的熊猫系列.我想得到值为的索引列表True.
例如输入 pd.Series([True, False, True, True, False, False, False, True])
应该产生输出[0,2,3,7].
我可以用列表理解来做到这一点,但有更清洁或更快的东西吗?
我的问题是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,而不是预期的捕获组.
我有一些持续的集成检查,它运行一些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) 如果我运行 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,还是可以使用包模块执行此操作?
我有一个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变量.
这不起作用.可能是什么问题呢?
我有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任务中的一个例子中,它就不会对它进行评估.有没有办法评估动态创建的变量名称 - 获取值?
我正在使用 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 环境中工作。