Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ansible/configure_tasks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
- name: hub init
ansible.builtin.include_tasks: hub_init.yaml
when: "'hub' in group_names"
- name: Keycloak init
ansible.builtin.include_tasks: keycloak_init_tasks.yaml
when: "'hub' in group_names"
- name: Handle certificates
ansible.builtin.include_tasks: certs.yaml
when: "ca_certs != 'internal'"
Expand Down
8 changes: 7 additions & 1 deletion ansible/hub_api_tasks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,13 @@
headers:
Content-Type: "application/json-patch+json"
body: |-
[{ "op": "add", "path": "/unixHomeDirectory", "value":"{{ admin.linux_home_dir }}"}, { "op": "add", "path":"/unixUserName", "value":"{{ admin.linux_username }}" }]
[
{ "op": "add", "path": "/firstName", "value": "Hub" },
{ "op": "add", "path": "/lastName", "value": "Administrator" },
{ "op": "add", "path": "/displayName", "value": "Hub Administrator" },
{ "op": "add", "path": "/unixHomeDirectory", "value": "{{ admin.linux_home_dir }}" },
{ "op": "add", "path": "/unixUserName", "value": "{{ admin.linux_username }}" }
]
when: "(hub_res.json['unixUserName'] is not defined)"

- name: Get hub excecution profile id
Expand Down
3 changes: 0 additions & 3 deletions ansible/hub_run.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
- name: Enable TLS now
ansible.builtin.command: /usr/local/bin/hubctl internaltls server
when: ca_certs == "supplied" or ca_certs == "selfsigned"
- name: Run ldapsync
ansible.builtin.command: /usr/local/bin/hubctl ldapsync
when: ldap_enabled == "true"
- name: Enable hub
ansible.builtin.command: /usr/local/bin/hubctl service enable
- name: Start hub
Expand Down
48 changes: 48 additions & 0 deletions ansible/keycloak_init_tasks.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
- name: Read Keycloak HubSuperAdmin password
ansible.builtin.slurp:
src: /opt/altair/slchub/var/data/keycloak/admin.txt
register: kc_admin_pass_encoded
no_log: true

- name: Get Keycloak admin token
ansible.builtin.uri:
url: "{{ 'https' if ca_certs == 'internal' else 'http' }}://127.0.0.1:8216/realms/master/protocol/openid-connect/token"
method: POST
body_format: form-urlencoded
validate_certs: no
body:
grant_type: password
client_id: admin-cli
username: HubSuperAdmin
password: "{{ kc_admin_pass_encoded.content | b64decode | trim }}"
register: kc_token_res
no_log: true

- name: Find admin user in Keycloak
ansible.builtin.uri:
url: "{{ 'https' if ca_certs == 'internal' else 'http' }}://127.0.0.1:8216/admin/realms/slchub/users?username={{ admin.username | urlencode }}&exact=true"
headers:
Authorization: "Bearer {{ kc_token_res.json.access_token }}"
validate_certs: no
register: kc_user_res
no_log: true

- name: Assert admin user was found in Keycloak
ansible.builtin.assert:
that: kc_user_res.json[0].id is defined
fail_msg: "No Keycloak user found matching '{{ admin.username }}'"

- name: Set admin user password in Keycloak
ansible.builtin.uri:
url: "{{ 'https' if ca_certs == 'internal' else 'http' }}://127.0.0.1:8216/admin/realms/slchub/users/{{ kc_user_res.json[0].id }}/reset-password"
method: PUT
headers:
Authorization: "Bearer {{ kc_token_res.json.access_token }}"
validate_certs: no
body_format: json
body:
type: password
value: "{{ admin.password }}"
temporary: false
status_code: 204
no_log: true
1 change: 1 addition & 0 deletions ansible/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
- vars/ldap.yaml
- vars/common.yaml
- vars/license.yaml
- worker.config/slc_installs.yaml
vars:
bootstrap_params: "{{ '--nointernaltls' if ca_certs != 'internal' else ''}}"
tasks:
Expand Down
1 change: 1 addition & 0 deletions ansible/main_configure.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
- vars/ldap.yaml
- vars/common.yaml
- vars/license.yaml
- worker.config/slc_installs.yaml
vars:
bootstrap_params: "{{ '--nointernaltls' if ca_certs != 'internal' else ''}}"
tasks:
Expand Down
1 change: 1 addition & 0 deletions ansible/main_install.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
- vars/ldap.yaml
- vars/common.yaml
- vars/license.yaml
- worker.config/slc_installs.yaml
vars:
bootstrap_params: "{{ '--nointernaltls' if ca_certs != 'internal' else ''}}"
tasks:
Expand Down
6 changes: 6 additions & 0 deletions ansible/templates/adminpassword.yaml.j2
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
users:
- userName: {{admin.username}}
password: {{admin.password}}
firstName: Hub
lastName: Administrator
displayName: Hub Administrator
email: hubadmin@example.com
memberOf:
- HubAdministrators
8 changes: 4 additions & 4 deletions ansible/vars/common.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ admin:
# rpmsdirectory: Location on the target machines.
rpmsdirectory: /hubrpms

slc_rpm: "altairslc2025"
slc_rpm: "altairslc2026"
worker_rpm: "slchub-worker"
hub_rpm: "slchub"

slc_rpm_file: altairslc-5.25.2.0.1636_ga_maintenance-1.x86_64.rpm
worker_rpm_file: slchub_worker_2025.2.0_alpha808_808_1_x86_64.rpm
hub_rpm_file: slchub_2025.2.0_alpha808_808_1_x86_64.rpm
slc_rpm_file: altairslc-5.26.2.0.1117_ga_maintenance-1.x86_64.rpm
worker_rpm_file: slchub_worker_2026.2.0_alpha133_133_1_x86_64.rpm
hub_rpm_file: slchub_2026.2.0_alpha133_133_1_x86_64.rpm

slchub_dir: /opt/altair/slchub
slchub_user: slchub
Expand Down
2 changes: 1 addition & 1 deletion ansible/worker.config/slc_installs.yaml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
wps_installs:
default: /opt/altair/slc/2025
default: /opt/altair/slc/2026
10 changes: 5 additions & 5 deletions ansible/worker_init.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

- name: Generate SLC auth token (a1 auth)
ansible.builtin.shell: |-
/opt/altair/slc/2025/bin/almutil -a1auth -anyhost -code {{ license.auth_code }} \
{{ wps_installs.default }}/bin/almutil -a1auth -anyhost -code {{ license.auth_code }} \
| tail -n 1 | cut -d':' -f 2 | sed -e 's/^\s*//'
register: new_auth_result
failed_when: "'ERROR' in new_auth_result.stderr"
Expand All @@ -23,7 +23,7 @@
- name: Check for existing SLC install (For AltairOne Units)
ansible.builtin.shell: |-
hubctl slcinstall list | awk '{print $1}' | tail -n +3 \
| grep /opt/altair/slc/2025
| grep {{ wps_installs.default }}
ignore_errors: yes
register: a1_slc_install
environment:
Expand All @@ -34,7 +34,7 @@

- name: Copy SLC install information (For AltairOne Units)
ansible.builtin.command:
cmd: "hubctl slcinstall add /opt/altair/slc/2025"
cmd: "hubctl slcinstall add {{ wps_installs.default }}"
environment:
ALM_HHWU: "TRUE"
ALM_HHWU_TOKEN: "{{ auth_token }}"
Expand All @@ -44,7 +44,7 @@
- name: Check for existing SLC install (For ALM)
ansible.builtin.shell: |-
hubctl slcinstall list | awk '{print $1}' | tail -n +3 \
| grep /opt/altair/slc/2025
| grep {{ wps_installs.default }}
register: alm_slc_install
environment:
ALM_HHWU: "FALSE"
Expand All @@ -54,7 +54,7 @@

- name: Copy SLC install information (For ALM)
ansible.builtin.command:
cmd: "hubctl slcinstall add /opt/altair/slc/2025"
cmd: "hubctl slcinstall add {{ wps_installs.default }}"
environment:
ALM_HHWU: "FALSE"
ALTAIR_LICENSE_PATH: "{{ license.license_path }}"
Expand Down
9 changes: 9 additions & 0 deletions terraform/azure_azuredns/certificates.tf
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,15 @@ resource "acme_certificate" "hub" {
account_key_pem = acme_registration.reg.account_key_pem
certificate_p12_password = var.acme_cert_password

# Azure DNS refuses non-recursive (RD=0) queries from arbitrary IPs, which
# is what LEGO uses for its authoritative propagation check. Disabling the
# authoritative check and using a public recursive resolver instead routes
# the check through RD=1 queries that Azure accepts from known resolvers.
disable_complete_propagation = true
recursive_nameservers = ["8.8.8.8:53", "1.1.1.1:53"]

depends_on = [azurerm_dns_zone.zone]

dns_challenge {
provider = "azuredns"
config = {
Expand Down