これは、なにをしたくて書いたもの?
Ansible GalaxyのRoleを作る練習に、と。
お題は、Infinispan Serverとして、こちらをインストールするAnsible GalaxyでのRoleを作成してみます。
環境
今回の環境は、こちら。
$ ansible --version ansible 2.9.2 config file = None configured module search path = ['$HOME/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /path/to/venv/lib/python3.6/site-packages/ansible executable location = /path/to/venv/bin/ansible python version = 3.6.9 (default, Nov 7 2019, 10:44:02) [GCC 8.3.0] $ ansible-galaxy --version ansible-galaxy 2.9.2 config file = None configured module search path = ['$HOME/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /path/to/venv/lib/python3.6/site-packages/ansible executable location = /path/to/venv/bin/ansible python version = 3.6.9 (default, Nov 7 2019, 10:44:02) [GCC 8.3.0]
Ansible 2.9.2です。
Infinispan Server 10.0.0.Final以上を対象に、プラットフォームはUbuntu Linux 18.04 LTS、CentOS 7で確認しています。
やったこと
以下のコマンドでAnsible GalaxyのRoleを作成して、しばらく試した後に
$ ansible-galaxy init roles/infinispan-server
「roles/infinispan-server」ディレクトリの中身をまるっとこちらに移動。
GitHub - kazuhira-r/ansible-infinispan-server: Ansible Galaxy Role for Infinispan Server
使ってみる
このあたりを見ながら。
Galaxy User Guide — Ansible Documentation
Installing content — Ansible Documentation
Ansible GalaxyでGithub以外のリポジトリからRoleをインストールする - Qiita
インストール。
$ ansible-galaxy install git+https://github.com/kazuhira-r/ansible-infinispan-server - extracting ansible-infinispan-server to $HOME/.ansible/roles/ansible-infinispan-server - ansible-infinispan-server was installed successfully
リストで確認。
$ ansible-galaxy list # $HOME/.ansible/roles - ansible-infinispan-server, (unknown version) [WARNING]: - the configured path /usr/share/ansible/roles does not exist. [WARNING]: - the configured path /etc/ansible/roles does not exist.
アンインストール。
$ ansible-galaxy role remove ansible-infinispan-server
「requirements.yml」を使えば、別名でインストールすることもできます。
requirements.yml
--- - src: https://github.com/kazuhira-r/ansible-infinispan-server version: master name: kazuhira-r.infinispan-server
requirements.ymlの書き方は、こちらを参考に。
Installing Multiple Roles From a File
ここでは、別名を「kazuhira-r.infinispan-server」というふうに「namespace.role_name」の形態にしてみました。
インストール。
$ ansible-galaxy install -r requirements.yml - extracting infinispan-server to $HOME/.ansible/roles/infinispan-server - infinispan-server (master) was installed successfully
確認。
$ ansible-galaxy list # $HOME/.ansible/roles - kazuhira-r.infinispan-server, master [WARNING]: - the configured path /usr/share/ansible/roles does not exist. [WARNING]: - the configured path /etc/ansible/roles does not exist.
Inventoryと
hosts
[infinispan_servers] 192.168.33.10 [infinispan_servers:vars] ...
Playbookを用意。 infinispan-server.yml
--- - name: install infinispan server hosts: infinispan_servers roles: - name: kazuhira-r.infinispan-server vars: systemd_environment_file_template: "systemd/infinispan-server.j2" infinispan_server_config_file_template: "server/conf/infinispan.xml.j2"
実行。
$ ansible-playbook -i hosts infinispan-server.yml
用意したテンプレートは、systemdのEnvironmentFileと、Infinispanの設定ファイルです。
templates/systemd/infinispan-server.j2
JAVA_OPTS=-Xms512m -Xmx512m -XX:MetaspaceSize=32M -XX:MaxMetaspaceSize=64m -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true
templates/server/conf/infinispan.xml.j2
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:{{ infinispan_server_minor_version }} https://infinispan.org/schemas/infinispan-config-{{ infinispan_server_minor_version }}.xsd urn:infinispan:server:{{ infinispan_server_minor_version }} https://infinispan.org/schemas/infinispan-server-{{ infinispan_server_minor_version }}.xsd" xmlns="urn:infinispan:config:{{ infinispan_server_minor_version }}" xmlns:server="urn:infinispan:server:{{ infinispan_server_minor_version }}"> <cache-container name="default" statistics="true"> <transport cluster="${infinispan.cluster.name}" stack="${infinispan.cluster.stack:tcp}"/> </cache-container> <!-- hoge --> <server xmlns="urn:infinispan:server:{{ infinispan_server_minor_version }}"> <interfaces> <interface name="public"> <inet-address value="${infinispan.bind.address:127.0.0.1}"/> </interface> </interfaces> <socket-bindings default-interface="public" port-offset="${infinispan.socket.binding.port-offset:0}"> <socket-binding name="default" port="${infinispan.bind.port:11222}"/> <socket-binding name="memcached" port="11221"/> </socket-bindings> <security> <security-realms> <security-realm name="default"> <!-- Uncomment to enable TLS on the realm --> <!-- server-identities> <ssl> <keystore path="application.keystore" relative-to="infinispan.server.config.path" keystore-password="password" alias="server" key-password="password" generate-self-signed-certificate-host="localhost"/> </ssl> </server-identities--> <properties-realm groups-attribute="Roles"> <user-properties path="users.properties" relative-to="infinispan.server.config.path"/> <group-properties path="groups.properties" relative-to="infinispan.server.config.path" /> </properties-realm> </security-realm> </security-realms> </security> <endpoints socket-binding="default" security-realm="default"> <hotrod-connector name="hotrod"/> <rest-connector name="rest"/> </endpoints> </server> </infinispan>
とりあえず、作ってみましたということで。
設定などは、ソースやREADMEを参照してください。