【Ansible】"yes"という文字列を変数に格納したのに…

f:id:hira98:20190915225211p:plain

【結論】

  • Ansible嫌いな人間が、全く理解できないAnsibleの仕様をおもしろおかしく書いたブログになります。

【目次】

はじめに

イリュージョニストAnsibleのマジックショー🎉🎉」

多少のプログラミング経験をお持ちのそこのあなた。

今宵あなたはAnsibleが織りなす、不思議な現象に度肝を抜かれることでしょう😎

Pythonで書いた場合

Ansibleによるイリュージョンをお見せする前に、まずは同じ処理をPythonで書いた場合について解説します。

以下のコードを実行しても、宣言した4種類の変数は全く違う値を格納しているので「全て同じ値です。」と出力されることはありません。

それどころか、var_yes = yesyesという定義はないと怒られます。

理由はboolean型として定義されているのはTrueFalseだけだからです。

また、大文字小文字も見ているのでvar_true = Truevar_true = trueと書いても怒られます。

# python
str_yes = "yes"
str_true =  "True"
var_true = True
var_yes = yes

if str_yes == str_true == var_true == var_yes:
  print("全て同じ値です。")

これを改善して次のようなロジックに変えたとしても、今度はif文で怒られます。

str_yesstr_trueは文字列型で、var_trueはboolean型になり、異なる型の変数を比較しようとしているためです。

# python
str_yes = "yes"
str_true =  "True"
var_true = True

if str_yes == str_true == var_true:
  print("全て同じ値です。")

さらに改善して、次のようなロジックに変えたとしても、「全て同じ値です。」とは出力されません。

なぜなら、"yes""True"は異なる文字列だからです。

# python
str_yes = "yes"
str_true =  "True"
if str_yes == str_true:
  print("全て同じ値です。")

Ansibleで書いた場合

だらだらと分かりきっているPythonコードを解説されて退屈されているプログラマーの皆さん。

お待たせしました。

以下のソースがAnsibleだからこそ書けるマジックソースです。

---
- hosts: localhost  # 自分自身に接続する
  tasks:

  - set_fact:
      str_yes: "yes"
      str_true: "true"
      var_true: true
      var_yes: yes

  - debug:
      msg: "全て同じ値です。"
    when: (str_yes == str_true == var_true == var_yes)

Pythonコードと全く同じ処理をAnsibleで書いています。

「異なる値を格納した4つの変数が全て同じになるわけがないだろ😤」

最初にこのコードを見たときは私も同じ感想を持ちました。

しかし、実行してみるとあら不思議「全て同じ値です。」と出力されます🎉

f:id:hira98:20190915225303p:plain

さらに次のようなコードも追加して、変数に格納された値と型も出力してみましょう。

---
- hosts: localhost  # 自分自身に接続する
  tasks:

  - set_fact:
      str_yes: "yes"
      str_true: "true"
      var_true: true
      var_yes: yes

  - debug:
      msg: "全て同じ値です。"
    when: (str_yes == str_true == var_true == var_yes)

  - name: "str_yes"
    debug: 
      msg: "val: {{str_yes}}  type: {{ str_yes | type_debug}}"

  - name: "str_true"
    debug: 
      msg: "val: {{str_true}}  type: {{ str_true | type_debug}}"

  - name: "var_true"
    debug: 
      msg: "val: {{var_true}}  type: {{ var_true | type_debug}}"

  - name: "var_yes"
    debug: 
      msg: "val: {{var_yes}}  type: {{ var_yes | type_debug}}"

果たしてどのような結果が出力されるでしょうか?

気になる実行結果はCMの後で🤪

.

.

.

.

.

.

.

.

どんな名曲も私たちの色に染めてみせます!!実力派アカペラ男女ユニット「Groovy groove」のカバー曲

多くは語りません。一度その動画を見れば、綺麗な歌声に、アカペラならではのアレンジにあなたも一瞬で虜になることでしょう。

Youtubeに無料で公開されているので、もし時間があるのであれば、ぜひ一度聞いて見てください。

【アカペラ】もらい泣き - 一青窈|Cover by Groovy groove

【アカペラ】白日 - King Gnu|Cover by Groovy groove

【アカペラ】原宿いやほい - きゃりーぱみゅぱみゅ|Groovy groove

【アカペラ】デジモンメドレー(Digimon Medley)|Groovy groove

【アカペラ】真夏の夜の匂いがする - あいみょん|Cover by Groovy groove

「Groovy groove」のYoutubeチャンネルは以下になります。

https://www.youtube.com/channel/UC2ZQJqk4jVeI1e6jk2f3RkQ/videos

※ 本CMは個人の趣味で勝手に提供しているだけで、「Youtube」や「Groovy groove」との利益関係は一切ございません。

.

.

.

.

.

.

.

.

さあ、果たして「異なる値を格納した4つの変数」はどのような結果を出力するのでしょうか。

その結果が以下になります。

f:id:hira98:20190915225320p:plain

なんと、なんと、同じ値と型が出力されているではありませんかー。

これぞ、Ansiblだからこそ起こせる、プログラマーには全く理解できないイリュージョンです。

さいごに

全力でAnsibleをネタにしたブログを書いてしまった😇

Ansible😘な人に叩かれたらどうしよう🥶