modules apt: only_upgrade fail

Hello,

Having either apt: only_upgrade=docker-engine in my playbook or running it on the command line as ansible all --sudo -m apt -a ‘only_upgrade=docker-engine’ fails with

xx.xxx.xx.xxx | FAILED! => {
"changed": false,
"failed": true,
"msg": "Boolean docker-engine not in either boolean list"
}

In the document

only_upgrade(added in 2.1)
Only install/upgrade a package if it is already installed.

my local ansible version is

ansible 2.1.0.0
config file = /etc/ansible/ansible.cfg
configured module search path = ['/usr/share/ansible']

my host docker version is 1.11.0,I just want to only upgrade this package docker-engine to 1.11.2

my playbook is here


---
- hosts: xxxx
sudo: yes
vars:
apt_packages:
- apt-transport-https
- ca-certificates

tasks:
- name: add CA certificates are installed.
apt:
name: "{{ item }}"
update_cache: yes
with_items: apt_packages

- name: add apt-key of dockers
apt_key:
keyserver: p80.pool.sks-keyservers.net
id: 58118E89F3A912897C070ADBF76221572C52609D

- name: modify /etc/apt/sources.list.d/docker.list
replace:
dest: /etc/apt/sources.list.d/docker.list
regexp: '^deb http'
replace: "deb https"

- name: upgrade docker-engine
apt:
only_upgrade: docker-engine

Thanks!

xx.xxx.xx.xxx | FAILED! => {
     "changed": false,
     "failed": true,
     "msg": "Boolean docker-engine not in either boolean list"
}
```

In the document

only_upgrade(added in 2.1)
Only install/upgrade a package if it is already installed.

The documentation also say the default value is false, so this option can only be true or false.

    - name: upgrade docker-engine
      apt:
          only_upgrade: docker-engine

This should be
- name: upgrade docker-engine
   apt:
     name: docker-engine
     only_upgrade: true

I also think you need to add state: latest to have it upgrade the package.

I just think this way is reinstall docker-engie to latest when you ues name and state=lastest

it’s different to upgrade this procedure

在 2016年7月21日星期四 UTC+8下午10:44:46,Kai Stian Olstad写道:

Thanks for you suggestion but I just get this when use you way

- name: upgrade docker-engine
apt:
name: docker-engine
only_upgrade: docker-engine

# state: latest


TASK [upgrade docker-engine] ***************************************************
ok: [xx.xx.xx.xx]

and if I add state:latest, I just think only_upgrade is not work , because I also can install the latest version without only_upgrade

在 2016年7月21日星期四 UTC+8下午10:44:46,Kai Stian Olstad写道:

I'm not sure I understand you, my test of only_upgrade

$ dpkg -l htop
dpkg-query: no packages found matching htop

I run this task:
- name: upgrade if exist
   apt:
     name=htop
     state=latest
     only_upgrade=true

The output:
TASK [upgrade if exist]

Thank you very much ,

I know it right now ,thank you very much

you get the stdout message used register and debug ??

在 2016年7月28日星期四 UTC+8下午2:58:23,Kai Stian Olstad写道:

No, I use a callback plugin that give a more human readable output.
The one I use is this one
https://github.com/n0ts/ansible-human_log

Woo!!

Thanks a lot

在 2016年7月29日星期五 UTC+8上午1:15:48,Kai Stian Olstad写道: