我正在使用LXC作为测试SaltStack脚本的实验室平台.该实验室由5个Ubuntu 12.04 LTS容器组成,我通过克隆预先安装了salt-minion的模板容器创建.

创建模板容器并安装salt-minion后,模板将根据主机名(test-template)获取其Salt minion_id.如果我lxc克隆此模板,所有克隆都将具有该模板的minion_id,但我希望克隆使minion_id与其主机名匹配(test-machine- {1,2,3,4,5}).

有没有办法让这个用bash编写脚本,还是我应该采取另一条路径来达到同样的效果?

更新:

我查看了一些lxc脚本,发现lxc脚本使用/usr/share/lxc/lxc.functions文件定义了get_default_lxcpath函数,所以我当前的脚本看起来像这样:

. /usr/share/lxc/lxc.functions

# clone template
lxc-clone -o $template -n "$container"

# create saltstack minion config dir if does not exist    
minion_id_path="$(get_default_lxcpath)/$container/rootfs/etc/salt"
mkdir -p "$minion_id_path"

# set minion-id directly from container name
echo "$container" > "$minion_id_path/minion_id"

我不喜欢这个解决方案,因为它很大程度上取决于lxc和saltstack的内部结构,但确实可以完成这项工作.

更新2:

在关于salt-minion如何在删除现有minion_id时生成新minion_id的评论中提出建议后,我将其减少为两个命令:

. /usr/share/lxc/lxc.functions

# clone template
lxc-clone -o $template -n "$container"

# delete minion_id to allow salt-minion to generate a new one
rm "$(get_default_lxcpath)/$container/rootfs/etc/salt/minion_id"

我仍然希望看到更多通用/强大的方法,而不依赖于SaltStack和LXC内部.

dockerdockerfile一起使用.您可以在线查找 salt-minionsalt-master的示例.

抓取文件并继续构建图像(它始终是good idea to tag them).给定像这样的目录结构(紧跟上面提到的例子):

docker/
├── salt-master
│ ├── Dockerfile
│ └── supervisor-salt.conf
└── salt-minion
    ├── Dockerfile
    └── supervisor-salt.conf

你需要cd docker / salt-master并发出:

# docker build -t kstaken/ubuntu-salt-master .

盐奴才的等价物:

# cd docker/salt-minion
# docker build -t kstaken/ubuntu-salt-minion .

此过程创建可重用的图像:

# docker images | grep kstaken
kstaken/ubuntu-salt-minion   latest              557c052f5b14        19 seconds ago      253.5 MB
kstaken/ubuntu-salt-master   latest              1f41866d05e1        5 minutes ago       262.7 MB

您可以根据需要在前台(并附加到它们)或后台开始.你也可以link:

# docker run --detach=true --hostname=salt-master --networking=true kstaken/ubuntu-salt-maste
# docker run --detach=true --hostname=minion1 --networking=true --link bersek_morse:linked-server kstaken/ubuntu-salt-minion
# docker run --detach=true --hostname=minion2 --networking=true --link berserk_morse:linked-server kstaken/ubuntu-salt-minion

结果很容易编写脚本:

# docker ps
CONTAINER ID        IMAGE                               COMMAND                CREATED             STATUS              PORTS                NAMES
4fae47241a73        kstaken/ubuntu-salt-minion:latest   /usr/bin/supervisord   4 seconds ago       Up 2 seconds                             goofy_fermi
6030e7f882ba        kstaken/ubuntu-salt-minion:latest   /usr/bin/supervisord   25 seconds ago      Up 23 seconds                            desperate_hawking
22b18a387e21        kstaken/ubuntu-salt-master:latest   /usr/bin/supervisord   3 minutes ago       Up 3 minutes        4505/tcp,4506/tcp   berserk_morse,desperate_hawking/linked-server,goofy_fermi/linked-server

ubuntu-12.04 – Ubuntu上的LXC和Saltstack minion_id配置的更多相关文章

  1. centos6 – 使用SaltStack向文件添加单行

    我想在我的环境中的所有/etc/sudoers文件中添加以下行:但是,每个服务器都有一个不同的/etc/sudoers文件,从一个位置获取它们是不切实际的.在Salt中是否有办法确保文件中存在单行(或行组),而不是管理整个文件?

  2. Red Hat / CentOS EL6上的Linux容器(LXC) – lxc-create与libvirt?

    ,RedHat将LXC描述为技术预览版和suggestsusinglibvirttomanagecreateandmanagecontainers.然而,Oracleadvocatesatotallydifferentcontainerizationtechnique在其坚不可摧的Linux中.在libvirt方法中似乎缺少一些功能,但我最初使用lxc-*命令的方法是一个手动过程…如果libvirt最终丢弃了libvirt-lxc并且只提供了systemd-nspawn并且定义了systemdslice的

  3. 在ubuntu上运行linux容器(lxc)以隔离Web服务器进程(ruby / thin)

    人们为容器设置静态桥接IP并且Nginx指向它吗?如何确保在容器中运行的Web服务器只能由外部主机访问?

  4. ubuntu – 为什么要使用lxc而不是chroot?

    一个ubuntu服务器在不同的域上托管3个应用程序.每个应用都有自己的开发人员.应用程序开发人员属于linux“sftp”组.chroot允许每个app开发者使用密码sftp访问.在sshd_config中我们关注的是一个应用程序中的编程漏洞导致其他2个应用程序出现问题.我们应该使用lxc容器而不是chroot吗?lxc容器的更改是否对应用程序开发人员透明?

  5. LXC容器无法启动

    我的CentOSLXC容器在Ubuntu14.10机器上不再启动了.我认为重启后问题就开始了,但我不确定.在yum更新之后,当init脚本被替换为不支持LXC的库存脚本时,我遇到了类似的问题.他们试图启动udev等…

  6. 如何自动启动无特权的lxc容器?

    我建议在Ubuntu’scron中使用方便的@reboot别名来运行lxc-autostart.作为拥有非特权容器的用户,运行crontab-e并添加以下行:@rebootlxc-autostart

  7. ubuntu – 使用公共IP的LXC网络

    您的广播地址与网络不匹配,我将在上面的示例中使用125.67.43.255.

  8. Ubuntu LXC 14.04错误

    >我怎样才能解决这个问题?

  9. ubuntu – “挂载错误(13):权限被拒绝”仅在LXC容器中用于CIFS / Samba共享

    我有一个samba共享,在Ubuntu12.04主机下安装得很好:但是当我尝试在LXC容器中执行相同的安装时,也安装了cifs-utils包的Ubuntu12.04,我收到了一个权限错误:这两个命令都以root身份运行.为什么在容器中这会有所不同,有没有办法让这个mount在容器下工作.无法直接安装,您应首先将共享安装到主机,然后使用lxc.mount.entry配置指令将mount共享的mountpoint绑定到容器内.您还可以为容器提供外部fstab文件,如here所示.

  10. ubuntu – 将所有LXC节点APT缓存链接到主机的APT缓存

    我有许多LXC容器,它们都有自己独立的APT缓存.我想将这些链接到主机APT缓存在:根据我的记忆,从chroot监狱中走出来是一个巨大的禁忌,所以我想知道其他一些干净的选择是什么.一个解决方案我想到了什么只是让主机上的cron作业与来宾容器同步,但我想知道是否有任何方法可以处理这个而无需安排同步?符号链接会很方便,但它是一个巨大的安全漏洞,对吧?

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部