运维管理平台 - 自动部署salt被控端minion
这个自动安装的前提要求是:需要安装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: #可以通过sudotty: # 如果设置了sudo,设置这个参数为truepriv: # 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端的ipusername = 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'") # 获取hostnameos.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
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
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
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.repo4 directories, 4 files
前台页面: