Skip to content

Commit f6da604

Browse files
author
Zhang Dongliang
committed
fix(upgrade): 普通用户升级兼容
1 parent 90e80ed commit f6da604

File tree

8 files changed

+42
-31
lines changed

8 files changed

+42
-31
lines changed

hack/save_tags.sh

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,35 @@ set -e
33
export PATH=$PATH:/opt/yunion/bin
44
export KUBECONFIG=/etc/kubernetes/admin.conf
55

6-
OCVER=$(kubectl -n onecloud get onecloudclusters default -o=jsonpath='{.spec.version}')
6+
OCVER=$(sudo kubectl -n onecloud get onecloudclusters default -o=jsonpath='{.spec.version}')
77
echo "/opt/yunion/bin/ocadm cluster update --version $OCVER --wait"
88

99
if [ "$1" == "-all" ]; then
10-
nslist="$(kubectl get namespace|tail -n +2| awk '{print $1}' | xargs)"
10+
nslist="$(kubectl get namespace | tail -n +2 | awk '{print $1}' | xargs)"
1111
else
1212
nslist=onecloud
1313
fi
1414

1515
for namespace in $nslist; do
1616
for typ in daemonset deployment; do
1717
kubectl get $typ -n $namespace -o jsonpath='{range .items[*]}{@.metadata.name}{"@"}{@.spec.template.spec.containers[*].name}{"%"}{@.spec.template.spec.containers[*].image}{"\n"}{end}'} | while read line; do
18-
dep=$(echo $line |awk -F@ '{print $1}')
19-
names=($(echo $line|sed -e 's#.*@##g' -e 's#%.*$##g'))
20-
images=($(echo $line |sed -e 's#.*%##'))
18+
dep=$(echo $line | awk -F@ '{print $1}')
19+
names=($(echo $line | sed -e 's#.*@##g' -e 's#%.*$##g'))
20+
images=($(echo $line | sed -e 's#.*%##'))
2121
echo -e "kubectl set image -n $namespace $typ/$dep \c"
2222
for idx in ${!names[@]}; do
2323
echo -e "${names[$idx]}=${images[$idx]} \c"
2424
done
25-
echo
25+
echo
2626
done
27-
kubectl get $typ -n $namespace -o jsonpath='{range .items[*]}{@.metadata.name}{"@"}{@.spec.template.spec.initContainers[*].name}{"%"}{@.spec.template.spec.initContainers[*].image}{"\n"}{end}'} |while read line; do
28-
if ! echo "$line" |grep -q '@%$'; then
29-
dep=$(echo $line |awk -F@ '{print $1}')
27+
kubectl get $typ -n $namespace -o jsonpath='{range .items[*]}{@.metadata.name}{"@"}{@.spec.template.spec.initContainers[*].name}{"%"}{@.spec.template.spec.initContainers[*].image}{"\n"}{end}'} | while read line; do
28+
if ! echo "$line" | grep -q '@%$'; then
29+
dep=$(echo $line | awk -F@ '{print $1}')
3030
echo -e "kubectl set image -n $namespace $typ/$dep \c"
31-
img=$(echo "$line" |sed -e 's#.*%##')
31+
img=$(echo "$line" | sed -e 's#.*%##')
3232
echo -e "init=$img \c"
3333
fi
34-
done |sed -e 's# kubectl#\nkubectl#g'
34+
done | sed -e 's# kubectl#\nkubectl#g'
3535
echo
3636
done
3737
done

lib/cluster.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import json
55
import re
6-
6+
from getpass import getuser
77
from .ssh import SSHClient
88
from . import k8s
99

@@ -32,7 +32,7 @@ class OnecloudCluster(object):
3232
def __init__(self, ssh_client):
3333
self.ssh_client = ssh_client
3434
ret = ssh_client.exec_command(
35-
'kubectl -n onecloud get onecloudclusters default -o json')
35+
'sudo kubectl -n onecloud get onecloudclusters default -o json')
3636
try:
3737
cluster = json.loads(ret)
3838
except ValueError:
@@ -85,7 +85,7 @@ def get_current_version(self):
8585
return self.get_spec().get('version')
8686

8787
def _construct_nodes(self):
88-
k8s_nodes = json.loads(self.ssh_client.exec_command('kubectl get nodes -o json')).get('items')
88+
k8s_nodes = json.loads(self.ssh_client.exec_command('sudo kubectl get nodes -o json')).get('items')
8989
self.k8s_nodes = [k8s.Node(obj) for obj in k8s_nodes]
9090
self.master_nodes = [node for node in self.k8s_nodes if node.is_master()]
9191
self.worker_nodes = [node for node in self.k8s_nodes if not node.is_master()]
@@ -123,7 +123,7 @@ def add_i(node):
123123
return inventory.generate_content()
124124

125125
def set_current_version(self, version):
126-
cmd = 'kubectl -n onecloud annotate --overwrite=true onecloudclusters default %s=%s' % (
126+
cmd = 'sudo kubectl -n onecloud annotate --overwrite=true onecloudclusters default %s=%s' % (
127127
A_OCBOOT_UPGRADE_CURRENT_VERSION,
128128
version)
129129
self.ssh_client.exec_command(cmd)
@@ -178,7 +178,7 @@ def generate_content(self):
178178

179179
class ansibleHost(object):
180180

181-
def __init__(self, node, role, user='root', port=22):
181+
def __init__(self, node, role, user=getuser(), port=22):
182182
self.hostname = node.get_hostname()
183183
self.ip = node.get_ip()
184184
self.role = role
@@ -215,20 +215,20 @@ def get_content(self):
215215

216216
class AnsiblePrimaryMasterHost(ansibleHost):
217217

218-
def __init__(self, node, user='root', port=22):
218+
def __init__(self, node, user=getuser(), port=22):
219219
super(AnsiblePrimaryMasterHost, self).__init__(
220220
node, GROUP_PRIMARY_MASTER_NODE, user, port)
221221

222222

223223
class AnsibleMasterHost(ansibleHost):
224224

225-
def __init__(self, node, user='root', port=22):
225+
def __init__(self, node, user=getuser(), port=22):
226226
super(AnsibleMasterHost, self).__init__(
227227
node, GROUP_MASTER_NODES, user, port)
228228

229229

230230
class AnsibleWorkerHost(ansibleHost):
231231

232-
def __init__(self, node, user='root', port=22):
232+
def __init__(self, node, user=getuser(), port=22):
233233
super(AnsibleWorkerHost, self).__init__(
234234
node, GROUP_WORKER_NODES, user, port)

lib/cmd.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import os
44

55
from lib import utils
6+
from lib.utils import init_local_user_path
67

78
def init_ansible_playbook_path():
89
if '/usr/local/bin' not in os.environ.get('PATH', '').split(':'):
@@ -42,6 +43,9 @@ def run_ansible_playbook(hosts_f, playbook_f, debug_level=0, vars=None):
4243
debug level support example:
4344
ANSIBLE_VERBOSITY=4 /opt/yunionboot/run.py /opt/yunion/upgrade/config.yml
4445
"""
46+
47+
init_local_user_path()
48+
4549
debug_flag = ''
4650
if debug_level == 0:
4751
debug_level = int(os.environ.get('ANSIBLE_VERBOSITY', 0))

lib/upgrade.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
from .utils import get_major_version
1010
from .cluster import construct_cluster
1111
from . import consts
12+
from getpass import getuser
1213
from lib import utils
1314

14-
1515
UPGRADE_MSG = """
1616
┌───────────────────────────────────────────────────────────────────────────────┐
1717
│ │
@@ -39,10 +39,9 @@ def add_command(subparsers):
3939

4040
# optional options
4141
help_d = lambda help: help + " (default: %(default)s)"
42-
4342
parser.add_argument("--user", "-u",
4443
dest="ssh_user",
45-
default="root",
44+
default=getuser(),
4645
help=help_d("primary master host ssh user"))
4746

4847
parser.add_argument("--key-file", "-k",

lib/utils.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,14 @@ def print_title(title):
7272
print('=' * 80)
7373
print(title)
7474
print('=' * 80)
75+
76+
77+
def init_local_user_path():
78+
import os
79+
path = os.environ['PATH']
80+
user_bin = os.path.expanduser('~/.local/bin')
81+
if user_bin not in path.split(os.pathsep):
82+
path = f'{path}:{user_bin}'
83+
os.environ['PATH'] = path
84+
85+

ocboot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env python
1+
#!/usr/bin/env python3
22

33
import sys
44
import argparse

onecloud/roles/upgrade/primary_master_node/tasks/main.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
mkdir -p $bk_dir
2727
kubectl get deployment -n onecloud onecloud-operator -o yaml | sed -f /tmp/clean_k8s_obj.sed > $bk_dir/operator.yml
2828
kubectl get oc -n onecloud default -o yaml | sed -f /tmp/clean_k8s_obj.sed > $bk_dir/oc.yml
29+
become: yes
2930

3031
- name: update operator only
3132
shell: |
@@ -36,6 +37,7 @@
3637
--operator-only \
3738
--wait
3839
# 30 minutes timeout
40+
become: yes
3941
async: 1800
4042
poll: 0
4143

@@ -114,6 +116,7 @@
114116
To watch upgrade process,
115117
SSH login host "{{ ansible_hostname }}" execute:
116118
kubectl get pods -n onecloud -w
119+
become: yes
117120
async_status:
118121
jid: "{{ ocadm_update_register.ansible_job_id }}"
119122
register: ocadm_update_result

run.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env python
1+
#!/usr/bin/env python3
22
# encoding: utf-8
33
from __future__ import unicode_literals
44
from __future__ import absolute_import
@@ -11,6 +11,7 @@
1111
import argparse
1212
from lib import install
1313
from lib import cmd
14+
from lib.utils import init_local_user_path
1415

1516

1617
def show_usage():
@@ -37,13 +38,6 @@ def version_ge(v1, v2):
3738
return versiontuple(v1) >= versiontuple(v2)
3839

3940

40-
def init_local_user_path():
41-
path = os.environ['PATH']
42-
user_bin = os.path.expanduser('~/.local/bin')
43-
if user_bin not in path.split(os.pathsep):
44-
path = f'{path}:{user_bin}'
45-
os.environ['PATH'] = path
46-
4741
def get_username():
4842
import getpass
4943
# python2 / python3 are all tested to get username

0 commit comments

Comments
 (0)