我正在使用Ansible来管理DRONE HUB的配置
使用Ansible来管理DRONE HUB的配置的故事。
首先或第一
我是SENSYN Robotics(センシンロボティクス)的中山。我的工作职责是负责开发Web应用及其基础设施,并连接Web和无人机的设备驱动程序。
这次的讨论是关于使用Ansible进行DRONE HUB内部配置管理的事情。
无人机中的Ansible
Ansible作为一种工具主要用于服务器管理,但在开发环境的创建等方面也有应用,并可以在集成了Linux和Windows的无人机上使用。
DRONE HUB内部正在运行Ubuntu Linux,有各种软件,比如可以与云端同步数据并加密通信的SSH端口转发功能。由于对于每个飞行器都要进行这些软件的部署和配置更改有一定的工作量,所以我们使用Ansible来执行这些任务。
与其通过SSH逐个手动进入设备进行设置,
-
- 操作ミスや漏れによる設定の差異をなくせる
-
- デプロイする対象や方法をGitで管理できるので、レビュープロセスを通せる
-
- 機体ごとに設定する値(公開鍵やAPI Key)を集中管理できる
-
- Playbookを実行するだけなので、同時に複数機体へのデプロイができる
- 出荷時の手間を減らせる
有诸多优点。
特定的部署目标
在部署机器上,我们使用Ansible来自动化以下功能。
-
- 撮影データをクラウドと同期する機能
-
- MQTTをSSH port forwarding経由で秘匿化する設定
- LTEモジュールの設定
除了其他的,也有一个用于在起降时进行警示的警示灯作为一个系统,以及用于部署软件的部署使用。我们使用Raspberry Pi来实现是否旋转警示灯的判断。
实施
Ansible是用Python实现的,Python因其复杂的主体和库版本管理而闻名。由于不想被Python环境管理困扰,我直接使用了Docker Hub上的Ansible镜像。
docker pull cytopia/ansible:2.8-tools
当执行操作时,我使用Makefile。
中文翻译:Makefile的内容
deploy/lte:
cd lte \
&& docker run \
--rm \
-it \
-v $$(pwd):/opt/scripts \
-v $$(pwd)/../settings:/opt/settings \
-v $$(pwd)/../settings/ansible.cfg:/etc/ansible/ansible.cfg \
cytopia/ansible:2.8-tools \
sh -c "ansible-playbook \
-i /opt/settings/host.ini \
playbook.yml"
运行Make
make deploy/lte
Playbook被分为几个角色。
玩法手册
- hosts:
- vehicle
become: yes
vars_files:
- vars/common.yml
roles:
- device
- ppp
- boot
通过device角色将LTE模块识别为USB调制解调器,并通过ppp角色进行基于USB调制解调器的PPP通信设置。这些设置可在启动时通过boot角色启用,并以部署systemd单元的方式进行。
在部署其他功能时,我们也以将软件层分配到角色中的方式进行管理。如果有其他更好的方法,欢迎在评论栏提供提示。
总结
-
- Ansibleはサーバ管理だけではなく、ドローン内部のソフトウェアを管理するのにも便利
- ソフトウェアのレイヤーをAnsibleのロールに割り当てるイメージで管理している