-3

我已经更改了我的主机文件,所以如何更改主机名。我的系统是 ubuntu。例如我的主机文件:

192.168.0.100 host1.mydomain.com
192.168.0.101 host2.mydomain.com

我想要host1的/etc/hostname下的hostname文件到host1.mydomain.com,host2的hostname文件到host2.mydomain.com

如何使用面料做到这一点?我必须对每个主机进行 ssh 并编辑主机名文件,fabric 可以这样做吗?

我不是要使用hostname命令,而是要编辑 /etc/hostname 文件。我的意思是如何使用织物来做到这一点:例如:

def update_hostname():
  get("/etc/hosts","hosts")
  hosts_content = file("hosts")
  **hostname = ·get the hostname corespond to ip·**
  get("/etc/hostname","hostname")
  update `hostname file`
  put("hostname","/etc/hostname")

怎么获取ip?因为fabric在每台主机上都做这项工作,并且主机名对应于每台主机。我需要知道作业正在哪个主机工作,然后取回 ip,然后获取与 ip 对应的主机名,最后更新主机名文件。 在此处输入图像描述

4

3 回答 3

1
def hostname():

   '''
   function to change the hostname of the ubuntu server
   '''

   server_hostname = prompt ("The Hostname for the server is :")

   sed ("/etc/hostname", before='current hostname', after='%s' % (server_hostname), use_sudo=True,backup='')

   sudo ("init 6")

这将根据您的选择更改主机名。

于 2014-04-28T09:29:14.757 回答
1

Fabric 只是一个 SSH 包装器,所以您正在查看的是 LINUX 特定的,而不是 frabric 或 python 特定的。

from fabric.api import run
run('hostname your-new-name')
run('echo your-new-hostname > /etc/hostname')

并根据您的 linux dist 执行 run(..edit..) 吗?

或者只是这样做:

from subprocess import Popen, PIPE
hosts = open('/etc/networking/hosts', 'rb')
for hostline in hosts.readlines():
    ip, name = hostline.split(' ')
    command = ['ssh', '-t', 'root@' + host.strip('\r\n ,;), ' ', "echo " + name.strip('\r\n ,;) + " > /etc/hostname",]
    stdout, stderr = Popen(command, stdout=PIPE, stderr=PIPE).communicate()
hosts.close()

注意: /etc/networking/hosts 可能会为您放置在其他地方。这里重要的部分是您遍历 /hosts 文件,然后通过 ssh 连接到每台机器,将给定的主机名回显到该机器。

于 2013-02-05T16:17:54.297 回答
0

在您的织物脚本中,您需要...

  • 以允许编辑主机文件的用户身份 ssh 进入机器(通过权限或组)。如果您需要sudo进入用户,请在 StackOverflow 中搜索有关 sudo 和 Fabric 的问题——您需要调整您的 fabfile 以不提示输入密码。

  • 织物可能有一种尴尬的方式来处理读/写/打开文件。您最好cd进入正确的目录。就像是...

    用 cd('/etc/') 运行('echo new_hostname hostname')

于 2013-02-05T17:05:03.570 回答