[Ansible][自分用メモ] 実行先のアーキテクチャとOSを判別して分岐実行する

AIX、UNIX、LinuxSoftware

筆者宅ではARMのシングルボードコンピュータなど含めていくつかあるのですが、管理のためにAnsibleなどを活用しています。

複数のARM SBCへAnsibleを実行する際に、x86_64やAArch64、Armhfな環境が混じるためにOSおよびアーキテクチャを判別して実行するにはどうすれば良いのかちょっと調べたことをメモしておきます。

使用する変数

AnsibleではGather_factにより実行先の情報について取得できますが、OSとアーキテクチャは以下の変数で判別できます。

  • OS
    • ansible_os_family
    • ansible_distribution
  • アーキテクチャ
    • ansible_architecture

実際にRock64に対して実行し取得した情報の一部を抜粋したものがこちら。

取得例

        "ansible_architecture": "aarch64", 
        "ansible_bios_date": "NA",
        "ansible_bios_version": "NA",  
・・・
        "ansible_distribution": "Ubuntu",
        "ansible_distribution_file_parsed": true,
・・・
        "ansible_os_family": "Debian",                       
        "ansible_pkg_mgr": "apt",                                                  
        "ansible_proc_cmdline": {

自分の場合、例えばMackerel-agentをインストールするときにOSとアーキテクチャを指定して実行するなどに使用しています。この場合、厳密にOS判定を使用する必要がなく、あくまでDebian系であり、debパッケージがインストール出来れば良いので ansible_os_family 変数を使用しています。

使用例

  - name: install mackerel-agent for AArch64
    apt:
      deb: "https://github.com/mackerelio/mackerel-agent/releases/download/v{{ version }}/mackerel-agent_{{ version }}-1.systemd_arm64.deb"
    when: 
      ansible_architecture == "aarch64" and ansible_os_family == 'Debian'
    notify:
      mackerel-agent restart

  - name: install mackerel-agent for Armhf
    apt:
      deb: "https://github.com/mackerelio/mackerel-agent/releases/download/v{{ version }}/mackerel-agent_{{ version }}-1.systemd_armhf.deb"
    when: 
      ansible_architecture == "armv7l" and ansible_os_family == 'Debian'
    notify:

参考先によると、Amazon Linuxとかはansible_os_familyではなくて ansible_distribution らしい・・・

- name: hogehoge for Amazon Linux
  shell: echo "hogehoge"
  when: "ansible_distribution == 'Amazon'"

もう少しAnsible力を身に付けたいところです。

参考

この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました