Vagrant Ansible的来宾计算机上的别名

Vagrant Ansible的来宾计算机上的别名,vagrant,alias,ansible,ansible-playbook,Vagrant,Alias,Ansible,Ansible Playbook,我想在运行Vagrant的来宾计算机上添加一些别名。我的provisioner是Ansible,如果我可以在剧本上添加别名和任务,那就太好了,我宁愿不必修改我的Vagrantfile 我在一个角色中尝试了这两种方法: 命令:alias serve='pub serve--hostname=0.0.0.0' shell:“alias-serve='pub-serve--hostname=0.0.0.0' 但没有一个成功。第一个引发了一个异常,我认为它来自于“”。第二个没有添加别名。shell选项看

我想在运行Vagrant的来宾计算机上添加一些别名。我的provisioner是Ansible,如果我可以在剧本上添加别名和任务,那就太好了,我宁愿不必修改我的
Vagrantfile

我在一个角色中尝试了这两种方法:
命令:alias serve='pub serve--hostname=0.0.0.0'

shell:“alias-serve='pub-serve--hostname=0.0.0.0'


但没有一个成功。第一个引发了一个异常,我认为它来自于“”。第二个没有添加别名。

shell选项看起来不错,但它只会为会话创建别名。然后,当您在设置之后连接到它时,它将不存在。我还不确定playbook中的其他玩家是否能够使用它,因为他们可能会使用另一个SSH会话

要永久添加它,您需要将其添加到相关的
.bashrc
.bash\u别名中(然后由
.bashrc
提供),具体取决于您的Linux版本

为此,您可以简单地使用:

shell: echo "alias serve='pub serve --hostname=0.0.0.0'" >> ~/.bash_aliases
但这不是幂等的,重新运行Ansible playbook或Vagrant provisioning(将重新运行Ansible playbook)每次都会添加重复的行

相反,您应该将以下内容与一起使用:

- name: Add serve alias for foo user
  lineinfile:
    path=/home/foo/.bashrc
    line="alias serve='pub serve --hostname=0.0.0.0'"
    owner=foo
    regexp='^alias serve='pub serve --hostname=0.0.0.0'$'
    state=present
    insertafter=EOF
    create=True

上面的播放将把别名行添加到foo用户的
.bashrc
文件的末尾(如果由于某种原因文件不存在,则创建该文件)。当您重新运行它时,它会尝试匹配regexp值(这可能需要使用转义部分进行调整),如果它匹配它,则会将其替换为行值。

谢谢您的回答,我会尝试。我做了类似的事情,使用
-name:copying bash aliases copy:src=../tasks/.bash\u aliases dest=/home/vagrant/.bash\u aliases
将一个.bash\u aliases文件从我的主机复制到配置上的来宾机,它工作正常,但每次我配置时它都会替换该文件,如果我有不同角色的别名,这可能是个问题。你的解决方案看起来更清晰。顺便说一句,我无法理解为什么
命令不起作用。为了接受你的答案,你应该稍微修改一下代码。由于“”的原因,
键出现问题。我使用了一个在
defaults
中定义的变量,然后做了
-name:Add-serve-alias-for-vagrant-user-lineinfle:dest=/home/vagrant/.bash\u-alias-line=“{pub\u-server\u-alias}}}”regexp='^'{pub\u-server\u-alias}}'$'state=present-insertafter=EOF-create=True
我通常发现blockinfle容易得多。特别是在更改别名时。@turbophi此答案早于
blockinfle
,但您应该使用该选项对此答案进行编辑,或者如果您认为它增加了价值,则应添加单独的答案。