apt modlueのオプションが色々あるので見てみる

## はじめに
[ansible aptモジュール サンプル](https://qiita.com/maki_azuki/items/b0679959a61e00966c75)を作ったはいいけどそれなりにパラメータが有るので色々試してみようと思う

**<font color="red">長いのでサイドバーの目次からオプション毎に見てね</font>**

### <font color="red">注意</font>
ここに書いてないオプションは[こっち](https://qiita.com/maki_azuki/items/b0679959a61e00966c75)で既にやっているので書いてない場合がある。

##### - machine specs
ansible version : 2.7.10 (pip)
OS version : ubuntu 16.04.5 ( in conoha VPS)

- official page : [apt](https://docs.ansible.com/ansible/latest/modules/apt_module.html)

## パラメータ一覧
本当は表形式にしたかったけど断念。（mac使い慣れてないのだ。。。)
以下の様に結構多い。前述のサンプル以外で使っていないものを中心に調べてみようと思う

```yaml:parameter_all
- hosts: all
  user: root
  tasks:
  - name: Install the package "libvirt-bin"
    apt:
      name: <package name>
      allow_unauthenticated: no(default) / yes
      autoclean: no(default) / yes
      autoremove: no(default) / yes
      cache_valid_time: 0(default)
      deb: < debian package path >
      default_release: < distribution >
      dpkg_options: force-confdef,force-confold(default)
      force: no(default) / yes
      force_apt_get: no(default) / yes
      install_recommends: no / yes
      only_upgrade: no(default) / yes
      purge: no(default) / yes
      state: present(default) / absent / build-dep / latest
      update_cache: no(default) / yes
      upgrade: no(default) / dist / full / safe / yes
```

##### - allow_unauthenticated
aptコマンドでいう「--allow-unauthenticated」オプション。
paramterを「yes」にするとapt実行時に当該オプションを付与される。
意味は[パッケージを確認できない場合に無視し、それについて質問しません](https://manpages.debian.org/jessie/apt/apt-get.8.ja.html)
*あまり意識して使った覚えがないな（＝＝；*

##### - autoclean
意味は[clean と同様に、autoclean は取得したパッケージのローカルリポジトリを掃除します。](https://manpages.debian.org/jessie/apt/apt-get.8.ja.html)
*「/var/cache/apt/archive」配下を綺麗にすると思ったけどそれとは違った。*
また、install/remove/purge時に付与してもオプションとして付与される類ではないので使用には注意
というより用途が知りたい（ーー；

##### - cache_valid_time: 0(default)
[Ansibleでのaptキャッシュの更新](https://qiita.com/c0tt0n-candy/items/51fae8a211d8b0e4af07)を行う。

最新のrepository情報の維持をしたい！けど毎パッケージインストール毎にアップデートしたくない！って時に使いそう。

##### - deb
ネットワーク上、もしくはローカルに指定のdebファイルを指定してインストールする。
[実際に実行してみた結果](https://qiita.com/maki_azuki/items/b0679959a61e00966c75#--install-use-debfile)としてaptのhistoryのログに残ってないのでaptではなくdpkgコマンドで実際は導入していると思われる。

##### - default_release
aptコマンドの「-t」オプション相当。
[特定のディストリビューション(trusty,xenial等）からパッケージを検索させてインストールする](https://debian-handbook.info/browse/ja-JP/stable/sect.apt-get.html)ことができる。（無論当該ディストリビュートのリポジトリが参照することが前提条件）
やるとしたら自distよりも新しいdistの何かしらのパッケージをインストールしたい時に使う。
逆だと自distのパッケージが新しすぎて依存関係でエラーになる場合がある。（あった）
指定方法は以下の様にディストリビューション名を指定する。

```
default_release: xenial
```

##### - dpkg_options
aptコマンドの「-o」オプション相当。
**<font color="IndianRed">デフォルトで「force-confdef,force-confold」が付けられている</font>**
オプションはコンマ区切りリストとして指定する必要がある
以下の様にコマンドオプションとして最終的には付与される（されている）

```
-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold
```

##### - force
aptコマンドの「--force-yes」相当。
どのような処理であってもプロンプトを発生させず非対話的に処理が進められる。
(依存関係無視してインストールするオプションって勝手に勘違いしてた（ーー；

##### - force_apt_get
パッケージインストール時に「apt」ではなく、「apt-get」を用いる。
「/var/log/apt/history.log」見ればよく判る。

##### - install_recommends
aptコマンドの「--no-install-recommends」相当。
ざっくりいうと推奨パッケージも一緒にインストールするかしないかを選択出来る。

##### - only_upgrade
aptコマンドの「--only-upgrade」相当。
パッケージが既にインストールされている場合にのみアップグレードする。
（使い所さんが思いつかなかった。冪等性考えるとアップグレードonlyの処理のパターンが思いつかなかった。（install時にstate: latestではアカンのか。。。？）
<font color="blue">旧バージョンがインストールされている状態で且つ新バージョンがインストール出来る状態でこのオプションを指定しても動かない場合がある。</font>

<font color="red">これはstateを定義していない場合、デフォルト設定がpresentであるため発生する。[state: latest]との併用が必要</font>

##### - state
パッケージ操作後の状態を規定する。

- absent : アンインストール時に指定する。（autoremove併用はお好みで）
- latest : 最新版となっている。（最新版をインストールする)
- present : パッケージがインストールされている。
    - (<font color="red"> (旧バージョンでも）</font>既にインストールされている場合は、インストールしない。)
- build-dep : 「apt build-dep」相当。ソースファイルからインストールする。

##### - upgrade
「apt upgrade」相当。オプションは以下の通り。
- no : 何もしない
- yes or safe : safe-upgrade(パッケージ構成を変えない範囲でアップグレードする)
- dist : dist-upgrade (インストールされてるカーネルの更新(Ubuntu)／ディストリビューションの更新)
- full : full-upgrade 前述以外もupgrade(パッケージを削除しないと更新できないパッケージも処理)

safeの場合は、kernel,distの場合はkernel & distribution, fullの場合は他のパッケージも含めて。って意味なのかな？
（いずれ調べたい。運用上、このオプションって使われてるのかな。あんまイメージ湧かない。）

## 結論
どちらかというとaptの勉強になった気がする。
dep-buildなんて知らなんだ。
なるほどなー