# 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