【Ansible Tower/AWX】Subversionのインストールと初期構築


この記事はプロモーションを含みます。

Ansible

AnsibleAWXを使用して、Linux環境にSubversionのインストールから初期設定までを行うプレイブック(スクリプト)をご紹介したいと思います。

構築する環境

AnsibleAWXを使用して、どのような環境を構築するか説明します。

  • OS:AlmaLinux8.4(インストール済み)
  • ミドル:Subversion(インストールされていない場合にインストール)

また、インストールしたSubversionに以下の設定を行います。

  • リポジトリの作成
  • trunk、branches、tags ディレクトリの作成
  • svnserve.confの設定変更
    1. 認証なし読み取り権限の設定
    2. 認証あり書き込み権限の設定
    3. ユーザー・パスワードを使用するよう設定
  • passwdの設定変更
    ユーザー・パスワードの作成
  • svnserveデーモンの起動

AWXの設定

AnsibleAWXでの各種設定についての説明になります。
インベントリー認証情報については特別な設定を行っていませんので、以下を参考にして下さい。
インベントリー
認証情報

テンプレート

今回実行するテンプレートの設定についての説明になります。

項目設定値
名前Setup Subversion
説明Subversionのインストール
ジョブタイプ実行
インベントリーTest Server Inventory
プロジェクト秋拓プロジェクト
PLAYBOOKsetup_subversion.yml
認証情報awx
詳細1(Verbose)

テンプレート追加変数の設定は以下になります。
これらの設定を変更することで、リポジトリ名やリポジトリを格納するディレクトリを変更することが可能です。

---
# リポジトリ管理ディレクトリ
repo_path: /svn_repo
# リポジトリ名
repo_name: test_repo
# リポジトリ作業ディレクトリ
repo_work: /tmp

プレイブック

今回実行するプレイブックになります。

---
- hosts: all
  gather_facts: False
  tasks:

  - name: "Subversionインストール"
    yum:
      name: subversion
      state: latest
    become: yes

  - name: "リポジトリ格納ディレクトリ作成"
    file:
      path: "{{ repo_path }}"
      state: directory
      owner: awx
      group: awx
      mode: 0775
    become: yes

  - name: "リポジトリ存在確認"
    stat:
      path: "{{ repo_path }}/{{ repo_name }}"
    register: repo_exists

  - name: "リポジトリ作成"
    shell: "svnadmin create {{ repo_path }}/{{ repo_name }}"
    when: repo_exists.stat.exists == false

  - name: "作業ディレクトリ削除"
    file:
      path: "{{ repo_work }}/{{ repo_name }}"
      state: absent

  - name: "チェックアウト"
    subversion:
      repo: "file://{{ repo_path }}/{{ repo_name }}"
      dest: "{{ repo_work }}/{{ repo_name }}"
      switch: no

  - name: "trunkディレクトリ存在確認"
    stat:
      path: "{{ repo_work }}/{{ repo_name }}/trunk"
    register: repo_exists

  - name: "trunkディレクトリ作成"
    shell: "svn mkdir file://{{ repo_path }}/{{ repo_name }}/trunk -m 'create'"
    args:
      warn: false
    when: repo_exists.stat.exists == false

  - name: "チェックアウト"
    subversion:
      repo: "file://{{ repo_path }}/{{ repo_name }}"
      dest: "{{ repo_work }}/{{ repo_name }}"
      switch: no

  - name: "branchesディレクトリ存在確認"
    stat:
      path: "{{ repo_work }}/{{ repo_name }}/branches"
    register: repo_exists

  - name: "branchesディレクトリ作成"
    shell: "svn mkdir file://{{ repo_path }}/{{ repo_name }}/branches -m 'create'"
    args:
      warn: false
    when: repo_exists.stat.exists == false

  - name: "チェックアウト"
    subversion:
      repo: "file://{{ repo_path }}/{{ repo_name }}"
      dest: "{{ repo_work }}/{{ repo_name }}"
      switch: no

  - name: "tagsディレクトリ存在確認"
    stat:
      path: "{{ repo_work }}/{{ repo_name }}/tags"
    register: repo_exists

  - name: "tagsディレクトリ作成"
    shell: "svn mkdir file://{{ repo_path }}/{{ repo_name }}/tags -m 'create'"
    args:
      warn: false
    when: repo_exists.stat.exists == false

  - name: "作業ディレクトリ削除"
    file:
      path: "{{ repo_work }}/{{ repo_name }}"
      state: absent

  - name: "svnserve.conf設定変更"
    lineinfile:
      dest: "{{ repo_path }}/{{ repo_name }}/conf/svnserve.conf"
      state: present
      regexp: "{{ item.regexp }}"
      line: "{{ item.line }}"
    with_items:
      - regexp: "# anon-access = read"
        line: "anon-access = read"
      - regexp: "# auth-access = write"
        line: "auth-access = write"
      - regexp: "# password-db = passwd"
        line: "password-db = passwd"

  - name: "passwd設定変更"
    blockinfile:
      dest: "{{ repo_path }}/{{ repo_name }}/conf/passwd"
      insertafter: "^# sally = sallyssecret$"
      content: "awx = awx"

  - name: "svnserveデーモンプロセス情報取得"
    shell: "ps -ef | grep svn"
    register: svnserve_daemon

  - name: "svnserveデーモンプロセス情報確認"
    set_fact:
      svnserve_daemon_flg: true
    with_items: "{{ svnserve_daemon.stdout_lines }}"
    when: item | regex_search(".*"~"svnserve --daemon")

  - name: "svnserveデーモン起動"
    shell: "svnserve --daemon"
    when: svnserve_daemon_flg is not defined

  - name: "svnserveデーモン起動確認"
    shell: "svn log svn://localhost{{ repo_path }}/{{ repo_name }}"
    args:
      warn: false

実行結果

以下の2パターンで実行した結果になります。
① サーバーにSVNがインストールされていない状態で実行
② 「①」を実行した直後に同じ条件で再度実行

ansibleでの実行結果の確認方法を書いておきます。
実行結果中の「TASK [****]」は、プレイブックでの「- name」と紐づいています。
また、「changed」は実際に処理が行われたタスクとなり、「ok」は、既にそのタスクで行われるべき処理が完了している状態(=何もしない)を表しています。

実行結果①:サーバーにSVNがインストールされていない状態で実行

接続先のサーバーに、SVNがインストールされていない状態でジョブを実行すると、SVNのインストールやリポジトリの作成が実行されます。

Using /etc/ansible/ansible.cfg as config file
SSH password: 

PLAY [all] *********************************************************************

TASK [Subversionインストール] ********************************************************
changed: [192.168.56.105] => {"ansible_facts": {"pkg_mgr": "dnf"}, "changed": true, "msg": "", "rc": 0, "results": ["Installed: utf8proc-2.1.1-5.module_el8.3.0+2053+ac338b6d.x86_64", "Installed: apr-1.6.3-12.el8.x86_64", "Installed: subversion-1.10.2-4.module_el8.3.0+2053+ac338b6d.x86_64", "Installed: apr-util-1.6.1-6.el8.x86_64", "Installed: apr-util-bdb-1.6.1-6.el8.x86_64", "Installed: subversion-libs-1.10.2-4.module_el8.3.0+2053+ac338b6d.x86_64", "Installed: libserf-1.3.9-9.module_el8.3.0+2053+ac338b6d.x86_64", "Installed: apr-util-openssl-1.6.1-6.el8.x86_64"]}

TASK [リポジトリ格納ディレクトリ作成] *********************************************************
changed: [192.168.56.105] => {"changed": true, "gid": 1000, "group": "awx", "mode": "0775", "owner": "awx", "path": "/svn_repo", "size": 6, "state": "directory", "uid": 1000}

TASK [リポジトリ存在確認] ***************************************************************
ok: [192.168.56.105] => {"changed": false, "stat": {"exists": false}}

TASK [リポジトリ作成] *****************************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "svnadmin create /svn_repo/test_repo", "delta": "0:00:00.038152", "end": "2022-03-27 06:38:30.475891", "rc": 0, "start": "2022-03-27 06:38:30.437739", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

TASK [作業ディレクトリ削除] **************************************************************
ok: [192.168.56.105] => {"changed": false, "path": "/tmp/test_repo", "state": "absent"}

TASK [チェックアウト] *****************************************************************
changed: [192.168.56.105] => {"after": ["Revision: 0", "URL: file:///svn_repo/test_repo"], "before": null, "changed": true}

TASK [trunkディレクトリ存在確認] *********************************************************
ok: [192.168.56.105] => {"changed": false, "stat": {"exists": false}}

TASK [trunkディレクトリ作成] ***********************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "svn mkdir file:///svn_repo/test_repo/trunk -m 'create'", "delta": "0:00:00.027096", "end": "2022-03-27 06:38:34.053465", "rc": 0, "start": "2022-03-27 06:38:34.026369", "stderr": "", "stderr_lines": [], "stdout": "Committing transaction...\\nCommitted revision 1.", "stdout_lines": ["Committing transaction...", "Committed revision 1."]}

TASK [チェックアウト] *****************************************************************
changed: [192.168.56.105] => {"after": ["Revision: 1", "URL: file:///svn_repo/test_repo"], "before": ["Revision: 0", "URL: file:///svn_repo/test_repo"], "changed": true}

TASK [branchesディレクトリ存在確認] ******************************************************
ok: [192.168.56.105] => {"changed": false, "stat": {"exists": false}}

TASK [branchesディレクトリ作成] ********************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "svn mkdir file:///svn_repo/test_repo/branches -m 'create'", "delta": "0:00:00.023883", "end": "2022-03-27 06:38:36.447324", "rc": 0, "start": "2022-03-27 06:38:36.423441", "stderr": "", "stderr_lines": [], "stdout": "Committing transaction...\\nCommitted revision 2.", "stdout_lines": ["Committing transaction...", "Committed revision 2."]}

TASK [チェックアウト] *****************************************************************
changed: [192.168.56.105] => {"after": ["Revision: 2", "URL: file:///svn_repo/test_repo"], "before": ["Revision: 1", "URL: file:///svn_repo/test_repo"], "changed": true}

TASK [tagsディレクトリ存在確認] **********************************************************
ok: [192.168.56.105] => {"changed": false, "stat": {"exists": false}}

TASK [tagsディレクトリ作成] ************************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "svn mkdir file:///svn_repo/test_repo/tags -m 'create'", "delta": "0:00:00.025264", "end": "2022-03-27 06:38:38.876870", "rc": 0, "start": "2022-03-27 06:38:38.851606", "stderr": "", "stderr_lines": [], "stdout": "Committing transaction...\\nCommitted revision 3.", "stdout_lines": ["Committing transaction...", "Committed revision 3."]}

TASK [作業ディレクトリ削除] **************************************************************
changed: [192.168.56.105] => {"changed": true, "path": "/tmp/test_repo", "state": "absent"}

TASK [svnserve.conf設定変更] *******************************************************
changed: [192.168.56.105] => (item={'regexp': '# anon-access = read', 'line': 'anon-access = read'}) => {"ansible_loop_var": "item", "backup": "", "changed": true, "item": {"line": "anon-access = read", "regexp": "# anon-access = read"}, "msg": "line replaced"}
changed: [192.168.56.105] => (item={'regexp': '# auth-access = write', 'line': 'auth-access = write'}) => {"ansible_loop_var": "item", "backup": "", "changed": true, "item": {"line": "auth-access = write", "regexp": "# auth-access = write"}, "msg": "line replaced"}
changed: [192.168.56.105] => (item={'regexp': '# password-db = passwd', 'line': 'password-db = passwd'}) => {"ansible_loop_var": "item", "backup": "", "changed": true, "item": {"line": "password-db = passwd", "regexp": "# password-db = passwd"}, "msg": "line replaced"}

TASK [passwd設定変更] **************************************************************
changed: [192.168.56.105] => {"changed": true, "msg": "Block inserted"}

TASK [svnserveデーモンプロセス情報取得] ****************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "ps -ef | grep svn", "delta": "0:00:00.012784", "end": "2022-03-27 06:38:43.122772", "rc": 0, "start": "2022-03-27 06:38:43.109988", "stderr": "", "stderr_lines": [], "stdout": "awx        24440   24439  0 06:38 pts/1    00:00:00 /bin/sh -c ps -ef | grep svn\\nawx        24442   24440  0 06:38 pts/1    00:00:00 grep svn", "stdout_lines": ["awx        24440   24439  0 06:38 pts/1    00:00:00 /bin/sh -c ps -ef | grep svn", "awx        24442   24440  0 06:38 pts/1    00:00:00 grep svn"]}

TASK [svnserveデーモンプロセス情報確認] ****************************************************
skipping: [192.168.56.105] => (item=awx        24440   24439  0 06:38 pts/1    00:00:00 /bin/sh -c ps -ef | grep svn)  => {"ansible_loop_var": "item", "changed": false, "item": "awx        24440   24439  0 06:38 pts/1    00:00:00 /bin/sh -c ps -ef | grep svn", "skip_reason": "Conditional result was False"}
skipping: [192.168.56.105] => (item=awx        24442   24440  0 06:38 pts/1    00:00:00 grep svn)  => {"ansible_loop_var": "item", "changed": false, "item": "awx        24442   24440  0 06:38 pts/1    00:00:00 grep svn", "skip_reason": "Conditional result was False"}

TASK [svnserveデーモン起動] **********************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "svnserve --daemon", "delta": "0:00:00.013123", "end": "2022-03-27 06:38:44.310196", "rc": 0, "start": "2022-03-27 06:38:44.297073", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

TASK [svnserveデーモン起動確認] ********************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "svn log svn://localhost/svn_repo/test_repo", "delta": "0:00:00.026138", "end": "2022-03-27 06:38:45.133391", "rc": 0, "start": "2022-03-27 06:38:45.107253", "stderr": "", "stderr_lines": [], "stdout": "------------------------------------------------------------------------\\nr3 | awx | 2022-03-27 06:38:38 -0400 (Sun, 27 Mar 2022) | 1 line\\n\\ncreate\\n------------------------------------------------------------------------\\nr2 | awx | 2022-03-27 06:38:36 -0400 (Sun, 27 Mar 2022) | 1 line\\n\\ncreate\\n------------------------------------------------------------------------\\nr1 | awx | 2022-03-27 06:38:34 -0400 (Sun, 27 Mar 2022) | 1 line\\n\\ncreate\\n------------------------------------------------------------------------", "stdout_lines": ["------------------------------------------------------------------------", "r3 | awx | 2022-03-27 06:38:38 -0400 (Sun, 27 Mar 2022) | 1 line", "", "create", "------------------------------------------------------------------------", "r2 | awx | 2022-03-27 06:38:36 -0400 (Sun, 27 Mar 2022) | 1 line", "", "create", "------------------------------------------------------------------------", "r1 | awx | 2022-03-27 06:38:34 -0400 (Sun, 27 Mar 2022) | 1 line", "", "create", "------------------------------------------------------------------------"]}

PLAY RECAP *********************************************************************
192.168.56.105             : ok=20   changed=15   unreachable=0    failed=0    skipped=1    rescued=0    ignored=0

実行結果②:「①」を実行した直後に同じ条件で再度実行

「①」で、SVNのインストールやリポジトリが作成されているため、タスクは「ok」となり、処理は行われません。なので、実質「①」が完了した状態と同じ状態になります。このような挙動を「冪等性(べきとうせい)」と言います。ansibleの売り文句の一つなので、興味がある方は調べてみて下さい。

Using /etc/ansible/ansible.cfg as config file
SSH password: 

PLAY [all] *********************************************************************

TASK [Subversionインストール] ********************************************************
ok: [192.168.56.105] => {"ansible_facts": {"pkg_mgr": "dnf"}, "changed": false, "msg": "Nothing to do", "rc": 0, "results": []}

TASK [リポジトリ格納ディレクトリ作成] *********************************************************
ok: [192.168.56.105] => {"changed": false, "gid": 1000, "group": "awx", "mode": "0775", "owner": "awx", "path": "/svn_repo", "size": 23, "state": "directory", "uid": 1000}

TASK [リポジトリ存在確認] ***************************************************************
ok: [192.168.56.105] => {"changed": false, "stat": {"atime": 1648377510.4451878, "attr_flags": "", "attributes": [], "block_size": 4096, "blocks": 0, "charset": "binary", "ctime": 1648377510.4741876, "dev": 64768, "device_type": 0, "executable": true, "exists": true, "gid": 1000, "gr_name": "awx", "inode": 18117111, "isblk": false, "ischr": false, "isdir": true, "isfifo": false, "isgid": false, "islnk": false, "isreg": false, "issock": false, "isuid": false, "mimetype": "inode/directory", "mode": "0775", "mtime": 1648377510.4741876, "nlink": 6, "path": "/svn_repo/test_repo", "pw_name": "awx", "readable": true, "rgrp": true, "roth": true, "rusr": true, "size": 86, "uid": 1000, "version": "3345422135", "wgrp": true, "woth": false, "writeable": true, "wusr": true, "xgrp": true, "xoth": true, "xusr": true}}

TASK [リポジトリ作成] *****************************************************************
skipping: [192.168.56.105] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [作業ディレクトリ削除] **************************************************************
ok: [192.168.56.105] => {"changed": false, "path": "/tmp/test_repo", "state": "absent"}

TASK [チェックアウト] *****************************************************************
changed: [192.168.56.105] => {"after": ["Revision: 3", "URL: file:///svn_repo/test_repo"], "before": null, "changed": true}

TASK [trunkディレクトリ存在確認] *********************************************************
ok: [192.168.56.105] => {"changed": false, "stat": {"atime": 1648378146.2646856, "attr_flags": "", "attributes": [], "block_size": 4096, "blocks": 0, "charset": "binary", "ctime": 1648378146.2646856, "dev": 64768, "device_type": 0, "executable": true, "exists": true, "gid": 1000, "gr_name": "awx", "inode": 243343, "isblk": false, "ischr": false, "isdir": true, "isfifo": false, "isgid": false, "islnk": false, "isreg": false, "issock": false, "isuid": false, "mimetype": "inode/directory", "mode": "0775", "mtime": 1648378146.2646856, "nlink": 2, "path": "/tmp/test_repo/trunk", "pw_name": "awx", "readable": true, "rgrp": true, "roth": true, "rusr": true, "size": 6, "uid": 1000, "version": "371468635", "wgrp": true, "woth": false, "writeable": true, "wusr": true, "xgrp": true, "xoth": true, "xusr": true}}

TASK [trunkディレクトリ作成] ***********************************************************
skipping: [192.168.56.105] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [チェックアウト] *****************************************************************
ok: [192.168.56.105] => {"after": ["Revision: 3", "URL: file:///svn_repo/test_repo"], "before": ["Revision: 3", "URL: file:///svn_repo/test_repo"], "changed": false}

TASK [branchesディレクトリ存在確認] ******************************************************
ok: [192.168.56.105] => {"changed": false, "stat": {"atime": 1648378148.3346775, "attr_flags": "", "attributes": [], "block_size": 4096, "blocks": 0, "charset": "binary", "ctime": 1648378146.2626858, "dev": 64768, "device_type": 0, "executable": true, "exists": true, "gid": 1000, "gr_name": "awx", "inode": 17378970, "isblk": false, "ischr": false, "isdir": true, "isfifo": false, "isgid": false, "islnk": false, "isreg": false, "issock": false, "isuid": false, "mimetype": "inode/directory", "mode": "0775", "mtime": 1648378146.2626858, "nlink": 2, "path": "/tmp/test_repo/branches", "pw_name": "awx", "readable": true, "rgrp": true, "roth": true, "rusr": true, "size": 6, "uid": 1000, "version": "2274607178", "wgrp": true, "woth": false, "writeable": true, "wusr": true, "xgrp": true, "xoth": true, "xusr": true}}

TASK [branchesディレクトリ作成] ********************************************************
skipping: [192.168.56.105] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [チェックアウト] *****************************************************************
ok: [192.168.56.105] => {"after": ["Revision: 3", "URL: file:///svn_repo/test_repo"], "before": ["Revision: 3", "URL: file:///svn_repo/test_repo"], "changed": false}

TASK [tagsディレクトリ存在確認] **********************************************************
ok: [192.168.56.105] => {"changed": false, "stat": {"atime": 1648378148.3346775, "attr_flags": "", "attributes": [], "block_size": 4096, "blocks": 0, "charset": "binary", "ctime": 1648378146.2636857, "dev": 64768, "device_type": 0, "executable": true, "exists": true, "gid": 1000, "gr_name": "awx", "inode": 25808957, "isblk": false, "ischr": false, "isdir": true, "isfifo": false, "isgid": false, "islnk": false, "isreg": false, "issock": false, "isuid": false, "mimetype": "inode/directory", "mode": "0775", "mtime": 1648378146.2636857, "nlink": 2, "path": "/tmp/test_repo/tags", "pw_name": "awx", "readable": true, "rgrp": true, "roth": true, "rusr": true, "size": 6, "uid": 1000, "version": "2602839948", "wgrp": true, "woth": false, "writeable": true, "wusr": true, "xgrp": true, "xoth": true, "xusr": true}}

TASK [tagsディレクトリ作成] ************************************************************
skipping: [192.168.56.105] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [作業ディレクトリ削除] **************************************************************
changed: [192.168.56.105] => {"changed": true, "path": "/tmp/test_repo", "state": "absent"}

TASK [svnserve.conf設定変更] *******************************************************
ok: [192.168.56.105] => (item={'regexp': '# anon-access = read', 'line': 'anon-access = read'}) => {"ansible_loop_var": "item", "backup": "", "changed": false, "item": {"line": "anon-access = read", "regexp": "# anon-access = read"}, "msg": ""}
ok: [192.168.56.105] => (item={'regexp': '# auth-access = write', 'line': 'auth-access = write'}) => {"ansible_loop_var": "item", "backup": "", "changed": false, "item": {"line": "auth-access = write", "regexp": "# auth-access = write"}, "msg": ""}
ok: [192.168.56.105] => (item={'regexp': '# password-db = passwd', 'line': 'password-db = passwd'}) => {"ansible_loop_var": "item", "backup": "", "changed": false, "item": {"line": "password-db = passwd", "regexp": "# password-db = passwd"}, "msg": ""}

TASK [passwd設定変更] **************************************************************
ok: [192.168.56.105] => {"changed": false, "msg": ""}

TASK [svnserveデーモンプロセス情報取得] ****************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "ps -ef | grep svn", "delta": "0:00:00.012209", "end": "2022-03-27 06:49:16.274583", "rc": 0, "start": "2022-03-27 06:49:16.262374", "stderr": "", "stderr_lines": [], "stdout": "awx        24536       1  0 06:38 ?        00:00:00 svnserve --daemon\\nawx        26217   26216  0 06:49 pts/1    00:00:00 /bin/sh -c ps -ef | grep svn\\nawx        26219   26217  0 06:49 pts/1    00:00:00 grep svn", "stdout_lines": ["awx        24536       1  0 06:38 ?        00:00:00 svnserve --daemon", "awx        26217   26216  0 06:49 pts/1    00:00:00 /bin/sh -c ps -ef | grep svn", "awx        26219   26217  0 06:49 pts/1    00:00:00 grep svn"]}

TASK [svnserveデーモンプロセス情報確認] ****************************************************
ok: [192.168.56.105] => (item=awx        24536       1  0 06:38 ?        00:00:00 svnserve --daemon) => {"ansible_facts": {"svnserve_daemon_flg": true}, "ansible_loop_var": "item", "changed": false, "item": "awx        24536       1  0 06:38 ?        00:00:00 svnserve --daemon"}
skipping: [192.168.56.105] => (item=awx        26217   26216  0 06:49 pts/1    00:00:00 /bin/sh -c ps -ef | grep svn)  => {"ansible_loop_var": "item", "changed": false, "item": "awx        26217   26216  0 06:49 pts/1    00:00:00 /bin/sh -c ps -ef | grep svn", "skip_reason": "Conditional result was False"}
skipping: [192.168.56.105] => (item=awx        26219   26217  0 06:49 pts/1    00:00:00 grep svn)  => {"ansible_loop_var": "item", "changed": false, "item": "awx        26219   26217  0 06:49 pts/1    00:00:00 grep svn", "skip_reason": "Conditional result was False"}

TASK [svnserveデーモン起動] **********************************************************
skipping: [192.168.56.105] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [svnserveデーモン起動確認] ********************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "svn log svn://localhost/svn_repo/test_repo", "delta": "0:00:00.041270", "end": "2022-03-27 06:49:17.923860", "rc": 0, "start": "2022-03-27 06:49:17.882590", "stderr": "", "stderr_lines": [], "stdout": "------------------------------------------------------------------------\\nr3 | awx | 2022-03-27 06:38:38 -0400 (Sun, 27 Mar 2022) | 1 line\\n\\ncreate\\n------------------------------------------------------------------------\\nr2 | awx | 2022-03-27 06:38:36 -0400 (Sun, 27 Mar 2022) | 1 line\\n\\ncreate\\n------------------------------------------------------------------------\\nr1 | awx | 2022-03-27 06:38:34 -0400 (Sun, 27 Mar 2022) | 1 line\\n\\ncreate\\n------------------------------------------------------------------------", "stdout_lines": ["------------------------------------------------------------------------", "r3 | awx | 2022-03-27 06:38:38 -0400 (Sun, 27 Mar 2022) | 1 line", "", "create", "------------------------------------------------------------------------", "r2 | awx | 2022-03-27 06:38:36 -0400 (Sun, 27 Mar 2022) | 1 line", "", "create", "------------------------------------------------------------------------", "r1 | awx | 2022-03-27 06:38:34 -0400 (Sun, 27 Mar 2022) | 1 line", "", "create", "------------------------------------------------------------------------"]}

PLAY RECAP *********************************************************************
192.168.56.105             : ok=16   changed=4    unreachable=0    failed=0    skipped=5    rescued=0    ignored=0

リポジトリへの接続確認

Ansibleで作成したSVNリポジトリが正しく作成されているかを確認するため、TortoiseSVNから接続してみます。

TortoiseSVNのインストール方法、リポジトリへの接続方法は下記をご覧ください。

リポジトリに接続して、branches、tags、trunkディレクトリをチェックアウトしてみます。

チェックアウトが正常に終了したので、SVNのインストールと初期構築も問題なく完了したようですね。

記事は以上になります。
Ansibleを活用することで、Subversionのインストールから初期構築まで簡単に行うことが出来ました。プレイブックを作成するまでは一苦労ですが、一度作成してしまえば、誰でも実行し、SVNリポジトリを作成出来ますよね。本記事を参考に作業の効率化を図って、どんどん業務を楽にしていきましょう。

コメント

タイトルとURLをコピーしました