运维管理平台 - 自动部署salt被控端minion

8 篇文章 4 订阅
3 篇文章 0 订阅

这个自动安装的前提要求是:需要安装minion的服务器需要具备yum安装的功能

 

一、首先在master端安装salt-ssh,我将通过salt-ssh来为minion服务器执行安装命令。

yum -y install salt-ssh


 

二、部署roster

修改/etc/salt/roster的配置文件

roster配置文件的配置选项有:

# target的信息
    host:        # 远端主机的ip地址或者dns域名
    user:        # 登录的用户
    passwd:      # 用户密码,如果不使用此选项,则默认使用秘钥方式
# 可选的部分
    port:        #ssh端口
    sudo:        #可以通过sudo
    tty:         # 如果设置了sudo,设置这个参数为true
    priv:        # ssh秘钥的文件路径
    timeout:     # 当建立链接时等待响应时间的秒数
    minion_opts: # minion的位置路径
    thin_dir:    # target系统的存储目录,默认是/tmp/salt-<hash>
    cmd_umask:   # 使用salt-call命令的umask值 

 

我使用os.system修改roster文件:

views.py

def serverAdd(request):
    result = ''
    if request.method == "POST":
        form = autoArrMinionForm(request.POST)
        if form.is_valid():
            ip = request.POST.get('add_ip') # 需要安装minion端的ip
            username = request.POST.get('add_username') # 需要安装minion端的用户名
            password = request.POST.get('add_password') # 需要安装minion端的密码
            try:
                os.system("echo '"+ip+":'>> /etc/salt/roster && \
                            echo '  host: " +ip+ "'>> /etc/salt/roster && \
                            echo '  user: " +username+ "'>> /etc/salt/roster && \
                            echo '  passwd: " +password+ "'>> /etc/salt/roster && \
                            echo '  sudo: True'>> /etc/salt/roster && \
                            echo '  tty: True'>> /etc/salt/roster && \
                            echo '  timeout: 10'>> /etc/salt/roster")
                os.system("salt-ssh '" + ip + "' -ir 'easy_install certifi'") # 安装cretifi模块
                (status_gethostname, resultgethostname) = subprocess.getstatusoutput("salt-ssh -ir '" + ip + "' 'hostname'") # 获取hostname
                os.system("salt-ssh '" + ip + "' -ir 'echo ''"+ip+"' '"+resultgethostname+"''>> /etc/hosts'") # 添加hosts
                (status, result) = subprocess.getstatusoutput("salt-ssh -i '"+ip+"' state.sls minions.install") # 执行安装命令,并返回结果
            except:
                result = "无法连接该主机,请检查ip和用户密码是否正确!"
        else:
            result = "请填写正确的ip和用户名密码"
    else:
        form = autoArrMinionForm()
    re = {
        "form": form,
        "result": result
    }
    return  render(request, "serveradd.html", re)

 

 三、配置state.sls文件结构

1、创建目录:
mkdir -p /srv/salt/minions
mkdir -p /srv/salt/minions/conf 
mkdir -p /srv/salt/minions/yum.repos.d

 

2、编写.sls文件:
vim install.sls​

minion_yum:
  file.recurse:
    - name: /etc/yum.repos.d
    - source: salt://minions/yum.repos.d ##提前准备的yum文件路径
    - user: root
    - group: root
    - file_mode: 644
    - dir_mode: 755
    - include_empty: True
minion_install:
  pkg.installed:
    - pkgs:
      - salt-minion
    - require:
      - file: minion_yum
    - unless: rpm -qa | grep salt-minion
minion_conf:
  file.managed:
    - name: /etc/salt/minion
    - source: salt://minions/conf/minion  ##minion端需要配置的minion主配置文件
    - user: root
    - group: root
    - mode: 640
    - template: jinja
    - defaults:
      minion_id: {{grains['fqdn_ip4'][0]}}        ##这里grains是收集minion端/etc/hosts文件IP和主机名的
    - require:
      - pkg: minion_install
minion_service:
  service.running:
    - name: salt-minion
    - enable: True
    - require:
      - file: minion_conf



3、编写minion主文件
master: 10.62.83.211
id: {{ minion_id }} #这里的id会被解析成install.sls中的minion_id


4、拷贝yum源文件到yum.repos.d

可从/etc/yum.repos.d拷贝

cp CentOS-Base.repo /srv/salt/minions/yum.repos.d/
cp epel.repo /srv/salt/minions/yum.repos.d/​


最终的目录结构为:
[root@mykurol /]# tree /srv
/srv
`-- salt
    `-- minions
        |-- conf
        |   `-- minion
        |-- install.sls
        `-- yum.repos.d
            |-- CentOS-Base.repo
            `-- epel.repo
 
4 directories, 4 files



前台页面:


 

 执行结果:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值