小编Kon*_*rov的帖子

要使用带密码的'ssh'连接类型,必须安装sshpass程序"

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)

ansible

25
推荐指数
5
解决办法
5万
查看次数

SSH进入私有主机Ansible

公共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)

ssh ansible

7
推荐指数
1
解决办法
1735
查看次数

从 json 输出中提取一个变量,然后使用 ansible 调试和注册输出

嗨,我在执行 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 …

json ansible

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

使用另一个变量作为键YAML访问字典

我的要求是:部署环境作为额外的变量传递到剧本,例如: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)

yaml ansible

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

当变量具有默认值时,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 ansible-2.x

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

在ansible中提取json对象值

我想从 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”。我怎么做?我尝试过使用正则表达式,但到目前为止还没有运气。

json ansible

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

标签 统计

ansible ×6

json ×2

ansible-2.x ×1

ssh ×1

yaml ×1