# Initialise SDP # ------------------------------------------------------------------ - name: Install SDP hosts: all user: ec2-user vars: sdp_version: sdp.Unix.2018.1.23583.p1.tgz p4d_version: 18.1 tasks: - name: Include passwords include_vars: file: passwords.yaml name: passwords # Ensure passwords are properly set - fail: msg="Password '{{ item }}' is not defined" when: item not in passwords with_items: - sdp_admin_password - sdp_service_password - name: install mailx for SDP to send mail package: name: mailx state: present become: yes - name: Create Perforce User account user: name: perforce shell: /bin/bash home: /p4 become: yes - name: Allow perforce user to have passwordless sudo lineinfile: dest: /etc/sudoers state: present regexp: '^%perforce' line: '%perforce ALL=(ALL) NOPASSWD: ALL' validate: visudo -cf %s become: yes - name: Make sure .ssh exists file: path: /p4/.ssh state: directory mode: 0700 become: true become_user: perforce # Copy ssh keys and authorize so user perforce can ssh between boxes - name: Copy ssh private key copy: src: private/id_rsa dest: /p4/.ssh/ mode: 0600 become: true become_user: perforce - name: Set authorized key for perforce authorized_key: user: perforce state: present key: "{{ lookup('file', 'private/id_rsa.pub') }}" become: true become_user: perforce - name: download sdp-release get_url: url: https://swarm.workshop.perforce.com/projects/perforce-software-sdp/download/downloads/{{sdp_version}} dest: /hxdepots/ mode: 0644 become: yes - name: Extract sdp.tgz unarchive: src: /hxdepots/{{sdp_version}} dest: /hxdepots/ remote_src: yes become: yes - name: Set ownership to perforce user file: path: /hxdepots/sdp owner: "perforce" recurse: true become: yes - name: download p4 p4d get_url: url: http://ftp.perforce.com/perforce/r{{p4d_version}}/bin.linux26x86_64/{{item}} dest: /hxdepots/sdp/Server/Unix/p4/common/bin/ mode: 0755 with_items: - p4 - p4d - p4broker become: yes - name: copy SDP config file copy: src: mkdirs.1.cfg dest: /hxdepots/sdp/Server/Unix/setup become: yes # ------------------------------------------------------------------ - name: Install SDP replica hosts: replica user: ec2-user tasks: - name: Include hosts include_vars: file: hosts.yaml name: hosts - name: Update variables in config file lineinfile: dest: /hxdepots/sdp/Server/Unix/setup/mkdirs.1.cfg regexp: "{{item.regexp}}" line: "{{item.line}}" with_items: - {regexp: '^P4DNSNAME=', line: 'P4DNSNAME={{hosts.master}}'} - {regexp: '^P4ADMINPASS=', line: 'P4ADMINPASS={{passwords.sdp_admin_password}}'} - {regexp: '^P4SERVICEPASS=', line: 'P4SERVICEPASS={{passwords.sdp_service_password}}'} - {regexp: '^SERVER_TYPE=', line: 'SERVER_TYPE=sdp_replica'} become: yes become_user: perforce - name: Execute replica mkdirs (as root) shell: cd /hxdepots/sdp/Server/Unix/setup && ./mkdirs.sh 1 become: yes - name: Link server init script so it starts automatically file: src: /p4/1/bin/p4d_1_init dest: /etc/init.d/p4d_1_init state: link become: yes - name: install p4 globally file: src: /p4/common/bin/p4 dest: /usr/local/bin/p4 state: link mode: 0755 become: yes # ------------------------------------------------------------------ - name: Install SDP master hosts: master user: ec2-user vars: p4: "P4TICKETS=/p4/1/.p4tickets /usr/local/bin/p4 -p 1666 -u perforce" replica_id: replica tasks: - name: Include hosts include_vars: file: hosts.yaml name: hosts - name: Record hostname shell: hostname register: hostname - name: Update variables in config file lineinfile: dest: /hxdepots/sdp/Server/Unix/setup/mkdirs.1.cfg regexp: "{{item.regexp}}" line: "{{item.line}}" with_items: - {regexp: '^P4DNSNAME=', line: 'P4DNSNAME={{hostname.stdout_lines[0]}}'} - {regexp: '^P4ADMINPASS=', line: 'P4ADMINPASS={{passwords.sdp_admin_password}}'} - {regexp: '^P4SERVICEPASS=', line: 'P4SERVICEPASS={{passwords.sdp_service_password}}'} become: yes become_user: perforce - name: Execute master mkdirs (as root) shell: cd /hxdepots/sdp/Server/Unix/setup && ./mkdirs.sh 1 become: yes - name: Link server init script so it starts automatically file: src: /p4/1/bin/p4d_1_init dest: /etc/init.d/p4d_1_init state: link become: yes - name: install p4 globally file: src: /p4/common/bin/p4 dest: /usr/local/bin/p4 state: link mode: 0755 become: yes - name: Fix default mail client on AWS Linux lineinfile: dest: /p4/common/bin/p4_vars regexp: '^export SDPMAIL=mail$' line: 'export SDPMAIL=mailx' become: yes become_user: perforce - name: Copy script to create perforce user/password copy: src: create_user.sh dest: /tmp mode: 0755 become: yes - name: Create db files shell: /p4/1/bin/p4d_1 -r /p4/1/root -cshow become: yes become_user: perforce - name: Start Perforce server shell: /p4/1/bin/p4d_1_init start become: yes become_user: perforce - name: Check info shell: /usr/local/bin/p4 -p 1666 info become: yes become_user: perforce - name: Create user and password for admin user shell: /tmp/create_user.sh 1 perforce {{passwords.sdp_admin_password}} become: yes become_user: perforce - name: Login shell: /p4/common/bin/p4login 1 become: yes become_user: perforce - name: Create user and password for replica user shell: /tmp/create_user.sh 1 svc_replica {{passwords.sdp_service_password}} service become: yes become_user: perforce - name: Setup server shell: /hxdepots/sdp/Server/setup/configure_new_server.sh 1 become: yes become_user: perforce - name: Create ServiceUsers group shell: '{{p4}} --field Users+=svc_{{replica_id}} --field PasswordTimeout=unlimited --field Timeout=unlimited group -o ServiceUsers | {{p4}} group -i' become: yes become_user: perforce - name: Give ServiceUsers super access shell: '{{p4}} --field "Protections+=super group ServiceUsers * //..." protect -o | {{p4}} protect -i' become: yes become_user: perforce - name: Comment out p4review lineinfile: dest: /p4/p4.crontab regexp: '^([^#].* /p4/common/bin/p4review.py .*)' line: '# \1' backrefs: yes state: present become: yes become_user: perforce - name: Setup crontab shell: cd /p4 && crontab p4.crontab become: yes become_user: perforce - name: Run live_checkpoint to seed offline_db shell: /p4/common/bin/live_checkpoint.sh 1 become: yes become_user: perforce - name: Run daily_checkpoint too shell: /p4/common/bin/daily_checkpoint.sh 1 become: yes become_user: perforce