24 January 2015

Linux Interactive Shell Scripting

Last week i saw interactive shell running in the juju-quickstart . It is really cool.So i search about interactive shell scripting techniques available in Linux.So i found one of the famous method is "Whiptail" . Basically these scripting used for displaying dialog boxes which used to get user Inputs.So I have created Sample Interactive shell Scripting using dialog boxes.


First Screen Start with Menus.


This is the confirm box with yes / no option.
 This is the Password box. In this script i have put another Input box.

This is the Progress bar in "whiptail".Here i will put the bash script file.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/bash
# Whiptail is the interactive shell Scrpting
OPTION=$(whiptail --title "Whiptail Shell Script Menu" --menu "Choose your option" 15 60 4 \
"1" "Change Password" \
"2" "Change UserName" \
"3" "Change Email" \
"4" "exit"  3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus = 0 ]; then
    echo "Your chosen option:" $OPTION

case $OPTION in
  1) echo "Option1 Selected"
     if (whiptail --title "Change Password" --yes-button "Yes" --no-button "No"  --yesno "Do you need to changed Password ?" 10 60) then
    echo "password Selection Yes$?."
     
    # Start Password Box
    PASSWORD=$(whiptail --passwordbox "please enter your secret password" 8 78 --title "Change Password" 3>&1 1>&2 2>&3)
                                                                        # A trick to swap stdout and stderr.
    # Again, you can pack this inside if, but it seems really long for some 80-col terminal users.
     exitstatus=$?
 if [ $exitstatus = 0 ]; then
     echo "User selected Ok and entered " $PASSWORD
     touch sample_out_put.txt
     echo $PASSWORD > sample_out_put.txt
            
            # Start Progress Bar
      {
       for ((i = 0 ; i <= 100 ; i+=5)); do
  sleep 0.3
  echo $i
     done
      } | whiptail --gauge "Password Updating.." 6 50 0
            # End Progress Bar    

 else
     echo "User selected Cancel."
 fi

    # End Password Box 
     else
    echo "Password Selection No$?."
     fi
     ;;
  2) echo "option2 Selected"
 # Change User Name Box
 NAME=$(whiptail --inputbox "Change Username " 8 78  --title "Changed UserName" 3>&1 1>&2 2>&3) 
 exitstatus=$?
 if [ $exitstatus = 0 ]; then
     echo "UserName Changed " $NAME
 if (whiptail --title "Confirm Change UserName" --yes-button "Yes" --no-button "No"  --yesno "Do you need to changed UserName ?" 10 60)  then
     echo "Username Confirm Yes$?."
     # Start Progress Bar
      {
       for ((i = 0 ; i <= 100 ; i+=5)); do
  sleep 0.3
  echo $i
       done
      } | whiptail --gauge "UserName Updating.." 6 50 0
            # End Progress Bar 
 else
  echo"Confirm Failed"
 fi

 else 
    echo "UserName Not Changed"
 fi

     ;;
  3) echo "Option3 Selected"
     
     ;;
  4) echo "exit"
     {
    for ((i = 0 ; i <= 100 ; i+=5)); do
        sleep 0.1
        echo $i
    done
     } | whiptail --gauge "exit..." 6 50 0
esac

else
    echo "You chose Cancel."
fi

And Happy Coding....

16 January 2015

Write Juju charm

In the last tutorial(tutorial1) we discuss what is juju and what are the capabilities in juju. In juju all the concepts based on juju charms.Basically individual component is called juju charm. Developers can build their charms and publish in to juju charm store(https://demo.jujucharms.com/).This image shows how to add mysql charm and wordpress charm and add relations between them.



Why use juju ??

Juju is a framework which support deploy applications to any cloud or Ubuntu based environment simple and more flexibility.

What is juju charm ??

Charm is individual component which used to manage service. If  we get simple service  "mysql database" or "wordpress".If you need to deploy these service in to your cloud environment you need to just drag and drop these charms and connect them through GUI.

Write Hello world charm.

When you write charm you may use python or bash script as programming languages.In here i will create "Helloworld" charm and then deploy in LXC container. 

First need to install charm tools.

sudo apt-get install charm-tools
Then create Helloworld charm

charm create hello_world

Then it look like this one.It contains hooks folder and config.yaml and metadata.yaml
Then inside hooks folder   there are several scripts files.These are "install" , "config-changed","start","stop","upgrade-charm" and other relation changed and relation joined scripts.

Charm life cycle 

In this flow diagram show how scripts inside hooks folder runs.


First it runs "install" hook which used to install all the dependencies to the charm.For example if your charm need java or python need to install before start application in your environment you have to mention these dependencies in install hook.

Then It runs "config-changed" hook.It is responsible for act  when changing configuration in charms.And then "start" hook runs.It is responsible for start the application.It may be server or service.

And there are other three hooks which are related to changed or add relations to charms.As example if mysql charm need to connect to wordpress charm we have to add relation between mysql and wordpress.

And Last Step it runs "stop" hook.Which is responsible for shutdown all services provided in charm.