您的位置:首页 > 其它

ceph-deploy的calamari命令

2017-11-29 08:56 281 查看
ceph-deploy的calamari主要用于将config文件写到远程host的/etc/salt/minion.d/calamari.conf
文件中并安装salt-minion和diamod 这两个包,并是能salt-minion 这个service 开机自动启动
其源码路径为:E:\ceph-deploy-master\ceph-deploy-master\ceph_deploy\calamari.py
入口函数为:
def make(parser):
"""
Install and configure Calamari nodes. Assumes that a repository with
Calamari packages is already configured. Refer to the docs for examples
(http://ceph.com/ceph-deploy/docs/conf.html)
"""
#添加一个自命令,子命令存在subcommand这个字符串中
calamari_parser = parser.add_subparsers(dest='subcommand')
calamari_parser.required = True
#子命令为connect
calamari_connect = calamari_parser.add_parser(
'connect',
help='Configure host(s) to connect to Calamari master'
)
#添加可选参数master
calamari_connect.add_argument(
'--master',
nargs='?',
metavar='MASTER SERVER',
help="The domain for the Calamari master server"
)
#添加位置参数hosts
calamari_connect.add_argument(
'hosts',
nargs='+',
)
#connect 子命令的处理函数为calamari
parser.set_defaults(
func=calamari,
)
#如果子命令是connect的话,则调用connect函数处理
def calamari(args):
if args.subcommand == 'connect':
connect(args)

def distro_is_supported(distro_name):
"""
An enforcer of supported distros that can differ from what ceph-deploy
supports.
"""
#目前支持4家发行版
supported = ['centos', 'redhat', 'ubuntu', 'debian']
if distro_name in supported:
return True
return False

def connect(args):
for hostname in args.hosts:
#得到远端host的代表,后续可以通过distro这个代表直接操作远端hosts
distro = hosts.get(hostname, username=args.username)
#看远端host的发行版是否支持ceph,目前支持4家发行版
if not distro_is_supported(distro.normalized_name):
raise exc.UnsupportedPlatform(
distro.distro_name,
distro.codename,
distro.release
)

LOG.info(
'Distro info: %s %s %s',
distro.name,
distro.release,
distro.codename
)
LOG.info('assuming that a repository with Calamari packages is already configured.')
LOG.info('Refer to the docs for examples (http://ceph.com/ceph-deploy/docs/conf.html)')

rlogger = logging.getLogger(hostname)

# Emplace minion config prior to installation so that it is present
# when the minion first starts.
#得到要写入config的远端文件的路径,这个路径为/etc/salt/minion.d/calamari.conf
minion_config_dir = os.path.join('/etc/salt/', 'minion.d')
minion_config_file = os.path.join(minion_config_dir, 'calamari.conf')

rlogger.debug('creating config dir: %s' % minion_config_dir)
#通过远端的代表distro在远端新建目录/etc/salt/minion.d/
distro.conn.remote_module.makedir(minion_config_dir, [errno.EEXIST])

rlogger.debug(
'creating the calamari salt config: %s' % minion_config_file
)
#通过远端的代表distro在将args.master代表的config写入到远端的/etc/salt/minion.d/calamari.conf文件中
distro.conn.remote_module.write_file(
minion_config_file,
('master: %s\n' % args.master).encode('utf-8')
)
#通过远端的代表distro在远端安装salt-minion和diamod
distro.packager.install('salt-minion')
distro.packager.install('diamond')
#如果远端机器是redhat和centos 需要是遏制chkconfig让salt-minion 使能,并通过service 命令启动
这个service,这两部也是通过远端代表distro直接在远端执行命令
# redhat/centos need to get the service started
if distro.normalized_name in ['redhat', 'centos']:
remoto.process.run(
distro.conn,
['chkconfig', 'salt-minion', 'on']
)

remoto.process.run(
distro.conn,
['service', 'salt-minion', 'start']
)
#退出连接的远端
distro.conn.exit()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: