Add working provisioning and configuration for MS SQL data warehouse
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
---
|
||||
mssql_instance_name: MSSQLSERVER
|
||||
mssql_features: SQLENGINE,AS,IS,CONN
|
||||
mssql_collation: SQL_Latin1_General_CP1_CI_AS
|
||||
mssql_iso_drive: "E:\\"
|
||||
|
||||
mssql_security_mode: SQL
|
||||
mssql_sa_password: ""
|
||||
mssql_sysadmin_accounts:
|
||||
- "CWX\\srvadmin-dandric"
|
||||
- "{{ inventory_hostname_short }}\\Administrator"
|
||||
|
||||
mssql_sql_svc_account: "NT AUTHORITY\\NETWORK SERVICE"
|
||||
mssql_sql_svc_password: ""
|
||||
mssql_agt_svc_account: "NT AUTHORITY\\NETWORK SERVICE"
|
||||
mssql_agt_svc_password: ""
|
||||
mssql_as_svc_account: "NT AUTHORITY\\NETWORK SERVICE"
|
||||
mssql_is_svc_account: "NT AUTHORITY\\NETWORK SERVICE"
|
||||
|
||||
mssql_as_server_mode: "TABULAR"
|
||||
|
||||
mssql_data_dir: 'F:\Data'
|
||||
mssql_log_dir: 'G:\Log'
|
||||
mssql_backup_dir: 'I:\Backup'
|
||||
mssql_tempdb_dir: 'H:\TempDB\Data'
|
||||
mssql_tempdb_log_dir: 'H:\TempDB\Log'
|
||||
|
||||
mssql_max_memory_mb: 12288
|
||||
mssql_min_memory_mb: 4096
|
||||
|
||||
mssql_tcp_enabled: 1
|
||||
mssql_tcp_port: 1433
|
||||
132
configuration/ansible_mssql/roles/mssql_install/tasks/main.yml
Normal file
132
configuration/ansible_mssql/roles/mssql_install/tasks/main.yml
Normal file
@@ -0,0 +1,132 @@
|
||||
---
|
||||
- name: Create SQL Server data directories
|
||||
ansible.windows.win_file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
loop:
|
||||
- "{{ mssql_data_dir }}"
|
||||
- "{{ mssql_log_dir }}"
|
||||
- "{{ mssql_backup_dir }}"
|
||||
- "{{ mssql_tempdb_dir }}"
|
||||
- "{{ mssql_tempdb_log_dir }}"
|
||||
|
||||
- name: Install SQL Server 2022
|
||||
block:
|
||||
- name: Run SQL Server 2022 setup
|
||||
ansible.windows.win_powershell:
|
||||
script: |
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$sapwd = '{{ mssql_sa_password | replace("'", "''") }}'
|
||||
|
||||
$proc = Start-Process `
|
||||
-FilePath '{{ mssql_iso_drive }}\setup.exe' `
|
||||
-ArgumentList @(
|
||||
'/Action=Install',
|
||||
'/QUIET',
|
||||
'/IACCEPTSQLSERVERLICENSETERMS',
|
||||
'/FEATURES={{ mssql_features }}',
|
||||
'/INSTANCENAME={{ mssql_instance_name }}',
|
||||
'/SQLCOLLATION={{ mssql_collation }}',
|
||||
'/SECURITYMODE={{ mssql_security_mode }}',
|
||||
"/SAPWD=$sapwd",
|
||||
'/SQLSYSADMINACCOUNTS="{{ mssql_sysadmin_accounts | join('" "') }}"',
|
||||
'/SQLSVCACCOUNT="{{ mssql_sql_svc_account }}"',
|
||||
'/AGTSVCACCOUNT="{{ mssql_agt_svc_account }}"',
|
||||
'/AGTSVCSTARTUPTYPE=Automatic',
|
||||
'/BROWSERSVCSTARTUPTYPE=Automatic',
|
||||
'/TCPENABLED={{ mssql_tcp_enabled }}',
|
||||
'/SQLUSERDBDIR="{{ mssql_data_dir }}"',
|
||||
'/SQLUSERDBLOGDIR="{{ mssql_log_dir }}"',
|
||||
'/SQLBACKUPDIR="{{ mssql_backup_dir }}"',
|
||||
'/SQLTEMPDBDIR="{{ mssql_tempdb_dir }}"',
|
||||
'/SQLTEMPDBLOGDIR="{{ mssql_tempdb_log_dir }}"',
|
||||
'/ASSVCACCOUNT="{{ mssql_as_svc_account }}"',
|
||||
'/ASSERVERMODE={{ mssql_as_server_mode }}',
|
||||
'/ASSYSADMINACCOUNTS="{{ mssql_sysadmin_accounts | join('" "') }}"',
|
||||
'/ISSVCACCOUNT="{{ mssql_is_svc_account }}"',
|
||||
'/UPDATEENABLED=False'
|
||||
) `
|
||||
-Wait -PassThru
|
||||
|
||||
if ($proc.ExitCode -notin @(0, 3010)) {
|
||||
throw "SQL Server setup failed with exit code: $($proc.ExitCode)"
|
||||
}
|
||||
|
||||
$Ansible.Result = $proc.ExitCode
|
||||
register: mssql_install_result
|
||||
timeout: 3600
|
||||
|
||||
- name: Report install exit code
|
||||
ansible.builtin.debug:
|
||||
msg: "SQL Server installed (exit code {{ mssql_install_result.result }}{% if mssql_install_result.result == 3010 %} — reboot required{% endif %})"
|
||||
|
||||
rescue:
|
||||
- name: Display setup summary log
|
||||
ansible.windows.win_powershell:
|
||||
script: |
|
||||
$log = Get-ChildItem 'C:\Program Files\Microsoft SQL Server' -Filter 'Summary*.txt' `
|
||||
-Recurse -ErrorAction SilentlyContinue |
|
||||
Sort-Object LastWriteTime | Select-Object -Last 1
|
||||
if ($log) {
|
||||
Write-Output "=== $($log.FullName) ==="
|
||||
Get-Content $log.FullName | Select-Object -Last 100
|
||||
} else {
|
||||
Write-Output "No summary log found."
|
||||
}
|
||||
register: setup_log_content
|
||||
|
||||
- name: Show log
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ setup_log_content.output }}"
|
||||
|
||||
- name: Fail
|
||||
ansible.builtin.fail:
|
||||
msg: "SQL Server installation failed — see log output above."
|
||||
|
||||
- name: Ensure SQL Server service is started
|
||||
ansible.windows.win_service:
|
||||
name: "{{ 'MSSQLSERVER' if mssql_instance_name == 'MSSQLSERVER' else 'MSSQL$' + mssql_instance_name }}"
|
||||
state: started
|
||||
start_mode: auto
|
||||
|
||||
- name: Ensure SQL Server Agent is started
|
||||
ansible.windows.win_service:
|
||||
name: "{{ 'SQLSERVERAGENT' if mssql_instance_name == 'MSSQLSERVER' else 'SQLAgent$' + mssql_instance_name }}"
|
||||
state: started
|
||||
start_mode: auto
|
||||
|
||||
- name: Open SQL Server firewall port
|
||||
community.windows.win_firewall_rule:
|
||||
name: "SQL Server ({{ mssql_instance_name }}) TCP {{ mssql_tcp_port }}"
|
||||
localport: "{{ mssql_tcp_port }}"
|
||||
action: allow
|
||||
direction: in
|
||||
protocol: tcp
|
||||
state: present
|
||||
enabled: true
|
||||
|
||||
- name: Configure SQL Server memory limits
|
||||
ansible.windows.win_powershell:
|
||||
script: |
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$sqlcmd = Get-ChildItem 'C:\Program Files\Microsoft SQL Server' -Filter 'sqlcmd.exe' `
|
||||
-Recurse -ErrorAction SilentlyContinue |
|
||||
Where-Object { $_.FullName -notlike '*\x86\*' } |
|
||||
Sort-Object LastWriteTime -Descending |
|
||||
Select-Object -First 1 -ExpandProperty FullName
|
||||
if (-not $sqlcmd) { throw 'sqlcmd.exe not found under C:\Program Files\Microsoft SQL Server' }
|
||||
|
||||
$instance = if ('{{ mssql_instance_name }}' -eq 'MSSQLSERVER') { '.' } `
|
||||
else { '.\{{ mssql_instance_name }}' }
|
||||
|
||||
$queries = @(
|
||||
"EXEC sp_configure 'show advanced options', 1; RECONFIGURE;",
|
||||
"EXEC sp_configure 'max server memory (MB)', {{ mssql_max_memory_mb }}; RECONFIGURE;",
|
||||
"EXEC sp_configure 'min server memory (MB)', {{ mssql_min_memory_mb }}; RECONFIGURE;"
|
||||
)
|
||||
foreach ($q in $queries) {
|
||||
& $sqlcmd -S $instance -E -Q $q | Out-Null
|
||||
}
|
||||
$Ansible.Result = "max={{ mssql_max_memory_mb }} MB, min={{ mssql_min_memory_mb }} MB"
|
||||
Reference in New Issue
Block a user