标签: ansible-playbook

Ansible:是否有可能搜索替换单个单词

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'

linux ansible ansible-playbook

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

ansible:远程机器上的文件有with_fileglobs吗?

我试图把这些线转变成我可以放在一个安息书中的东西:

# 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脚本?

bash shell ansible ansible-playbook

18
推荐指数
3
解决办法
7913
查看次数

如何在开发计算机上使用ansible模板在本地创建文件

我开始使用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 ansible-playbook

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

'ansible_date_time'未定义

尝试使用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)

amazon-ec2 amazon-web-services ansible ansible-playbook

18
推荐指数
1
解决办法
5824
查看次数

Ansible:获取组中的主机数量

我正在尝试获取某个组的主机数量.

想象一下这样的库存文件:

[maingroup]
server-[01:05]
Run Code Online (Sandbox Code Playgroud)

现在在我的剧本中我想获得maingroup其中一部分将5在这种情况下的主机数量,并将其存储在一个变量中,该变量应该在其中一个剧本任务的模板中使用.

目前我手动设置变量,这远非理想.

vars:
  HOST_COUNT: 5
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

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

如何禁用未包含在给定标记内的子播放的事实

我的几个剧本都有这样的子剧结构:

- 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 ansible-playbook ansible-2.x

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

Ansible 1.6包含with_items已弃用

所以看起来这个功能已经被弃用了,我真的不明白为什么,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版本的内容?

deprecated ansible ansible-playbook

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

ansible忽略任务上的run_once配置

我正在使用Ansible,我只想运行一次任务.我按照有关如何配置和运行任务一次的文档

- name: apt update
  shell: apt-get update
  run_once: true
Run Code Online (Sandbox Code Playgroud)

但是当我运行Ansible时,它总是运行这个任务.我怎么能只运行一次我的任务.

task idempotent ansible ansible-playbook

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

如何在ansible git模块中使用远程机器的SSH密钥

我一直在努力让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)

git ssh ssh-keys ansible ansible-playbook

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

暂停ansible playbook以进行用户确认,是否运行休息任务

我正在运行ansible-playbook其中列出了许多任务.所有这些都用来逐个运行,但我想pause在特定任务之后向剧本询问用户是否要继续运行其余任务或退出.我已经看到了pause moduleansible但是看不到任何询问用户是或否的示例,而这些示例依次继续或退出ansible-playbook.

ansible ansible-playbook

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