Recenlty我在现有项目中创建了名为spd的新角色.其他脚本在设置中工作正常.这个新创建的失败.请指出我这里出了什么问题
ansible/roles
spd
tasks
templates
defaults
Run Code Online (Sandbox Code Playgroud)
部署-spd.yml
- hosts:
roles:
- spd
Run Code Online (Sandbox Code Playgroud)
库存文件
[kube-master]
kubernetes-master-1 ansible_host=10.20.0.225 ansible_user=centos ansible_become=true
kubernetes-master-2 ansible_host=10.20.0.226 ansible_user=centos ansible_become=true
kubernetes-master-3 ansible_host=10.20.0.227 ansible_user=centos ansible_become=true
Run Code Online (Sandbox Code Playgroud)
失败
bash-4.3# ansible-playbook -i inventory/inventory deploy-test-ms.yml --ask-vault-pass
Vault password:
PLAY [kube-master] *************************************************************
TASK [setup] *******************************************************************
Thursday 16 March 2017 13:32:05 +0000 (0:00:00.026) 0:00:00.026 ********
fatal: [kubernetes-master-1]: FAILED! => {"failed": true, "msg": "to use the 'ssh' connection type with passwords, you must install the sshpass program"}
fatal: [kubernetes-master-2]: FAILED! => {"failed": true, "msg": "to use …Run Code Online (Sandbox Code Playgroud) 公共IP:xxx.xxx.xxx.xxx(这是工作让公众VM直接访问:webserver-1 ansible_port=50003 ansible_host=xxx.xxx.xxx.xxx ansible_user=ronak ansible_ssh_private_key_file=priv_key)
私人IP:10.0.2.4(ssh ronak@10.0.2.4)
ssh ssh
vagrant host ----> public host (port: 50003) ----> private host (port: 22)
^ ^
using A's using B's
ssh priv key PASSWORD
Run Code Online (Sandbox Code Playgroud)
主机:
[database]
dbserver-1 ansible_port=22 ansible_host=10.0.2.4 ansible_user=ronak ansible_ssh_pass=password
Run Code Online (Sandbox Code Playgroud)
dbserver.yml:
- hosts: "database"
remote_user: ronak
become: yes
become_user: root
become_method: sudo
gather_facts: no
vars:
- ansible_ssh_common_args: '-o ProxyCommand="ssh -i ./priv_key -o StrictHostKeyChecking=no -W %h:%p ronak@xx.xx.xx.xx -p 50003"'
roles:
- dbserver
Run Code Online (Sandbox Code Playgroud)
错误:
vagrant@vagrant-ubuntu-trusty-64:/var/www/Ansible$ ansible-playbook dbserver.yml -vvv
Using /var/www/Ansible/ansible.cfg …Run Code Online (Sandbox Code Playgroud) 嗨,我在执行 curl 解析并注册回 ansible 后,遇到了从 json 输出中提取的变量之一的问题
剧本:
- name: debug stdout
debug:
msg: "{{ result.stdout | from_json }}"
register: dataresult
- name: debug fact
debug:
msg: "{{ dataresult.data.start_time_string }}"
Run Code Online (Sandbox Code Playgroud)
输出 :
TASK [backup_api : debug stdout]
***********************************************
task path: /home/ansible/cm-dha/roles/backup_api/tasks/main.yml:36
ok: [127.0.0.1] => {
"msg": {
"data": [
{
"backup_id": 40362,
"certified": null,
"instance_id": 148,
"start_time": 1506985211,
"start_time_string": "10/03/2017 03:00:11 am"
}
],
"timestamp": 1507022232
}
Run Code Online (Sandbox Code Playgroud)
}
错误:
致命:[127.0.0.1]:失败!=> { "failed": true, "msg": "字段 'args' 有一个无效值,它似乎包含一个未定义的变量。错误是:'dict object' 没有属性 'data'\n …
我的要求是:部署环境作为额外的变量传递到剧本,例如:dev,qa或prod
我有一个名为DEPLOY_URL的变量
根据env变量的值,DEPLOY_URL必须更改.
我尝试过以下操作:
DEPLOY_URLS:
"dev": "xyz"
"prod" : "abc"
"qa" : "123"
DEPLOY_URL: "{{DEPLOY_URLS['{{DEPLOY_ENV}}']}}"
Run Code Online (Sandbox Code Playgroud)
价值永远不会正确.有没有办法使用另一个变量作为密钥访问字典?(使用YAML和ansible)
给定以下剧本 ( deployment.yml):
---
- name: Debug
hosts: applicationservers
tasks:
- debug: msg="{{add_host_entries | default('false')}}"
- debug: msg="{{add_host_entries | default('false') == 'true'}}"
- debug: msg="Add host entries = {{add_host_entries | default('false') == 'true'}}"
- include: add_host_entries.yml
when: add_host_entries | default('false') == 'true'
Run Code Online (Sandbox Code Playgroud)
add_host_entries.yml即使上述所有调试消息都打印某种类型的内容,要包含的条件总是失败true(我知道在第一个调试消息中它是字符串,而其他两个结果是布尔值)。
当我省略默认值部分时,add_host_entries.yml将执行:
when: add_host_entries
Run Code Online (Sandbox Code Playgroud)
不过,我需要这个默认值行为,因为它是一个可选值,仅在某些阶段设置。
when: (add_host_entries | default('false')) == 'true'
Run Code Online (Sandbox Code Playgroud)
when: add_host_entries|default('false')|bool
Run Code Online (Sandbox Code Playgroud)
以下是重现问题所需的所有资源。
add_host_entries.yml---
- name: add_host_entries
hosts: applicationservers
gather_facts: false
tasks:
- debug: msg="Add Host …Run Code Online (Sandbox Code Playgroud) 我想从 Ansible 中的以下 json 对象中提取一个值:
"msg": {
"NatGateway": {
"CreateTime": "2016-10-03T17:46:07.548Z",
"NatGatewayAddresses": [
{
"AllocationId": "eipalloc-a22b9bc5"
}
],
"NatGatewayId": "nat-0d3b5a556c8a1c261",
"State": "pending",
"SubnetId": "subnet-5d353039",
"VpcId": "vpc-eee3fe8a"
}
}
}
Run Code Online (Sandbox Code Playgroud)
从上面的 json 中,我只想提取值“0d3b5a556c8a1c261”。我怎么做?我尝试过使用正则表达式,但到目前为止还没有运气。