mirror of
https://github.com/xcat2/confluent.git
synced 2026-09-29 08:41:00 +00:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 59def49e2a | |||
| b40eef252a | |||
| 5daf0b231e | |||
| 896fc09ad8 | |||
| 6769c171c1 | |||
| 700fe1bc3b | |||
| bc7d480a17 | |||
| 92dea32dd4 | |||
| 0186f002e0 | |||
| 8d80efec64 |
@@ -1,65 +0,0 @@
|
||||
-other auth
|
||||
-pam if user exists but has no passphrase
|
||||
-keystone?
|
||||
-ad? (specialized to the AD case)
|
||||
-expressionkeys never gets smaller - perf impact
|
||||
-When a user account is changed, have httpapi and sockapi notified of changes
|
||||
to kill off related sessions. password changes are given a pass, but user
|
||||
deletion will result in immediate session termination
|
||||
-When the time comes to dole out configuration/discovery, take page from xCAT
|
||||
'flexdiscover' command, if possible bring an ipmi device under management
|
||||
by way of ipv6 to eliminate requirement for ip to be specified.
|
||||
Requires the polling event support (which is required for security anyway)
|
||||
|
||||
-this stack trace (happened with method was set to ""):
|
||||
Traceback (most recent call last):
|
||||
File "/usr/lib/python2.6/site-packages/eventlet/wsgi.py", line 402, in handle_one_response
|
||||
for data in result:
|
||||
File "/home/jbjohnso/Development/confluent/confluent/httpapi.py", line 301, in resourcehandler
|
||||
cfgmgr, querydict)
|
||||
File "/home/jbjohnso/Development/confluent/confluent/pluginapi.py", line 273, in handle_path
|
||||
passvalue = pluginmap[plugpath].__dict__[operation](
|
||||
KeyError: ''
|
||||
|
||||
|
||||
-have pyghmi and friends do multiprocessing pools
|
||||
-investigate console behavior when target off (causing disconnects/reconnects
|
||||
on input)
|
||||
-test to make sure that 'Session Disconnected' is working
|
||||
-confetty to do right thing with respect to status updates when run right on a
|
||||
console. It currently clutters up the screen with data that would land in
|
||||
a titlebar
|
||||
-audit log did not show confetty activity for starting console
|
||||
-read exclusive and full exclusive console access modes
|
||||
-remove the socket ignore code from pyghmi and repeat tests to understand
|
||||
why python 2.7 with excessive select() would transpose typing so badly...
|
||||
while the problem cannot be reproduced without that problem fixed, the
|
||||
problem should only cause poor performance, not induce transpose of data...
|
||||
-test out bg_sync in cfg to make sure if it runs just before a change it doesn't cause loss
|
||||
-set boot/nextdevice=cd after exiting console did:
|
||||
/nodes/n3/ -> set boot/nextdevice=cd
|
||||
Traceback (most recent call last):
|
||||
File "/usr/bin/confetty", line 561, in <module>
|
||||
do_command(currcommand, netserver)
|
||||
File "/usr/bin/confetty", line 300, in do_command
|
||||
setvalues(argv[1:])
|
||||
File "/usr/bin/confetty", line 369, in setvalues
|
||||
print_result(res)
|
||||
File "/usr/bin/confetty", line 211, in print_result
|
||||
for key in res.iterkeys():
|
||||
AttributeError: 'str' object has no attribute 'iterkeys'
|
||||
-/detected/ collection
|
||||
-SLP snooping: snoop for srvrequests, likel
|
||||
-Config backup/restore
|
||||
-seal to password
|
||||
-Scenario was somehow solconnection object is 'broken' (broken=True) but the supervising console manager
|
||||
never notices. The 'write()' doesn't raise an exception, just returns.
|
||||
-pyghmi should except on attempt to write to broken console I think...
|
||||
-need to investigate what path does not end up getting immediate notification
|
||||
for disconnection
|
||||
-last observed when a switch between confluent and imm was resetting in a loop
|
||||
while it was trying to keep console open as much as possibl
|
||||
-cs._handled_consoles[('n4', None)]._console.handle_data({'error':1}) is how I was able to
|
||||
kick the session state back to working order after whatever event that was missed above
|
||||
occurred.
|
||||
-save and restore the terminal title on startup/exit respectively
|
||||
@@ -20,9 +20,9 @@ class InvalidApiKey(Exception):
|
||||
|
||||
cryptname = ctypes.util.find_library('crypt')
|
||||
if not cryptname:
|
||||
if os.path.exists('/usr/lib64/libcrypt.so.1'):
|
||||
if os.path.exists('/lib64/libcrypt.so.1'):
|
||||
cryptname = 'libcrypt.so.1'
|
||||
elif os.path.exists('/usr/lib64/libcrypt.so.2'):
|
||||
elif os.path.exists('/lib64/libcrypt.so.2'):
|
||||
cryptname = 'libcrypt.so.2'
|
||||
c_libcrypt = ctypes.CDLL(cryptname)
|
||||
c_crypt = c_libcrypt.crypt
|
||||
@@ -93,14 +93,20 @@ def scan_confluents():
|
||||
if addr[0] == socket.AF_INET6:
|
||||
if addr[-1] in doneidxs:
|
||||
continue
|
||||
s6.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, addr[-1])
|
||||
try:
|
||||
s6.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, addr[-1])
|
||||
except TypeError:
|
||||
s6.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, addr[-1].tobytes())
|
||||
try:
|
||||
s6.sendto(msg, ('ff02::c', 1900))
|
||||
except OSError:
|
||||
pass
|
||||
doneidxs.add(addr[-1])
|
||||
elif addr[0] == socket.AF_INET:
|
||||
s4.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, addr[1])
|
||||
try:
|
||||
s4.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, addr[1])
|
||||
except TypeError:
|
||||
s4.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, addr[1].tobytes())
|
||||
try:
|
||||
s4.sendto(msg, ('239.255.255.250', 1900))
|
||||
except OSError:
|
||||
@@ -138,7 +144,7 @@ def get_net_apikey(nodename, mgr):
|
||||
newpass = newpass.encode('utf8')
|
||||
salt = salt.encode('utf8')
|
||||
crypted = c_crypt(newpass, salt)
|
||||
for addrinfo in socket.getaddrinfo(mgr, 13001, type=socket.SOCK_STREAM):
|
||||
for addrinfo in socket.getaddrinfo(mgr, 13001, 0, socket.SOCK_STREAM):
|
||||
try:
|
||||
clisock = socket.socket(addrinfo[0], addrinfo[1])
|
||||
clisock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
|
||||
@@ -8,11 +8,17 @@ import sys
|
||||
import time
|
||||
import shlex
|
||||
import subprocess
|
||||
from importlib.machinery import SourceFileLoader
|
||||
try:
|
||||
apiclient = SourceFileLoader('apiclient', '/opt/confluent/bin/apiclient').load_module()
|
||||
except FileNotFoundError:
|
||||
apiclient = SourceFileLoader('apiclient', '/etc/confluent/apiclient').load_module()
|
||||
from importlib.machinery import SourceFileLoader
|
||||
def load_source(mod, path):
|
||||
return SourceFileLoader(mod, path).load_module()
|
||||
except ImportError:
|
||||
from imp import load_source
|
||||
|
||||
try:
|
||||
apiclient = load_source('apiclient', '/opt/confluent/bin/apiclient')
|
||||
except IOError:
|
||||
apiclient = load_source('apiclient', '/etc/confluent/apiclient')
|
||||
|
||||
def add_lla(iface, mac):
|
||||
pieces = mac.split(':')
|
||||
@@ -311,7 +317,7 @@ if __name__ == '__main__':
|
||||
myname = myname[0]
|
||||
myname = socket.inet_pton(socket.AF_INET, myname)
|
||||
for addr in myaddrs:
|
||||
if myname == bytes(addr[1]):
|
||||
if myname == addr[1].tobytes():
|
||||
curridx = addr[-1]
|
||||
if curridx in doneidxs:
|
||||
continue
|
||||
|
||||
@@ -6,6 +6,7 @@ After=basic.target
|
||||
# Network is enabled here
|
||||
After=dracut-initqueue.service
|
||||
Before=ignition-setup-user.service
|
||||
Before=coreos-ignition-setup-user.service
|
||||
Before=coreos-livepxe-rootfs.service
|
||||
|
||||
|
||||
|
||||
@@ -267,7 +267,7 @@ def get_lan_channel(s):
|
||||
medtype = int(rsp[1]) & 0b1111111
|
||||
if medtype not in (4, 6):
|
||||
continue
|
||||
rsp = s.raw_command(0xc, 2, bytearray([2, chan, 5, 0, 0]))
|
||||
rsp = s.raw_command(0xc, 2, bytearray([chan, 5, 0, 0]))
|
||||
if rsp.get('code', 1) == 0:
|
||||
return chan
|
||||
return 1
|
||||
|
||||
@@ -267,7 +267,7 @@ def get_lan_channel(s):
|
||||
medtype = int(rsp[1]) & 0b1111111
|
||||
if medtype not in (4, 6):
|
||||
continue
|
||||
rsp = s.raw_command(0xc, 2, bytearray([2, chan, 5, 0, 0]))
|
||||
rsp = s.raw_command(0xc, 2, bytearray([chan, 5, 0, 0]))
|
||||
if rsp.get('code', 1) == 0:
|
||||
return chan
|
||||
return 1
|
||||
|
||||
@@ -165,9 +165,18 @@ def set_port(s, port, vendor, model):
|
||||
return 1
|
||||
|
||||
|
||||
def get_remote_config_mod(vendor, model):
|
||||
def get_remote_config_mod(vendor, model, waiters):
|
||||
if vendor in ('IBM', 'Lenovo'):
|
||||
if _is_tsm(model):
|
||||
for waiter in waiters:
|
||||
if waiter:
|
||||
sys.stdout.write('Waiting for TSM network to activate')
|
||||
for x in range(0, 90):
|
||||
sys.stdout.write('.')
|
||||
sys.stdout.flush()
|
||||
time.sleep(1)
|
||||
sys.stdout.write('Complete\n')
|
||||
break
|
||||
return 'tsm'
|
||||
else:
|
||||
return 'xcc'
|
||||
@@ -275,7 +284,7 @@ def get_lan_channel(s):
|
||||
medtype = int(rsp[1]) & 0b1111111
|
||||
if medtype not in (4, 6):
|
||||
continue
|
||||
rsp = s.raw_command(0xc, 2, bytearray([2, chan, 5, 0, 0]))
|
||||
rsp = s.raw_command(0xc, 2, bytearray([chan, 5, 0, 0]))
|
||||
if rsp.get('code', 1) == 0:
|
||||
return chan
|
||||
return 1
|
||||
@@ -415,7 +424,7 @@ def main():
|
||||
dotwait()
|
||||
sys.stdout.write('done\n')
|
||||
sys.stdout.flush()
|
||||
cfgmod = get_remote_config_mod(vendor, model)
|
||||
cfgmod = get_remote_config_mod(vendor, model, (awaitip, awaitvlan, awaitprefix, awaitgw))
|
||||
if cfgmod:
|
||||
with open('configbmc.configmod', 'w+') as cm:
|
||||
cm.write('configmod: {0}\n'.format(cfgmod))
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
#!/usr/bin/python2
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2014 IBM Corporation
|
||||
# Copyright 2015-2016 Lenovo
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import readline
|
||||
import socket
|
||||
|
||||
connection = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||
self.connection.connect('/var/run/confluent/dbg.sock')
|
||||
|
||||
readline.parse_and_bind("tab: complete")
|
||||
readline.parse_and_bind("set bell-style none")
|
||||
|
||||
@@ -19,8 +19,8 @@ mv $PKGNAME $DPKGNAME-${VERSION}
|
||||
sed -i s/%%VERSION%%/$VERSION/ $DPKGNAME-${VERSION}/debian/changelog
|
||||
tar cvzf ${DPKGNAME}_${VERSION}.orig.tar.gz $DPKGNAME-${VERSION}
|
||||
cd $DPKGNAME-${VERSION}
|
||||
debuild -us -uc
|
||||
debuild --no-lintian -us -uc
|
||||
if [ ! -z "$1" ]; then
|
||||
mv /tmp/confluent/$DPKGNAME_${VERSION}*.deb $1/
|
||||
mv /tmp/confluent/$DPKGNAME-${VERSION}*.deb $1/
|
||||
fi
|
||||
exit 0
|
||||
|
||||
Reference in New Issue
Block a user