注意事項:これはワークアラウンドな手順です。systemctlを使っていく方が正しい道だと思います。
amazonlinux:2
のコンテナでAnsibleのsystemdモジュールがエラーになるのでserviceで回避する手順です。
具体的には以下のようなタスクを実行したところ、
- name: start jenkins
systemd:
name: jenkins
state: started
以下のようなエラーが出ました。
TASK [start jenkins] ***********************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "cmd": "/usr/bin/systemctl", "msg": "Failed to get D-Bus connection: Operation not permitted", "rc": 1, "stderr": "Failed to get D-Bus connection: Operation not permitted\n", "stderr_lines": ["Failed to get D-Bus connection: Operation not permitted"], "stdout": "", "stdout_lines": []}
対策
systemdではなくて、serviceを使用します。
serviceを使用するために、initscripts
をインストールします。
- name: Install yum packages
yum:
name:
- initscripts
- name: start jenkins
service:
name: jenkins
state: started
おまけ: VSCでamazonlinux2のイメージでAnsibleをテストできるようにするまでの手順
なぜこんなことをやったのかと言うと、VSC(Visual Studio Code)のAnsible Extentionを使うと、
手元でDockerを利用しながらサクサクとAnsibleを動かしながら書けるためです。
具体的には以下の様なdockerfileを書きます。(デプロイとかしないので小さくする努力を放棄してます)
FROM amazonlinux:2
RUN yum -y install python-pip && pip install ansible
ローカル用にbuildします。タグ名は任意です。
docker build -t localhost/amazonlinux2-ansible .
VSCを立ち上げて、AnsibleのExtentionを入れます。
Extentionの右下の歯車(Setting)をクリックしてExtentionの設定メニューを出します。
検索画面に docker
と入れると、 Custom docker image when running playbook in Docker.
の項目が出るので、自分が作成したコンテナイメージのタグ名を設定します。特に保存するボタンなどはなくて、即反映でした。
この後は、playbookをダブルタップ(右クリック)して Run Ansible Playbook in Docker
を実行すると、上述したコンテナイメージを利用してPlaybookの実行が始まります。