Technical Articles
Automating your SAP HANA and S/4HANA by SAP deployments using Ansible – Part 4
The goal for this blog post series is to show how we can make SAP Solutions deployments easy and reliable using Ansible automation.
In the previous blog post, we explained what ‘Community Roles for SAP’ are and how we can use those to extend the supported ‘Red Hat Enterprise Linux System Roles for SAP’ capabilities.
In this blog post, we are going to explain how to use ‘Community Roles for SAP’ and ‘Red Hat Enterprise Linux System Roles for SAP’ together to achieve end-to-end automation for both SAP HANA and SAP S/4HANA.
All these Ansible Roles and how to use those has been explained on previous posts. Please check ‘part 2’ and ‘part 3’ of these blog posts to fully understand the following explanations.
We are going to explore two different options to deploy SAP HANA and SAP S/4HANA end-to-end. In the first one, we are going to use an RHEL server with Ansible Engine installed on it. In the second one, we are going to use Ansible Tower.
Ansible Engine use case
For this use case we are going to create the following on the RHEL hosts where we have installed Ansible Engine:
- An Ansible Inventory that will contain the target RHEL hosts information and all the required variables to be used with the roles.
- An Ansible Playbook that will use the previous inventory to get the target RHEL hosts to the desired state.
As we have mentioned several times, Ansible is quite flexible when it comes to inventories. This is a valid inventory for this use case, but you can adapt to your preferences:
❯ tree .
.
├── group_vars
│ └── sap_hosts.yml
├── host_vars
│ ├── hana01.yml
│ └── s4hana01.yml
├── hosts
❯ cat hosts
[hana]
hana01
[s4hana]
s4hana01
[sap_hosts:children]
hana
s4hana
❯ cat group_vars/sap_hosts.yml
## Variables required for `sap_hostagent` role
sap_hostagent_installation_type: "rpm"
sap_hostagent_rpm_remote_path: "/software/SAPHOSTAGENT"
sap_hostagent_rpm_file_name: "saphostagentrpm_44-20009394.rpm"
## Variables required for `sap_rhsm` role
sap_rhsm_username: "myrhsmuser"
sap_rhsm_password: "myrhsmpassword"
sap_rhsm_pools_ids:
- "myrhsmpool"
## Variables reqiured for `sap_preconfigure` role
sap_preconfigure_modify_etc_hosts: true
sap_domain: "automation.local
❯ cat host_vars/hana01.yml
## Variables required for 'storage' role
storage_pools:
- name: sap
disks:
- vdb
volumes:
- name: data
size: "200 GiB"
mount_point: "/hana/data"
state: present
- name: log
size: "100 GiB"
mount_point: "/hana/log"
state: present
- name: shared
size: "512 GiB"
mount_point: "/hana/shared"
state: present
- name: sap
size: "50 GiB"
mount_point: "/usr/sap"
state: present
## Variables required for 'sap_hana_deployment' role
sap_hana_deployment_bundle_path: /software/HANA_installation
sap_hana_deployment_bundle_sar_file_name: IMDB_SERVER20_046_0-80002031.SAR
sap_hana_deployment_sapcar_path: /software/SAPCAR
sap_hana_deployment_sapcar_file_name: SAPCAR_1311-80000935.EXE
sap_hana_deployment_root_password: "mysecretpassword"
sap_hana_deployment_sapadm_password: "mysecretpassword"
sap_hana_deployment_hana_sid: RH1
sap_hana_deployment_hana_instance_number: "00"
sap_hana_deployment_hana_env_type: development
sap_hana_deployment_hana_mem_restrict: "n"
sap_hana_deployment_common_master_password: "mysecretpassword"
sap_hana_deployment_sidadm_password: "mysecretpassword"
sap_hana_deployment_hana_db_system_password: "mysecretpassword"
sap_hana_deployment_ase_user_password: "mysecretpassword"
sap_hana_deployment_apply_license: false
❯ cat host_vars/s4hana01.yml
## Variables required for 'storage' role
storage_pools:
- name: sap
disks:
- vdb
volumes:
- name: sap
size: "50 GiB"
mount_point: "/usr/sap"
state: present
- name: sapmnt
size: "20 GiB"
mount_point: "/usr/sapmnt"
state: present
## Variables required for 'sap_s4hana_deployment' role
sap_s4hana_deployment_product_id: "NW_ABAP_OneHost:S4HANA1909.CORE.HDB.ABAP"
sap_s4hana_deployment_sapcar_path: "/software/SAPCAR"
sap_s4hana_deployment_sapcar_file_name: "SAPCAR_1311-80000935.EXE"
sap_s4hana_deployment_swpm_path: "/software/S4HANA_installation"
sap_s4hana_deployment_swpm_sar_file_name: "SWPM20SP04_6-80003424.SAR"
sap_s4hana_deployment_db_schema_password: "mysecretpassword"
sap_s4hana_deployment_db_schema_abap_password: "mysecretpassword"
sap_s4hana_deployment_master_password: "mysecretpassword"
sap_s4hana_deployment_hana_systemdb_password: "mysecretpassword"
sap_s4hana_deployment_sid: "RHE"
sap_s4hana_deployment_db_host: "hana01"
sap_s4hana_deployment_db_sid: "RHE"
sap_s4hana_deployment_hana_instance_nr: "00"
sap_s4hana_deployment_hana_system_password: "mysecretpassword"
sap_s4hana_deployment_parallel_jobs_nr: "30"
sap_s4hana_deployment_db_sidadm_password: "mysecretpassword"
sap_s4hana_deployment_igs_path: "/software/S4HANA_installation"
sap_s4hana_deployment_igs_file_name: "igsexe_9-80003187.sar"
sap_s4hana_deployment_igs_helper_path: "/software/S4HANA_installation"
sap_s4hana_deployment_igs_helper_file_name: "igshelper_17-10010245.sar"
sap_s4hana_deployment_kernel_dependent_path: "/software/S4HANA_installation"
sap_s4hana_deployment_kernel_dependent_file_name: "SAPEXEDB_201-80003385.SAR"
sap_s4hana_deployment_kernel_independent_path: "/software/S4HANA_installation"
sap_s4hana_deployment_kernel_independent_file_name: "SAPEXE_201-80003386.SAR"
sap_s4hana_deployment_software_path: "/software/S4HANA_installation"
sap_s4hana_deployment_sapadm_password: "mysecretpassword"
sap_s4hana_deployment_sap_sidadm_password: "mysecretpassword"
❯ cat group_vars/sap_hosts.yml
## Variables required for `sap_hostagent` role
sap_hostagent_installation_type: "rpm"
sap_hostagent_rpm_remote_path: "/software/SAPHOSTAGENT"
sap_hostagent_rpm_file_name: "saphostagentrpm_44-20009394.rpm"
## Variables required for `sap_rhsm` role
sap_rhsm_username: "myrhsmuser"
sap_rhsm_password: "myrhsmpassword"
sap_rhsm_pools_ids:
- "myrhsmpool"
## Variables reqiured for `sap_preconfigure` role
sap_preconfigure_modify_etc_hosts: true
sap_domain: "automation.local"
Once we have defined our inventory, we need to create the Ansible Playbook that will use the previous inventory. This playbook will consume multiple roles, hence we are going to pull those Ansible Roles in advance using a ‘requirements’ file:
❯ cat plays/requirements.yml
# From Ansible Galaxy 'Community Roles'
- name: redhat_sap.sap_rhsm
- name: redhat_sap.sap_hostagent
- name: redhat_sap.sap_hana_deployment
- name: redhat_sap.sap_s4hana_deployment
# From upstream 'RHEL System Roles'
- src: https://github.com/linux-system-roles/sap-preconfigure.git
- src: https://github.com/linux-system-roles/sap-hana-preconfigure.git
- src: https://github.com/linux-system-roles/sap-netweaver-preconfigure.git
- src: https://github.com/linux-system-roles/storage.git
❯ cat plays/sap-deploy.yml
---
- hosts: sap_hosts
roles:
- { role: redhat_sap.sap_rhsm }
- { role: storage }
- { role: redhat_sap.sap_hostagent }
- { role: sap-preconfigure }
- hosts: hana
roles:
- { role: sap-hana-preconfigure }
- { role: redhat_sap.sap_hana_deployment }
- hosts: s4hana
roles:
- { role: sap-netweaver-preconfigure }
- { role: redhat_sap.sap_s4hana_deployment }
Before using the playbook, let’s pull the roles with ‘ansible-galaxy’:
❯ ansible-galaxy install -r requirements.yml -p roles
- downloading role 'sap_rhsm', owned by redhat_sap
- downloading role from https://github.com/redhat-sap/sap-rhsm/archive/master.tar.gz
- extracting redhat_sap.sap_rhsm to /Users/mak/GIT/sap-blog-part-4/sap-automation/plays/roles/redhat_sap.sap_rhsm
- redhat_sap.sap_rhsm (master) was installed successfully
- downloading role 'sap_hostagent', owned by redhat_sap
- downloading role from https://github.com/redhat-sap/sap-hostagent/archive/master.tar.gz
- extracting redhat_sap.sap_hostagent to /Users/mak/GIT/sap-blog-part-4/sap-automation/plays/roles/redhat_sap.sap_hostagent
- redhat_sap.sap_hostagent (master) was installed successfully
- downloading role 'sap_hana_deployment', owned by redhat_sap
- downloading role from https://github.com/redhat-sap/sap-hana-deployment/archive/master.tar.gz
- extracting redhat_sap.sap_hana_deployment to /Users/mak/GIT/sap-blog-part-4/sap-automation/plays/roles/redhat_sap.sap_hana_deployment
- redhat_sap.sap_hana_deployment (master) was installed successfully
- downloading role 'sap_s4hana_deployment', owned by redhat_sap
- downloading role from https://github.com/redhat-sap/sap-s4hana-deployment/archive/master.tar.gz
- extracting redhat_sap.sap_s4hana_deployment to /Users/mak/GIT/sap-blog-part-4/sap-automation/plays/roles/redhat_sap.sap_s4hana_deployment
- redhat_sap.sap_s4hana_deployment (master) was installed successfully
- extracting sap-preconfigure to /Users/mak/GIT/sap-blog-part-4/sap-automation/plays/roles/sap-preconfigure
- sap-preconfigure was installed successfully
- extracting sap-hana-preconfigure to /Users/mak/GIT/sap-blog-part-4/sap-automation/plays/roles/sap-hana-preconfigure
- sap-hana-preconfigure was installed successfully
- extracting sap-netweaver-preconfigure to /Users/mak/GIT/sap-blog-part-4/sap-automation/plays/roles/sap-netweaver-preconfigure
- sap-netweaver-preconfigure was installed successfully
- extracting storage to /Users/mak/GIT/sap-blog-part-4/sap-automation/plays/roles/storage
- storage was installed successfully
❯ tree -L 1 roles
roles
├── redhat_sap.sap_hana_deployment
├── redhat_sap.sap_hostagent
├── redhat_sap.sap_rhsm
├── redhat_sap.sap_s4hana_deployment
├── sap-hana-preconfigure
├── sap-netweaver-preconfigure
├── sap-preconfigure
└── storage
We can now execute the playbook to automate the deployment of SAP HANA and SAP S/4HANA:
❯ ansible-playbook -i hosts plays/sap-deploy.yml
PLAY [sap_hosts] ****************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************************************************************************************
ok: [hana01]
ok: [s4hana01]
TASK [redhat_sap.sap_rhsm : Unregister the system if already registered - if this is a force re-registration] ********************************************************************************************************************************
changed: [hana01] => (item=subscription-manager clean)
changed: [s4hana01] => (item=subscription-manager clean)
changed: [hana01] => (item=subscription-manager remove --all)
changed: [s4hana01] => (item=subscription-manager remove --all)
changed: [hana01] => (item=yum remove -y "katello-ca-consumer-*")
changed: [s4hana01] => (item=yum remove -y "katello-ca-consumer-*")
TASK [redhat_sap.sap_rhsm : Install Satellite certificate (if applicable)] *******************************************************************************************************************************************************************
changed: [hana01]
changed: [s4hana01]
TASK [redhat_sap.sap_rhsm : Register system using Red Hat Subscription Manager] **************************************************************************************************************************************************************
skipping: [hana01]
skipping: [s4hana01]
…
…
…
Once the playbook has finished, both SAP HANA and SAP S/4HANA will be deployed, configured and running on the target RHEL hosts.
Ansible Tower use case
For this use case, we are going to use Ansible Tower to automate the end to end process. We still need inventories, playbooks and roles for Tower; the main difference with the previous use case is how these are presented by Tower and consumed by the Ansible Engine in the Tower host.
Ansible Tower is very flexible as well on how you can define your inventories and your playbooks. The best practice is to keep all your code and configuration in a source control management tool like GitHub.
This also applies to the inventory, where dynamic inventories are recommended, and these can be discovered via API calls to your preferred Cloud provider, or getting this information from the source control management tool.
For this use case, we are storing all the playbooks and role requirements information in GitHub and the inventory will be manually configured for simplicity.
Let’s start with the inventory, We are going to create an inventory called ‘sap-hosts’. Then we are adding some variables (the ones that are common to every host in the inventory) already in the first window. As you can see the variables are similar to the ones we have defined in the previous use case in the ‘group_vars’ directory. The only exception here is the variables with sensitive information for RHSM as we are adding those as Tower credentials, but you can add those there as well if required.
We are now creating 2 hosts inside this inventory, ‘hana’ and ‘s4hana’. The same way we added the variables for each host under ‘host_vars’ in the previous use case, we are adding the corresponding variables for each host.
Now that we have defined the inventory, we need to create the playbooks that will consume the roles as we did in the previous use case. As we mentioned before, we are storing all this information in GitHub. Tower Projects and Tower job Template is how this information is going to be consumed in Ansible Tower.
Ansible Tower projects is a logical collection of Ansible playbooks. Using Tower projects you can manage playbooks and playbook directories by either placing them manually under the Project Base Path on your Tower server or by placing your playbooks into a source code management (SCM) system supported by Tower. The last is the approach used here, where projects will pull the information from GitHub.
For this use case, all the projects are pointing to the same GitHub Repository. This is a multi-branch repository where each branch is keeping different playbooks using different Ansible Roles.
When configuring SCM based Tower projects, this information (git URL and branch) we have provided is used to pull the information from each branch.
Tower job templates are definitions and sets of parameters for running Ansible jobs. In other words, it will use playbooks from Tower projects explained in the previous step with hosts from selected inventories.
Let’s review the whole flow for one of the items to get a better understanding:
- sap-hostagent job template is using play.yml Playbook from sap-hostagent project which includes the redhat_sap.sap_hostagent Role as part of the Playbook.
- sap-hostagent project is using https://github.com/redhat-sap/sap-tower-projects.git repository specifically on the sap-hostagent branch.
- sap-hostagent branch from that repository contains the playbook play.yml previously mentioned and a roles directory containing a requirements.yml file.
- requirements.yml file contains the reference to redhat_sap.sap_hostagent Ansible Galaxy Role.
- Ansible Tower will automatically pull that Role during the job template execution, so this can be used by the play.yml Playbook.
Now we have defined all the required objects (inventories, projects and job templates), we are going to create a new object called workflows. Tower Workflow job templates link together a sequence of disparate resources that accomplishes the task of tracking the full set of jobs that were part of the release process as a single unit. It allows you to create pipeline-like strategies to automate your IT landscape.
As you can see from the picture above, we have created a Tower workflow that put all the pieces together with the following logic:
- Register the systems with the required repositories for SAP workloads.
- If previous step success, configure the required file systems and mount points for SAP HANA and SAP S/4HANA.
- If previous step success, install SAP Host Agent on both systems.
- If previous step success, run the required configuration following SAP Notes to support SAP workloads on both systems.
- If previous step success, run in parallel the requirements following SAP Notes both for SAP HANA and SAP S/4HANA on each host.
- If previous parallel steps succeed, deploy HANA in the ‘hana’ host.
- If previous step success, deploy S/4HANA in the ‘s4hana’ hosts.
We can now execute the Tower workflow, and the process will go through all the job templates we have put together on this pipeline.
Once the workflow has completed successfully, we can login into the ‘hana’ and ‘s4hana’ RHEL servers and check the results.
We will see SAP HANA configured and running in the ‘hana’ server:
hana:rheadm> HDB info
USER PID PPID %CPU VSZ RSS COMMAND
rheadm 140412 140411 0.0 234172 5104 -sh
rheadm 141604 140412 0.0 222712 3332 \_ /bin/sh /usr/sap/RHE/HDB00/HDB info
rheadm 141635 141604 0.0 266920 3932 \_ ps fx -U rheadm -o user:8,pid:8,ppid:8,pcpu:5,vsz:10,rss:10,args
rheadm 34937 1 0.0 4015240 47984 hdbrsutil --start --port 30003 --volume 3 --volumesuffix mnt00001/hdb00003.00003 --identifier 15840414
rheadm 28661 1 0.0 672908 15932 hdbrsutil --start --port 30001 --volume 1 --volumesuffix mnt00001/hdb00001 --identifier 1584039495
rheadm 28507 1 0.0 24964 1336 sapstart pf=/hana/shared/RHE/profile/RHE_HDB00_hana
rheadm 28515 28507 0.0 425712 33416 \_ /usr/sap/RHE/HDB00/hana/trace/hdb.sapRHE_HDB00 -d -nw -f /usr/sap/RHE/HDB00/hana/daemon.ini pf=/usr
rheadm 28533 28515 6.8 6692276 3433656 \_ hdbnameserver
rheadm 28869 28515 0.3 674884 93748 \_ hdbcompileserver
rheadm 28872 28515 4.5 724868 151048 \_ hdbpreprocessor
rheadm 29276 28515 0.3 1921836 201392 \_ hdbwebdispatcher
rheadm 33961 28515 51.6 49781808 46822336 \_ hdbindexserver -port 30003
rheadm 34037 28515 0.8 3203024 1155388 \_ hdbxsengine -port 30007
rheadm 34040 28515 0.8 4671316 2417044 \_ hdbdocstore -port 30040
rheadm 34043 28515 0.8 3107012 1157632 \_ hdbdpserver -port 30011
rheadm 35423 28515 0.3 1692816 328896 \_ hdbdiserver -port 30025
rheadm 28433 1 0.0 520996 23900 /usr/sap/RHE/HDB00/exe/sapstartsrv pf=/hana/shared/RHE/profile/RHE_HDB00_hana -D -u rheadm
And SAP S/4HANA configured and running in the ‘s4hana’ server:
$ ps auxwwf | grep rheadm | grep -v grep
rheadm 32386 0.0 0.2 893884 91780 ? Ssl Mar12 0:09 /usr/sap/RHE/ASCS01/exe/sapstartsrv pf=/usr/sap/RHE/SYS/profile/RHE_ASCS01_s4hana -D -u rheadm
rheadm 496 0.0 0.0 62624 3964 ? Ss Mar12 0:00 sapstart pf=/usr/sap/RHE/SYS/profile/RHE_ASCS01_s4hana
rheadm 509 0.0 0.0 100016 22248 ? Ssl Mar12 0:00 \_ ms.sapRHE_ASCS01 pf=/usr/sap/RHE/SYS/profile/RHE_ASCS01_s4hana
rheadm 510 0.0 2.2 2266592 749396 ? Ssl Mar12 0:09 \_ enq.sapRHE_ASCS01 pf=/usr/sap/RHE/SYS/profile/RHE_ASCS01_s4hana
rheadm 2143 0.0 0.1 903668 47508 ? Ssl Mar12 0:05 /usr/sap/RHE/D00/exe/sapstartsrv pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana -D -u rheadm
rheadm 6637 0.0 0.0 62768 4208 ? Ss Mar12 0:00 sapstart pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6652 0.0 0.5 32335464 178100 ? Ssl Mar12 0:10 \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6657 0.0 0.1 663840 34116 ? S Mar12 0:02 | \_ gwrd -dp pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6658 0.0 0.4 1833160 146000 ? Sl Mar12 0:02 | \_ icman -attach pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6659 0.0 4.9 32392208 1623068 ? S Mar12 0:22 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6660 0.0 1.6 32384420 551340 ? S Mar12 0:07 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6661 0.0 2.5 32401640 830196 ? S Mar12 0:27 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6662 0.0 2.2 32385604 746780 ? S Mar12 0:26 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6663 0.0 1.8 32385988 605064 ? S Mar12 0:13 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6664 0.0 1.8 32383096 619660 ? S Mar12 0:11 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6665 0.0 2.0 32383956 663848 ? S Mar12 0:13 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6666 0.0 1.8 32379024 593920 ? S Mar12 0:13 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6667 0.0 1.8 32385948 592028 ? S Mar12 0:18 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6668 0.0 2.0 32387128 674740 ? S Mar12 0:17 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6669 0.0 0.3 32354428 103696 ? S Mar12 0:02 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6670 0.0 1.3 32524396 435252 ? S Mar12 0:20 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6671 0.0 2.1 32501108 697152 ? S Mar12 0:20 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6672 0.0 1.1 32467288 376772 ? S Mar12 0:19 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6673 0.0 1.8 32444420 621832 ? S Mar12 0:12 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6674 0.0 1.5 32527136 504376 ? S Mar12 0:30 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6675 0.0 1.2 32532704 413528 ? S Mar12 0:20 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6676 0.0 0.3 32357480 125284 ? S Mar12 0:04 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6677 0.0 0.3 32354428 104068 ? S Mar12 0:02 | \_ dw.sapRHE_D00 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6653 0.0 0.0 63720 9416 ? Ss Mar12 0:00 \_ ig.sapRHE_D00 -mode=profile pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6654 0.0 0.0 1288252 28256 ? Sl Mar12 0:10 \_ /usr/sap/RHE/D00/exe/igsmux_mt -mode=profile -restartcount=0 -wdpid=6653 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6655 0.0 0.2 1150676 80808 ? Sl Mar12 0:06 \_ /usr/sap/RHE/D00/exe/igspw_mt -mode=profile -no=0 -restartcount=0 -wdpid=6653 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
rheadm 6656 0.0 0.2 1150680 81356 ? Sl Mar12 0:06 \_ /usr/sap/RHE/D00/exe/igspw_mt -mode=profile -no=1 -restartcount=0 -wdpid=6653 pf=/usr/sap/RHE/SYS/profile/RHE_D00_s4hana
We have deployed the whole stack from ‘just one click’. Ansible Tower has a powerful REST API that can be integrated with 3rd party tools or custom services. As an example, you could write some integrations from your IT ticketing system (if you are using any) so any user in your Company would be able to request an environment like the one we have seen just opening a ticket. With the appropriate API call, Ansible Tower could automatically go through all this process and report back to the user with the details once deployed.
Conclusion
As already mentioned in the previous post, ‘Everything as Code’ is a very powerful engineering practice while adopting DevOps in your organization. We have seen a real example end-to-end here for this practice and how to implement it in your organization.
Using automation products like Ansible Tower, we can leverage a lot of work that is actually done by the operations team to processes that are executed automatically in the background, moving from a user request that could take days to self-service models that are completed without user intervention.
This will allow the operations team to less focus on repetitive tasks and allow these teams to focus on the reliability of your IT landscape and tasks that add much more value to the whole company.
Blog Post Series references
If you missed any previous posts from this series, check the following links:
Hello Marcos,
This is great stuff and thank you putting this together! I was wondering if there is something already out there or in progress for sap patching, upgrade or diagnostic agent installation etc.?