在lineinfile模块中,它替换了整行.
如果线很长,我必须再次重复整行.
我们假设我想替换文件中的单个单词:
#abc.conf
This is my horse
Run Code Online (Sandbox Code Playgroud)
这是剧本:
- lineinfile: dest=abc.conf
state=present
regexp='horse'
line='This is my dog'
backup=yes
Run Code Online (Sandbox Code Playgroud)
有没有办法实现某些喜欢sed 's/horse/dog/g'?
我试图把这些线转变成我可以放在一个安息书中的东西:
# Install Prezto files
shopt -s extglob
shopt -s nullglob
files=( "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/!(README.md) )
for rcfile in "${files[@]}"; do
[[ -f $rcfile ]] && ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile##*/}"
done
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有以下内容:
- name: Link Prezto files
file: src={{ item }} dest=~ state=link
with_fileglob:
- ~/.zprezto/runcoms/z*
Run Code Online (Sandbox Code Playgroud)
我知道它不一样,但它会选择相同的文件:除了主机上的with_fileglob外观,我希望它在远程机器上查看.
有没有办法做到这一点,或者我应该只使用shell脚本?
我开始使用ansible,我正在寻找一种方法来在服务器上创建一个样板项目,并在本地环境中使用ansible playbooks.
我想在本地使用ansible模板来创建一些通用文件.但是我如何采取ansible在本地执行某些事情?
我用local_action读了一些东西,但我想我没弄错.
这是针对webbserver ...但是如何在本地创建一些文件呢?
- hosts: webservers
remote_user: someuser
- name: create some file
template: src=~/workspace/ansible_templates/somefile_template.j2 dest=/etc/somefile/apps-available/someproject.ini
Run Code Online (Sandbox Code Playgroud) 尝试使用Ansible的ec2_ami模块在AWS中注册ec2实例,并使用当前日期/时间作为版本(我们最终将在未来制作大量AMI).
这就是我所拥有的:
- name: Create new AMI
hosts: localhost
connection: local
gather_facts: false
vars:
tasks:
- include_vars: ami_vars.yml
- debug: var=ansible_date_time
- name: Register ec2 instance as AMI
ec2_ami: aws_access_key={{ ec2_access_key }}
aws_secret_key={{ ec2_secret_key }}
instance_id={{ temp_instance.instance_ids[0] }}
region={{ region }}
wait=yes
name={{ ami_name }}
with_items: temp_instance
register: new_ami
Run Code Online (Sandbox Code Playgroud)
来自ami_vars.yml:
ami_version: "{{ ansible_date_time.iso8601 }}"
ami_name: ami_test_{{ ami_version }}
Run Code Online (Sandbox Code Playgroud)
当我运行完整的剧本时,我收到以下错误消息:
fatal: [localhost]: FAILED! => {"failed": true, "msg": "ERROR! ERROR! ERROR! 'ansible_date_time' is undefined"}
Run Code Online (Sandbox Code Playgroud)
但是,当从单独的playbook单独运行debug命令时,它可以正常工作:
- name: Test date-time lookup
hosts: localhost …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取某个组的主机数量.
想象一下这样的库存文件:
[maingroup]
server-[01:05]
Run Code Online (Sandbox Code Playgroud)
现在在我的剧本中我想获得maingroup其中一部分将5在这种情况下的主机数量,并将其存储在一个变量中,该变量应该在其中一个剧本任务的模板中使用.
目前我手动设置变量,这远非理想.
vars:
HOST_COUNT: 5
Run Code Online (Sandbox Code Playgroud) 我的几个剧本都有这样的子剧结构:
- hosts: sites
user: root
tags:
- configuration
tasks:
(...)
- hosts: sites
user: root
tags:
- db
tasks:
(...)
- hosts: sites
user: "{{ site_vars.user }}"
tags:
- app
tasks:
(...)
Run Code Online (Sandbox Code Playgroud)
在Ansible 1.x中,管理员和开发人员都能够使用这样的剧本.管理员可以使用所有标记(root和用户访问)运行它,而开发人员只能访问最后一个标记,其中任务位于用户访问级别.当开发人员使用app标签运行此playbook时,前两个标签会跳过收集事实.然而,现在,在Ansible 2.1中,它没有被跳过,这导致没有root访问权限的用户失败.
是否有机制或简单修改来解决此问题?现在是否应该采用一种新方法应用于此类案件?
所以看起来这个功能已经被弃用了,我真的不明白为什么,Ansible CTO说我们应该使用with_nested但老实说我不知道怎么做,
这是我的playboook:
- hosts: all
user: root
vars:
- sites:
- site: site1.com
repo: ssh://hg@bitbucket.org/orgname/reponame
nginx_ssl: true;
copy_init:
- path1/file1.txt
- path2/file2.php
- path2/file3.php
- site: site2.net
repo: ssh://hg@bitbucket.org/orgname/reposite2
- site: site4.com
repo: ssh://hg@bitbucket.org/orgname/reposite3
copy_init:
- path2/file2.php
tasks:
- name: Bootstrap Sites
include: bootstrap_site.yml site={{item}}
Run Code Online (Sandbox Code Playgroud)
并尝试在Ansible 1.6.6中执行此错误消息:
错误:[DEPRECATED]:include + with_items是已删除的已弃用功能.请更新你的剧本.
如何将此剧本转换为适用于此ansible版本的内容?
我正在使用Ansible,我只想运行一次任务.我按照有关如何仅配置和运行任务一次的文档
- name: apt update
shell: apt-get update
run_once: true
Run Code Online (Sandbox Code Playgroud)
但是当我运行Ansible时,它总是运行这个任务.我怎么能只运行一次我的任务.
我一直在努力让Ansible配置远程机器,我希望远程机器能够设置自己的密钥,并且能够从Bitbucket克隆git存储库.
用户已设置,有自己的id_rsa.pub,并且密钥已在bitbucket中注册.
但是,当我使用Ansible Git模块时,看起来模块总是试图使用运行playbook的机器上的键.
如何让git模块使用远程机器上的id_rsa.pub?
相关的任务是这样的:
- name: be sure prom-king has an up-to-date clone of its own repository
git:
repo: "ssh://ddcrnd@bitbucket.org/prom-king.git"
dest: /home/promking/prom-king
accept_hostkey: yes
clone: yes
key_file: /home/promking/.ssh/id_rsa.pub
update: yes
Run Code Online (Sandbox Code Playgroud)
相关的库存就是这个
# inventory file for use with the vagrant box in the testing directory.
[prom-king]
192.168.168.192 ansible_ssh_host=127.0.0.1 ansible_sudo=true ansible_connection=ssh ansible_ssh_port=2222 ansible_ssh_user=vagrant ansible_ssh_private_key_file=testing/.vagrant/machines/default/virtualbox/private_key
Run Code Online (Sandbox Code Playgroud) 我正在运行ansible-playbook其中列出了许多任务.所有这些都用来逐个运行,但我想pause在特定任务之后向剧本询问用户是否要继续运行其余任务或退出.我已经看到了pause moduleansible但是看不到任何询问用户是或否的示例,而这些示例依次继续或退出ansible-playbook.
ansible ×10
ansible-playbook ×10
amazon-ec2 ×1
ansible-2.x ×1
bash ×1
deprecated ×1
git ×1
idempotent ×1
linux ×1
shell ×1
ssh ×1
ssh-keys ×1
task ×1