我已经提炼了一个有三个剧本的剧本.目标是在一次播放中从提示中收集数据库密码,然后在其他两次播放中使用相同的密码.
---
- name: database password
hosts:
- webservers
- dbservers
vars_prompt:
- name: "db_password"
prompt: "Enter Database Password for databse user root"
default: "root"
- hosts: dbservers
tasks:
- command: echo {{db_password | mandatory }}
- hosts: webservers
tasks:
- command: echo {{db_password | mandatory }}
Run Code Online (Sandbox Code Playgroud)
它失败,如下所示.
Enter Database Password for databse user root [root]:
PLAY [database password] ******************************************************
GATHERING FACTS ***************************************************************
ok: [vc-dev-1]
PLAY [dbservers] **************************************************************
GATHERING FACTS ***************************************************************
ok: [vc-dev-1]
TASK: [command echo {{db_password | mandatory}}] *************************** …Run Code Online (Sandbox Code Playgroud) 我正在使用Ansible,我只想运行一次任务.我按照有关如何仅配置和运行任务一次的文档
- name: apt update
shell: apt-get update
run_once: true
Run Code Online (Sandbox Code Playgroud)
但是当我运行Ansible时,它总是运行这个任务.我怎么能只运行一次我的任务.
我需要在ansible playbook中正确地转义单引号和双引号以设置环境变量.这些都不起作用:
- name: Set environment variable
command: >
export EXTRA_CONFIG=“'”{"client": {"subscriptions": ["DIND-Worker"], "cluster": "internal"}}“'”
- name: Set environment variable
command: >
export EXTRA_CONFIG=''{"client": {"subscriptions": ["DIND-Worker"], "cluster": "internal"}}''
- name: Set environment variable
command: >
export EXTRA_CONFIG=''{\"client\": {\"subscriptions\": [\"DIND-Worker\"], \"cluster\": \"internal\"}}''
Run Code Online (Sandbox Code Playgroud)
看着这个:
http://yaml.org/spec/current.html#id2532720
https://github.com/dotmaster/toYaml/issues/1
我得到的错误信息是:
fatal: [ip.address]: FAILED! => {"changed": false, "cmd": "export 'EXTRA_CONFIG={\"client\":' '{\"subscriptions\":' '[\"DIND-Worker\"],' '\"cluster\":' '\"internal\"}}'", "failed": true, "msg": "[Errno 2] No such file or directory", "rc": 2}
Run Code Online (Sandbox Code Playgroud) 我用以下方式使用ansible:
ansible-playbook -f 1 my-play-book.yaml --ask-pass --ask-sudo-pass
在此之后,我被要求输入ssh和sudo密码(两者的密码相同).
在我的playbook文件中,我正在使用同步任务:
synchronize: mode=push src=rel/path/myfolder/ dest=/abs/path/myfolder/
对于每个主机,我被提示输入远程主机的ssh密码(与我在playbook运行开始时输入的密码相同)
如何在执行同步任务时避免输入密码?
我需要在Centos 6.5中设置Apache/mod_wsgi,所以我的主要YAML文件是这样的:
---
- hosts: dev
tasks:
- name: Updates yum installed packages
yum: name=* state=latest
- hosts: dev
roles:
- { role: apache }
Run Code Online (Sandbox Code Playgroud)
这应该更新所有yum安装的包然后执行apache角色.
apache角色配置为安装Apache/mod_wsgi,将Apache设置为在引导时启动并重新启动它.以下是内容roles/apache/tasks/main.yml:
---
- name: Installs httpd and mod_wsgi
yum: name={{ item }} state=latest
with_items:
- httpd
- mod_wsgi
notify:
- enable httpd
- restart httpd
Run Code Online (Sandbox Code Playgroud)
和处理程序roles/apache/handlers/main.yml:
---
- name: enable httpd
service: name=httpd enabled=yes
- name: restart httpd
service: name=httpd state=restarted
Run Code Online (Sandbox Code Playgroud)
由于在执行playbook时给出了以下输出,因此处理程序似乎无法运行:
PLAY [dev] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [dev.example.com] …Run Code Online (Sandbox Code Playgroud) ---
# file: main.yml
- hosts: fotk
remote_user: fakesudo
tasks:
- name: create a developer user
user: name={{ user }}
password={{ password }}
shell=/bin/bash
generate_ssh_key=yes
state=present
roles:
- { role: create_developer_environment, sudo_user: "{{ user }}" }
- { role: vim, sudo_user: "{{ user }}" }
Run Code Online (Sandbox Code Playgroud)
由于某种原因,创建用户任务未运行.我在Google上搜索了我能想到的每个关键词,找不到答案但没有成功.
角色正在运行,这很奇怪.
一个剧本是否可以包含任务和角色?
我的ansible脚本所在的目录中有一个json文件.以下是json文件的内容:
{ "resources":[
{"name":"package1", "downloadURL":"path-to-file1" },
{"name":"package2", "downloadURL": "path-to-file2"}
]
}
Run Code Online (Sandbox Code Playgroud)
我试图使用get_url下载这些包.以下是方法:
---
- hosts: localhost
vars:
package_dir: "/var/opt/"
version_file: "{{lookup('file','/home/shasha/devOps/tests/packageFile.json')}}"
tasks:
- name: Printing the file.
debug: msg="{{version_file}}"
- name: Downloading the packages.
get_url: url="{{item.downloadURL}}" dest="{{package_dir}}" mode=0777
with_items: version_file.resources
Run Code Online (Sandbox Code Playgroud)
第一个任务是正确打印文件的内容,但在第二个任务中,我收到以下错误:
[DEPRECATION WARNING]: Skipping task due to undefined attribute, in the future this
will be a fatal error.. This feature will be removed in a future release. Deprecation
warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
Run Code Online (Sandbox Code Playgroud) 如果任何Ansible任务失败,则会出现错误输出,Playbook将显示转义的换行符'\n'.对于追溯,跨越多行,这使得它很难阅读.
有没有一种方法,使ansible,剧本显示,从输出转义错误shell,pip,git以及其他类似的任务?
当我lineinfile在ansible中使用它不是写字',"字符
lineinfile: 'dest=/home/xyz state=present line="CACHES="default""'
它是给予,CACHES=default
但所需的输出是CACHES="default"
怎么做到这一点?
一个变量中的Ansible剧本如何包含另一个剧本?register
例如,将以下寄存器执行的结果tasks/foo.yml中result_of_foo?
tasks:
- include: tasks/foo.yml
- register: result_of_foo
Run Code Online (Sandbox Code Playgroud)
Ansible如何记录任务序列的结果?
ansible-playbook ×10
ansible ×8
ansible-2.x ×1
escaping ×1
idempotent ×1
passwords ×1
rsync ×1
ssh ×1
synchronize ×1
task ×1
yaml ×1