@@ -5,100 +5,208 @@ user=$(whoami)
55BASE_PATH=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " > /dev/null 2>&1 && pwd ) "
66
77function check_inst_tools() {
8+ pip3 & > /dev/null
9+ if [ ! $? == 0 ]; then
10+ echo ' >>> please install pip3 (python3-pip)'
11+ return 1
12+ fi
813 python3 -c ' import distutils' & > /dev/null
914 if [ $? == 1 ]; then
1015 echo ' >>> please install python distutils module'
16+ echo ' >>> ie: pip3 install distutils'
17+ return 1
18+ fi
19+ python3 -c ' import distutils.util' & > /dev/null
20+ if [ $? == 1 ]; then
21+ echo ' >>> please install python distutils.util module'
22+ echo ' >>> ie: pip3 install distutils.util'
23+ return 1
1124 fi
1225 curl & > /dev/null
1326 if [ ! $? == 2 ]; then
1427 echo ' >>> please install curl'
28+ return 1
1529 fi
1630 unzip & > /dev/null
1731 if [ ! $? == 0 ]; then
1832 echo ' >>> please install unzip'
33+ return 1
1934 fi
2035 sudo & > /dev/null
2136 if [ ! $? == 1 ]; then
2237 echo ' >>> please install sudo'
38+ return 1
39+ fi
40+ }
41+
42+ function spinner(){
43+ spinner=" /|\\ -/|\\ -"
44+ while :
45+ do
46+ for i in ` seq 0 7`
47+ do
48+ echo -n " ${spinner: $i : 1} "
49+ echo -en " \010"
50+ sleep 0.2
51+ done
52+ done
53+ }
54+
55+ function setup_folders(){
56+ mkdir -p ~ /.ssh/pcli
57+ sudo mkdir -p /etc/pcli/ansible/playbooks
58+ sudo mkdir -p /etc/pcli/terraform
59+ sudo mkdir -p /var/log/pcli
60+ sudo chown -R " $user :$user " /etc/pcli
61+ sudo chown -R " $user :$user " /var/log/pcli
62+ FOLDERS_ARRAY=( ~ /.ssh/pcli/ /etc/pcli/ansible/playbooks/ /etc/pcli/terraform/ /var/log/pcli/ )
63+ for folder in " ${FOLDERS_ARRAY[@]} " ; do
64+ if [ -d " $folder " ]; then
65+ echo " >>> $folder created"
66+ else
67+ echo " >>> $folder missing"
68+ return 1
69+ fi
70+ done
71+ }
72+
73+ function inst_pipenv_ansible(){
74+ printf ' >>> installing ansible and pipenv '
75+ spinner &
76+ SPINNER_PID=$!
77+ trap " kill -9 $SPINNER_PID " ` seq 0 15`
78+ python3 -m pip install --user --no-warn-script-location ansible pipenv passlib >> /var/log/pcli/pcli.log
79+ kill -9 $SPINNER_PID
80+ wait $SPINNER_PID 2> /dev/null
81+ PYTHON_BIN_PATH=" $( python3 -m site --user-base) /bin"
82+ PATH=" $PATH :$PYTHON_BIN_PATH "
83+ pipenv & > /dev/null
84+ if [ $? == 127 ]; then
85+ echo ' >>> something wrong during pipenv installation - please check /var/pcli/pcli.log'
86+ return 1
87+ fi
88+ echo ; echo ' >>> pipenv installed'
89+ ansible & > /dev/null
90+ if [ $? == 127 ]; then
91+ echo ' >>> something wrong during ansible installation - please check /var/pcli/pcli.log'
92+ return 1
93+ fi
94+ echo ' >>> ansible installed'
95+ }
96+
97+ function inst_terraform(){
98+ if [ ! -f ' /usr/bin/terraform' ]; then
99+ printf ' >>> downloading and installing terraform '
100+ spinner &
101+ SPINNER_PID=$!
102+ trap " kill -9 $SPINNER_PID " ` seq 0 15`
103+ install -d -m 775 -o " $user " /tmp/pcli
104+ mkdir -p /tmp/pcli && cd " $_ "
105+ curl -s https://releases.hashicorp.com/terraform/0.13.3/terraform_0.13.3_linux_amd64.zip --output terraform_0.13.3_linux_amd64.zip >> /var/log/pcli/pcli.log
106+ unzip terraform_0.13.3_linux_amd64.zip -d /tmp/pcli/ >> /var/log/pcli/pcli.log
107+ chmod +x terraform
108+ sudo mv terraform /usr/bin/terraform
109+ cd - > /dev/null
110+ rm -rf /tmp/pcli
111+ kill -9 $SPINNER_PID
112+ wait $SPINNER_PID 2> /dev/null
113+ fi
114+ if [ ! -f ' /usr/bin/terraform' ]; then
115+ echo ' >>>' ; echo ' >>> something wrong during terraform installation - please check /var/pcli/pcli.log'
116+ return 1
117+ fi
118+ echo ; echo ' >>> terraform installed'
119+ }
120+
121+ function config_setup(){
122+ cp " $BASE_PATH /config/ansible/ansible.cfg" /etc/pcli/ansible/
123+ cp " $BASE_PATH /config/ansible/playbooks/edit_user_pwd.yml" /etc/pcli/ansible/playbooks/
124+ cp " $BASE_PATH /config/ansible/playbooks/pnode_package.yml" /etc/pcli/ansible/playbooks/
125+ cp " $BASE_PATH /config/ansible/playbooks/sys_config.yml" /etc/pcli/ansible/playbooks/
126+ cp " $BASE_PATH /config/terraform/inst_config.json" /etc/pcli/terraform/
127+ cp " $BASE_PATH /config/terraform/variables.tf.json.orig" /etc/pcli/terraform/
128+ cp " $BASE_PATH /config/terraform/main.tf.orig" /etc/pcli/terraform/
129+ cp " $BASE_PATH /config/terraform/output.tf.orig" /etc/pcli/terraform/
130+ FILES_ARRAY=(" /etc/pcli/ansible/ansible.cfg" " /etc/pcli/ansible/playbooks/edit_user_pwd.yml"
131+ " /etc/pcli/ansible/playbooks/pnode_package.yml" " /etc/pcli/ansible/playbooks/sys_config.yml"
132+ " /etc/pcli/terraform/inst_config.json" " /etc/pcli/terraform/variables.tf.json.orig"
133+ " /etc/pcli/terraform/main.tf.orig" " /etc/pcli/terraform/output.tf.orig" )
134+ for file in " ${FILES_ARRAY[@]} " ; do
135+ if [ -f " $file " ]; then
136+ echo " >>> $file moved in path"
137+ else
138+ echo " >>> $file not moved in path"
139+ return 1
140+ fi
141+ done
142+ echo ' >>> all config files moved in path'
143+ }
144+
145+ function build_pipenv_env(){
146+ printf ' >>> building pipenv environment '
147+ spinner &
148+ SPINNER_PID=$!
149+ trap " kill -9 $SPINNER_PID " ` seq 0 15`
150+ cd " $BASE_PATH "
151+ pipenv install >> /var/log/pcli/pcli.log 2>&1
152+ kill -9 $SPINNER_PID
153+ wait $SPINNER_PID 2> /dev/null
154+ echo ; echo ' >>> pipenv environment built'
155+ }
156+
157+ function setup_bashrc(){
158+ if ! grep -q " if [ -r ~/.bashrc ]; then" ~ /.bash_profile > /dev/null 2>&1 /dev/null ; then
159+ if [ ! -f ~ /.bash_profile ]; then
160+ echo ' >>> ~/.bash_profile not found'
161+ touch ~ /.bash_profile
162+ fi
163+ echo " if [ -r ~/.bashrc ]; then" >> ~ /.bash_profile
164+ echo " source ~/.bashrc" >> ~ /.bash_profile
165+ echo " fi" >> ~ /.bash_profile
166+ echo ' >>> ~/.bash_profile created and edited'
167+ fi
168+ if ! grep -q " pcli" ~ /.bashrc > /dev/null 2>&1 /dev/null; then
169+ if [ ! -f ~ /.bashrc ]; then
170+ touch ~ /.bashrc
171+ fi
172+ echo " alias pcli='$( cd $BASE_PATH ; pipenv --venv) /bin/python $BASE_PATH /cli.py'" >> ~ /.bashrc
173+ source ~ /.bashrc
174+ echo ' >>> bashrc edited'
175+ echo ' >>> pcli moved in path'
176+ fi
177+ }
178+
179+ function start_checks(){
180+ if check_inst_tools; then
181+ main
182+ else return 1
23183 fi
24184}
25185
26- check_inst_tools
27-
28- mkdir -p ~ /.ssh/pcli
29- sudo mkdir -p /etc/pcli/ansible/playbooks
30- sudo mkdir -p /etc/pcli/terraform
31- sudo mkdir -p /var/log/pcli
32- sudo chown -R " $user :$user " /etc/pcli
33- sudo chown -R " $user :$user " /var/log/pcli
34- echo ' >>> folder /etc/pcli/ created'
35- echo ' >>> folder /etc/pcli/ansible created'
36- echo ' >>> folder /etc/pcli/ansible/playbooks created'
37- echo ' >>> folder /etc/pcli/terraform created'
38- echo ' >>> folder /var/log/pcli/ created'
39- echo ' >>> log file /var/log/pcli/pcli.log created'
40-
41- pip3 > /dev/null 2>&1 /dev/null
42- if [ ! $? == 0 ]; then
43- echo ' >>> installing pip3'
44- curl -sS https://bootstrap.pypa.io/get-pip.py | python3 >> /var/log/pcli/pcli.log 2>&1
45- export PATH=" $HOME /.local/bin:$PATH "
46- echo ' >>> pip3 installed'
47- else
48- echo ' >>> pip3 already installed'
49- fi
50-
51- echo ' >>> installing ansible and pipenv'
52- pip3 install --user --no-warn-script-location ansible pipenv passlib >> /var/log/pcli/pcli.log
53- echo ' >>> ansible and pipenv installed'
54-
55- echo ' >>> downloading and installing terraform'
56- install -d -m 775 -o " $user " /tmp/pcli
57- mkdir -p /tmp/pcli && cd " $_ "
58- curl -s https://releases.hashicorp.com/terraform/0.13.3/terraform_0.13.3_linux_amd64.zip --output terraform_0.13.3_linux_amd64.zip >> /var/log/pcli/pcli.log
59- unzip terraform_0.13.3_linux_amd64.zip -d /tmp/pcli/ >> /var/log/pcli/pcli.log
60- chmod +x terraform
61- sudo mv terraform /usr/bin/terraform
62- cd - > /dev/null
63- rm -rf /tmp/pcli
64- echo ' >>> terraform installed'
65-
66- cp " $BASE_PATH /config/ansible/ansible.cfg" /etc/pcli/ansible/
67- cp " $BASE_PATH /config/ansible/playbooks/edit_user_pwd.yml" /etc/pcli/ansible/playbooks/
68- cp " $BASE_PATH /config/ansible/playbooks/pnode_package.yml" /etc/pcli/ansible/playbooks/
69- cp " $BASE_PATH /config/ansible/playbooks/sys_config.yml" /etc/pcli/ansible/playbooks/
70- cp " $BASE_PATH /config/terraform/inst_config.json" /etc/pcli/terraform/
71- cp " $BASE_PATH /config/terraform/variables.tf.json.orig" /etc/pcli/terraform/
72- cp " $BASE_PATH /config/terraform/main.tf.orig" /etc/pcli/terraform/
73- cp " $BASE_PATH /config/terraform/output.tf.orig" /etc/pcli/terraform/
74- echo ' >>> all config files moved in path'
75-
76- echo ' >>> building pipenv environment'
77- cd " $BASE_PATH "
78- pipenv install >> /var/log/pcli/pcli.log 2>&1
79- echo ' >>> pipenv environment built'
80- cd > /dev/null
81- if ! grep -q " if [ -r ~/.bashrc ]; then" ~ /.bash_profile > /dev/null 2>&1 /dev/null ; then
82- if [ ! -f ~ /.bash_profile ]; then
83- echo ' >>> ~/.bash_profile not found'
84- touch ~ /.bash_profile
85- fi
86- echo " if [ -r ~/.bashrc ]; then" >> ~ /.bash_profile
87- echo " source ~/.bashrc" >> ~ /.bash_profile
88- echo " fi" >> ~ /.bash_profile
89- echo ' >>> ~/.bash_profile created and edited'
90- fi
91- if ! grep -q " pcli" ~ /.bashrc > /dev/null 2>&1 /dev/null; then
92- if [ ! -f ~ /.bashrc ]; then
93- touch ~ /.bashrc
94- fi
95- echo " alias pcli='$( cd $BASE_PATH ; pipenv --venv) /bin/python $BASE_PATH /cli.py'" >> ~ /.bashrc
96- source ~ /.bashrc
97- echo ' >>> bashrc edited'
98- echo ' >>> pcli moved in path'
99- fi
100- echo ; echo ;
101- echo ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
102- echo ' >>> installation finished!'
103- echo ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
104- echo ; echo ;
186+ function main(){
187+ if ! setup_folders; then
188+ return 1
189+ fi
190+ if ! inst_pipenv_ansible; then
191+ return 1
192+ fi
193+ if ! inst_terraform; then
194+ return 1
195+ fi
196+ if ! config_setup; then
197+ return 1
198+ fi
199+ build_pipenv_env
200+
201+ cd > /dev/null
202+
203+ setup_bashrc
204+
205+ echo ; echo ;
206+ echo ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
207+ echo ' >>> installation finished!'
208+ echo ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
209+ echo ; echo ;
210+ }
211+
212+ start_checks
0 commit comments