有一个模块lineinfile在文件中添加一行,有没有办法添加几行?
我不想使用模板,因为您必须提供整个文件.我只是想在现有文件中添加一些东西而不必知道文件已包含的内容,因此模板不是一个选项.
在我的ansible playbooks中反复出现的主题是我经常必须使用sudo privileges(sudo: yes)执行命令,因为我想为某个用户执行此操作.理想情况下,我宁愿使用sudo切换到该用户并正常执行命令.因为那时我不需要做我常用的post命令清理,例如chowning目录.这是我的一本剧本的摘录:
- name: checkout repo
git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
sudo: yes
- name: change perms
file: dest={{ dst }} state=directory mode=0755 owner=some_user
sudo: yes
Run Code Online (Sandbox Code Playgroud)
理想情况下,我可以将命令或命令集作为不同的用户运行,即使它需要sudo给该用户.
当Ansible在对主机运行播放时遇到问题时,它会将主机名输出到用户主目录中以'.retry'结尾的文件中.这些通常不使用,只是导致混乱,有没有办法将它们关闭或放在不同的目录?
有没有办法忽略Ansible的SSH真实性检查?例如,当我刚刚设置一个新服务器时,我必须对这个问题回答"是":
GATHERING FACTS ***************************************************************
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:yy:zz:....
Are you sure you want to continue connecting (yes/no)?
Run Code Online (Sandbox Code Playgroud)
我知道这通常是一个坏主意,但我将其合并到一个脚本中,该脚本首先在我的云提供商处创建一个新的虚拟服务器,然后自动调用我的ansible playbook来配置它.我想在脚本执行过程中避免任何人为干预.
以下代码仅删除它在Web目录中获取的第一个文件.我想删除web目录中的所有文件和文件夹并保留web目录.我怎样才能做到这一点?
- name: remove web dir contents
file: path='/home/mydata/web/{{ item }}' state=absent
with_fileglob:
- /home/mydata/web/*
Run Code Online (Sandbox Code Playgroud)
注意:我尝试过rm -rf使用命令和shell,但它们不起作用.也许我错误地使用它们.
任何正确方向的帮助将不胜感激.
我使用的是ansible 2.1.0.0
创建新的Ansible角色时,模板会同时创建vars一个defaults带有空main.yml文件的目录.在定义我的角色时,我可以将变量定义放在其中任何一个中,并且它们将在我的任务中可用.
将定义放入defaults和之间有什么区别vars?应defaults该做什么,应该做什么vars?将两者用于相同的数据是否有意义?
我知道两者之间的优先级/优先级有所不同,但我想了解应该去哪里.
假设我的角色将在目标系统上创建一个目录列表.我想提供一个要创建的默认目录列表,但是希望允许用户在使用该角色时覆盖它们.
这是这样的:
---
- directories:
- foo
- bar
- baz
Run Code Online (Sandbox Code Playgroud)
我可以将它放入defaults/main.yml或vars/main.yml从执行的角度来看,它不会有任何区别 - 但它应该去哪里?
所有我的Ansible剧本/角色都签入我的git仓库.
但是,对于Ansible Galaxy角色,我总是必须在我想运行Ansible的每台机器上逐个明确地下载它们.
在Ansible抱怨在运行时缺少角色之前,确切地知道确切需要哪些Ansible Galaxy角色甚至是很难的.
如何管理Ansible Galaxy角色依赖项?我想让他们检查我的git repo以及其余的ansible代码,或者在我在新机器上运行Ansible时自动识别和下载它们.
使用Ansible创建空文件的最简单方法是什么?我知道我可以将一个空文件保存到files目录中,然后将其复制到远程主机,但我觉得有点不尽如人意.
另一种方法是触摸远程主机上的文件:
- name: create fake 'nologin' shell
file: path=/etc/nologin state=touch owner=root group=sys mode=0555
Run Code Online (Sandbox Code Playgroud)
但是每次文件都会被触摸,在日志中显示为黄线,这也是令人不满意的......
这个简单的问题有更好的解决方案吗?
在我的Ansible剧本中,我需要多次在那里创建文件
- name: Copy file
template:
src: code.conf.j2
dest: "{{project_root}}/conf/code.conf"
Run Code Online (Sandbox Code Playgroud)
现在很多次confdir不存在.然后我必须先创建更多任务来创建该目录.
如果不存在某些选项,是否有任何简单的方法来自动创建目录
我想用ansible-playbook的,而不是"命令vagrant provision".但是设置host_key_checking=false了在hosts文件中似乎没有工作.
# hosts file
vagrant ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key
ansible_ssh_user=vagrant ansible_ssh_port=2222 ansible_ssh_host=127.0.0.1
host_key_checking=false
Run Code Online (Sandbox Code Playgroud)
是否有外部的配置变量Vagrantfile可以覆盖这个值?