
筆者宅では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:
もう少しAnsible力を身に付けたいところです。