我正在构建一个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部署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) 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) 当我在剧本中标记任何特定标签时,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) 在 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 新手,运行版本 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 需要密码
我想根据分布创建一个变量,以下代码不起作用,我不知道为什么:
- 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 以在一定时间间隔后自行运行剧本。? 就像傀儡一样。
我写了一个剧本来修改几个远程系统的 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) 您如何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文件上产生。