标签: ansible-playbook

Ansible Synchronize无法以root身份创建目录

我正在构建一个Ansible playbook,在将playbook应用到远程服务器之前,我正在使用Vagrant作为测试平台.

我在让Synchronize工作时遇到问题.作为部署的一部分,我需要将一些文件移动到服务器.

这是我的剧本.我把它shell: whoami放在那里以确保命令以root身份运行.

---
- hosts: all
  sudo: yes
  tasks:
    - name: who am I
      shell: whoami
    - name: Sync up www folder
      synchronize: src=www dest=/var
Run Code Online (Sandbox Code Playgroud)

当我运行这个我得到这个:

failed: [default] => {"cmd": "rsync --delay-updates -FF --compress --archive --rsh 'ssh -i /Users/dan/.vagrant.d/insecure_private_key -o StrictHostKeyChecking=no -o Port=2222' --out-format='<<CHANGED>>%i %n%L' www vagrant@127.0.0.1:/var", "failed": true, "rc": 23}
msg: rsync: recv_generator: mkdir "/var/www" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
rsync error: some files/attrs were not …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

2
推荐指数
1
解决办法
5982
查看次数

ansible ec2运行列表需要是实例列表

我正在尝试使用ansible部署ec2实例.

我一直收到错误消息:

FAILED! => {"msg": "running list needs to be a list of instances to run: None",
Run Code Online (Sandbox Code Playgroud)

site.yml

---
- hosts: hornet
  user: root
  sudo: false
  gather_facts: False
  serial: 1
  roles:
    -  role: ec2
Run Code Online (Sandbox Code Playgroud)

角色/ EC2 /任务/ main.yml

---
- include_vars: "env.yml"
- name: create an EC2 instance
  local_action:
    module: ec2
    key_name: "{{ key_name }}"
    region: "{{ region }}"
    instance_type: "{{ instance_type }}"
    image: "{{ image }}"
    group_id: "{{ security_group }}"
    wait: yes
    private_ip: "{{ privip }}"
    assign_public_ip: True
    state: …
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 ansible ansible-playbook

2
推荐指数
1
解决办法
872
查看次数

Ansible add_host没有添加到hosts文件

Ansible版本:1.9.2

我正在运行一个将启动EC2实例的剧本.我有所有变量的site.yml并使用角色来启动EC2实例.这是ec2_launch的main.yml

---
- name: create EC2 instance
  ec2:
    key_name: "{{ keypair }}"
    group_id: "{{ security_group }}"
    instance_type: "{{ instance_type }}"
    image: "{{ image }}"
    region: "{{ region }}"
    vpc_subnet_id: "{{ vpc_subnet_id }}"
    assign_public_ip: yes
    wait: True
    instance_tags:
      Name: "{{ instance_tag }}"
      Environment: "{{ instance_tag2 }}"
    exact_count: 1
    count_tag:
      Name: "{{ instance_tag }}"
      Environment: "{{ instance_tag2 }}"
    monitoring: yes
  register: ec2
- name: add ec2 instance to hosts
  add_host: name={{ item.private_ip }} groups=group_name
  with_items: ec2.instances
- name: wait for SSH …
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 ansible ansible-playbook ansible-inventory

2
推荐指数
1
解决办法
5003
查看次数

Ansible 跳过我的标签

当我在剧本中标记任何特定标签时,Ansible 会忽略它并执行我角色中的每项任务。当我在ansible-playbook命令中标记标签时,我观察到了同样的效果。显然,这是一个简单的例子。我正在尝试更改 LAMP 堆栈配置。下面是角色:

 - name: install packages [Debian]
   apt: name={{ item }} state=present
   with_items:
     - php5-fpm
     - php5-mysql
     - php5-gd
     - php5-imagick
     - php5-pgsql
   when: ansible_distribution == "Debian"
   tags: 
     - debian_install

 - name: change php configuration
   lineinfile: dest={{ item.dest }} regexp={{ item.regexp }} line={{ item.line }}
   with_items:
    - { dest: '/etc/php5/fpm/php.ini', regexp: '^cgi.fix_pathinfo=', line: 'cgi.fix_pathinfo=0' }
   tags: 
     - configure

 - name: make site directory
   file: path={{ site_directory }} owner={{ remote_user }} group={{ remote_group }} mode=0755 state=directory
   tags: …
Run Code Online (Sandbox Code Playgroud)

linux ansible ansible-playbook

2
推荐指数
1
解决办法
3707
查看次数

为什么要有 Ansible“大师剧本”?

在 Ansible 项目中拥有一本主要剧本有什么意义?Ansible最佳实践描述了这样的项目布局:

production      # inventory file for production servers
staging         # inventory file for staging servers
site.yml        # master playbook
webservers.yml  # playbook for webserver tier
dbservers.yml   # playbook for dbserver tier
Run Code Online (Sandbox Code Playgroud)

主剧本将如下所示:

# site.yml
---
- include: webservers.yml
- include: dbservers.yml
Run Code Online (Sandbox Code Playgroud)

webservers 和 dbservers 看起来像这样:

---
- name: configure webservers
  hosts: webservers

  tasks:
    (tasks go here)

  roles:
    (roles go here)
Run Code Online (Sandbox Code Playgroud)

通常,如果您只有一个清单文件,您可以在 ansible.cfg 文件中指定它:

# ansible.cfg
[defaults]
hostfile = inventory
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命令简单地运行您的剧本:

$ ansible-playbook site.yml
Run Code Online (Sandbox Code Playgroud)

但是,如果我们将库存拆分为两个单独的文件,则在运行 playbook 时始终需要指定一个库存文件: …

ansible ansible-playbook

2
推荐指数
1
解决办法
2912
查看次数

在 Ansible Playbook 中指定 PostgreSQL 密码

Ansible 新手,运行版本 2.1.0。我编写了一个 Ansible playbook,它针对一组主机运行 PostgreSQL 查询。当我在 shell 命令中指定 SQL DB 密码时,它可以工作,但我希望针对一组主机运行剧本,并且需要一种更好的方法来输入密码,因为它们都是唯一的。谁能提出更好的方法来做到这一点?

---

- hosts: Test_Hosts    
  sudo: yes    
  sudo_user: root    
  gather_facts: yes
  tasks:    
  - name: Login to DB and run command    
    shell: export PGPASSWORD='Password'; psql -U 'user' -d 'db' -c 'select * FROM table'; 
    register: select_all_from_table

  - name: Display table contents    
    debug: msg="{{ select_all_from_table.stdout }}"
Run Code Online (Sandbox Code Playgroud)

我看到了有关该主题的另一个线程,但不确定如何实施该建议: 使用 ansible playbook 运行 postgresql 命令。Postgresql 需要密码

postgresql ansible ansible-playbook

2
推荐指数
1
解决办法
4082
查看次数

Ansible 根据条件创建变量

我想根据分布创建一个变量,以下代码不起作用,我不知道为什么:

- name: Get Release
  vars: release: xenial
  when: (ansible_distribution_release == 'qiana') or 
        (ansible_distribution_release == 'rebecca') or 
        (ansible_distribution_release == 'rafaela') or 
        (ansible_distribution_release == 'rosa')
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

2
推荐指数
1
解决办法
602
查看次数

自动运行剧本

我最近正在学习 ansible,但我很难弄清楚如何配置 ansible 以在一定时间间隔后自行运行剧本。? 就像傀儡一样。

ansible ansible-playbook

2
推荐指数
1
解决办法
5245
查看次数

Ansible delegate_to 是否与处理程序一起使用?

我写了一个剧本来修改几个远程系统的 IP 地址。我编写剧本是为了一次只更改几个系统,所以我想在修改每个系统时使用 delegate_to 来更改名称服务器上的 DNS 记录,而不是添加针对名称服务器的单独播放,这将更改所有主机一次性IP。

但是,处理程序似乎正在主要剧本目标上运行,而不是我的 delegate_to 目标。有没有人有解决这个问题的建议?

这是我的剧本:

---
host: hosts-to-modify
serial: 1
tasks:
  - Modify IP for host-to-modify
    //snip//

  - name: Modify DNS entry
    delegate_to: dns-servers
    become: yes
    replace:
    args:
      backup: yes
      regexp: '^{{ inventory_hostname }}\s+IN\s+A\s+[\d\.]+$'
      replace: "{{ inventory_hostname }}   IN    A     {{ new_ip }}"
      dest: /etc/bind/db.my.domain
    notify:
      - reload dns service

handlers:
  - name: reload dns service
    become: yes
    service:
    args:
      name: bind9
      state: reloaded
Run Code Online (Sandbox Code Playgroud)

使用如下所示的清单文件:

[dns-servers]
ns01
ns02

[hosts-to-modify]
host1 new_ip=10.1.1.10
host2 new_ip=10.1.1.11
host3 …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

2
推荐指数
1
解决办法
2549
查看次数

当您调用ansible中的角色时,您将如何使用它?

您如何become在ansible中使用角色的用户?

例如,如何使用ansible geerlingguy.nodejsgalaxy中的角色将rootjs安装为root ?这是我所拥有的相关部分:

roles:
  - geerlingguy.nodejs
    become: yes
Run Code Online (Sandbox Code Playgroud)

但这会ERROR! Syntax Error while loading YAML在YAML文件上产生。

ansible ansible-playbook ansible-role

2
推荐指数
1
解决办法
533
查看次数