ceph-deploy的calamari命令

ceph-deploy配置Calamari
本文介绍如何使用ceph-deploy工具配置Calamari节点,包括安装salt-minion和diamond包,设置开机启动等步骤。
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()
		
		

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值