Here i am providing the ansible code for Jboss installation automation . We have ansible tower server called unixchips-jbossserver and the client ( where the jboss needs to be installed ) unixchips-jbossclient. We are installing Jboss-EAP 7.3 using the ansible .
1. First copy the "jboss-eap-7.3.0.zip to the unixchips-jbossclient machine
-rw-r--r-- 1 root root 206430757 Nov 24 20:21 jboss-eap-7.3.0.zip
2. Let's create a role for jboss installation called jboss-standalone .
[unixchips@unixchips-jbossserver jboss-standalone]$ pwd
/etc/ansible/roles/jboss-standalone
3. We need java to be installed in the server as a prerequisite before the jboss installation. So let's create a yamal file to install the java (openjdk) if it is not installed already
**************************************************************************
[unixchips@unixchips-jbossserver tasks]$ cat javanew.yml
- name: Check if java is installed
command: java -version
become: true
register: java_result
ignore_errors: True
- debug:
msg: "Failed - Java is not installed"
when: java_result is failed
- name:
yum:
name: java-1.8.0-openjdk.x86_64
state: present
- debug:
msg: "Success - Java is installed"
when: java_result is success
**********************************************************************
4. Next we have to create the playbook.yml as below which we will call directly for the installation
**********************************************************************
- name: main playbook
hosts: all
remote_user: unixchips
become: yes
vars_prompt:
- name: instancename
prompt: "please enter the instancename"
private: no
- name: admin_username
prompt: "please enter the jboss admin name"
private: no
- name: admin_passwd
prompt: "please enter the jboss admin password"
private: yes
- name: grp_name
prompt: "please enter the admin group name"
private: no
vars:
jboss_hostname: 'unixchips-jbossclient'
cert_alias_name: 'unixchips-jbossclient'
jboss_bind_address: '165.115.46.43'
jboss_port_offset: '700'
jboss_eap_version: 'jboss-eap-7.3'
instance_name: 'JTS'
java_home: '/usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64'
offset_port: '700'
roles:
- jboss-standalone
******************************************************************************
5. The main yamal file for execution is given below with the detailed steps mentioned in it . This yamal file includes
1. creating the jboss user & group
2. create the /opt/jboss/instance/instance name folder
3.check the java installation status
4. extract the jboss zip file
5.copy the required setup/startup/stop scripts
6. pass the required variables to standalone-full.xml and copy the file to configuration directory
7. finally start the instance using the startup script as jboss user
8. add the admin user and password for jboss console access
The main.yml file location is /etc/ansible/roles/jboss-standalone/tasks/
[unixchips@unixchips-jbossserver tasks]$ cat main.yml
---
# - hosts:all
- name: "add user jboss"
user:
name: jboss
group: jboss
home: /home/jboss
- name: add group "jboss"
group:
name: jboss
- include: javanew.yml
- file:
path: /opt/jboss/instances/{{instancename}}
state: directory
owner: jboss
group: jboss
- file:
path: /opt/jboss/bin
state: directory
owner: jboss
group: jboss
- name: "extract the jboss.zip file"
shell: |
cd "/opt/jboss/instances/{{instancename}}"
/bin/unzip /tmp/jboss-eap-7.3.0.zip
chown -R jboss:jboss jboss-eap-7.3
- file:
path: /opt/jboss/instances/{{instancename}}/jboss-eap-7.3/standalone/log
state: directory
owner: jboss
group: jboss
mode: 0775
- name: copy the scripts
template:
src: /etc/ansible/files/setup_jboss.sh.j2
dest: /opt/jboss/bin/setup_{{instancename}}.sh
owner: jboss
group: jboss
mode: 0755
# delegate_to: mtl-jbosstest2.cn.ca
- name: copy the startup script
template:
src: /etc/ansible/files/startup_jboss.sh.j2
dest: /opt/jboss/bin/startup_{{instancename}}.sh
owner: jboss
group: jboss
mode: 0777
- name: copy the stop script
template:
src: /etc/ansible/files/stop_jboss.sh.j2
dest: /opt/jboss/bin/stop_{{instancename}}.sh
owner: jboss
group: jboss
mode: 0755
- name: configure the jboss properties file
template:
src: /etc/ansible/files/jboss.properties.j2
dest: /opt/jboss/bin/jboss_{{instancename}}.properties
owner: jboss
group: jboss
mode: 0755
- name: copy the standalone.xml file
template:
src: /etc/ansible/files/standalone-full.xml.j2
dest: /opt/jboss/instances/{{instancename}}/jboss-eap-7.3/standalone/configuration/standalone-full.xml
owner: jboss
group: jboss
mode: 0755
- name: start the jboss script
become_user: jboss
shell: |
cd /opt/jboss/bin
/bin/sh startup_{{instancename}}.sh
- name: add the jboss admin user and group
become_user: jboss
shell: |
cd /opt/jboss/instances/{{instancename}}/jboss-eap-7.3/bin
/bin/sh add-user.sh -u '{{admin_username}}' -p '{{admin_passwd}}' -g '{{grp_name}}'
*******************************************************************************
6. Let's check the files which we used as j2 templates along with this script
a. setup_jboss.sh.j2
The template location will be /etc/ansible/files and durring the execution it will pick the desired values from the playbook.yml and copy to the unixchips-jbossclient (/opt/jboss/bin)
*********************************************************
source /opt/jboss/bin/jboss_{{instancename}}.properties
PATH=${JAVA_HOME}/bin:${PATH}
export JAVA_HOME EAP_HOME PATH
**********************************************************
b. Next template is the jboss.properties.j2 which is used to configure the jboss peoprty details along with the scripts. variables will be picked up from the playbook.yml file and the play book will attach te same to the property file and copy to the client location ( /opt/jboss/bin)
*******************************************************************
[unixchips@unixchips-jbossserver files]$ cat jboss.properties.j2
JBOSS_HOSTNAME={{ jboss_hostname }}
CERT_ALIAS_NAME={{ cert_alias_name }}
JBOSS_BIND_ADDR={{ jboss_bind_address }}
JBOSS_PORT_OFFSET={{ jboss_port_offset }}
GENERATE_CERT=true
LOCALITY=Bangalore
STATE=KA
COUNTRY=INDIA
JBOSS_PORT=$((JBOSS_PORT_OFFSET + 9990))
JBOSS_USER=jboss
USER_TFS=svc-teamfbuild
#svc-teamfprodbuild
JBOSS_ADMIN_USER=jbossadmin
#jboss-jondev-Administrator
#jboss-jonuat-Administrator
#jboss-jonstg-Administrator
#jboss-jonprd-Administrator
#Apigee Administrators
jbossAdminGrp=jboss-jonuat-Administrator
#ldapsrc-jbossndev
#ldapsrc-jbossnuat
#ldapsrc-jbossnstg
#ldapsrc-jbossnprd
#ldapsrc-jbossnppd
#ldapUser=ldapsrc-jbossnuat
JBOSS_EAP_VERSION={{ jboss_eap_version }}
JBOSS_ZIP=/opt/$JBOSS_USER/$JBOSS_EAP_VERSION.0.zip
EAP_HOME=/opt/jboss/instances/{{ instance_name }}/$JBOSS_EAP_VERSION
JAVA_HOME={{ java_home }}
USE_DYNATRACE=false
********************************************************************
c. startup_jboss.sh.j2 . This is the script which we are using to start the instances . Required parameters will be copied from the playbook.yml and main.yml file will copy the same to /opt/jboss/bin directory of the client machine
******************************************************************
[unixchips@unixchips-jbossserver files]$ cat startup_jboss.sh.j2
source /opt/jboss/bin/jboss_{{instancename}}.properties
. /opt/jboss/bin/setup_{{instancename}}.sh
nohup ${EAP_HOME}/bin/standalone.sh -Djboss.bind.address=$JBOSS_BIND_ADDR -Djboss.bind.address.management=$JBOSS_HOSTNAME -Djboss.server.default.config=standalone-full.xml >> /opt/jboss/instances/{{ instance_name }}/$JBOSS_EAP_VERSION/standalone/log/jboss_Test.log 2>&1 &
***********************************************************
d. stop_jboss.sh.j2 , This is the script to stop the instance and as usual the parameters will be taken from the jboss.property file and playbook.yml. File location will be /opt/jboss/bin directory in client machine
************************************************************************
[unixchips@unixchips-jbossserver files]$ cat stop_jboss.sh.j2
source /opt/jboss/bin/jboss_{{instancename}}.properties
. /opt/jboss/bin/setup_{{instancename}}.sh
${EAP_HOME}/bin/jboss-cli.sh --connect --controller=$JBOSS_HOSTNAME:$JBOSS_PORT -c --command=shutdown
sleep 10
JbossInstance_PID=`ps -ef | grep java | grep jboss | grep -w {{instancename}} | grep -v grep | awk '{print $2}'`
if [ -z $JbossInstance_PID ]; then
echo "Jboss Instance Stopped"
else
echo "Process still running... Kill process:" $JbossInstance_PID
kill -9 $JbossInstance_PID
fi
****************************************************************
7. Now let's execute the ansible script and check the output ..i have made the small modifications in the playbook.yml as given the instance name as "ttk" and offset port as 750 . Now let's call the playbook
***********************************************************************************
[unixchips@unixchips-jbossserver ~]$ ansible-playbook -i /etc/ansible/hosts playbook.yml
[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will
change, but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
please enter the instancename: ttk
please enter the jboss admin name: adminuser1
please enter the jboss admin password:
please enter the admin group name: mgmtuser
PLAY [main playbook] ********************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
ok: [unixchips-jbosseclient]
TASK [jboss-standalone : add user jboss] ************************************************************************************************
ok: [unixchips-jbosseclient]
TASK [jboss-standalone : add group "jboss"] *********************************************************************************************
ok: [unixchips-jbosseclient]
TASK [jboss-standalone : Check if java is installed] ************************************************************************************
changed: [unixchips-jbosseclient]
TASK [jboss-standalone : debug] *********************************************************************************************************
skipping: [unixchips-jbosseclient ]
TASK [jboss-standalone : yum] ***********************************************************************************************************
ok: [unixchips-jbosseclient ]
TASK [jboss-standalone : debug] *********************************************************************************************************
ok: [unixchips-jbosseclient ] => {
"msg": "Success - Java is installed"
}
TASK [jboss-standalone : file] **********************************************************************************************************
changed: [unixchips-jbosseclient ]
TASK [jboss-standalone : file] **********************************************************************************************************
ok: [unixchips-jbosseclient ]
TASK [jboss-standalone : extract the jboss.zip file] ************************************************************************************
changed: [unixchips-jbosseclient ]
TASK [jboss-standalone : file] **********************************************************************************************************
changed: [unixchips-jbosseclient ]
TASK [jboss-standalone : copy the scripts] **********************************************************************************************
changed: [unixchips-jbosseclient ]
TASK [jboss-standalone : copy the startup script] ***************************************************************************************
changed: [unixchips-jbosseclient ]
TASK [jboss-standalone : copy the stop script] ******************************************************************************************
changed: [unixchips-jbosseclient ]
TASK [jboss-standalone : configure the jboss properties file] ***************************************************************************
changed: [unixchips-jbosseclient ]
TASK [jboss-standalone : copy the standalone.xml file] **********************************************************************************
changed: [unixchips-jbosseclient ]
TASK [jboss-standalone : start the jboss script] ****************************************************************************************
changed: [ unixchips-jbosseclient]
TASK [jboss-standalone : add the jboss admin user and group] ****************************************************************************
changed: [unixchips-jbosseclient ]
PLAY RECAP ******************************************************************************************************************************
unixchips-jbosseclient : ok=17 changed=11 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
8. Now if login to the client machine and check the "ttk" instance we can see jboss instance is installed
[root@unixchips-jbossclient instances]# ps -ef |grep -i ttk
jboss 26947 1 0 19:53 ? 00:00:00 /bin/sh /opt/jboss/instances/ttk/jboss-eap-7.3/bin/standalone.sh -Djboss.bind.address=165.115.46.43 -Djboss.bind.address.management=mtl-jbosstest2.cn.ca -Djboss.server.default.config=standalone-full.xml
jboss 27040 26947 82 19:53 ? 00:00:14 /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/bin/java -D[Standalone] -server -verbose:gc -Xloggc:/opt/jboss/instances/ttk/jboss-eap-7.3/standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Dorg.jboss.boot.log.file=/opt/jboss/instances/ttk/jboss-eap-7.3/standalone/log/server.log -Dlogging.configuration=file:/opt/jboss/instances/ttk/jboss-eap-7.3/standalone/configuration/logging.properties -jar /opt/jboss/instances/ttk/jboss-eap-7.3/jboss-modules.jar -mp /opt/jboss/instances ttk/jboss-eap-7.3/modules org.jboss.as.standalone -Djboss.home.dir=/opt/jboss/instances/ttk/jboss-eap-7.3 -Djboss.server.base.dir=/opt/jboss/instances/ttk/jboss-eap-7.3/standalone -Djboss.bind.address=165.115.46.43 -Djboss.bind.address.management=mtl-jbosstest2.cn.ca -Djboss.server.default.config=standalone-full.xml
Thank you for reading