Tuesday, December 8, 2020

jboss automation using ansible

 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