ansible-playbook额外的变量,有一个值的空间

use*_*696 9 ansible ansible-playbook

当我使用以下命令运行我的剧本时,我遇到了通过额外变量提供值的问题:

ansible-playbook gitolite-docker.yml -e "GITOLITE_SSH_KEY=$(cat roles/gitolite-docker/files/john_rsa.pub)" --ask-vault-pass
Run Code Online (Sandbox Code Playgroud)

这是摘录 gitolite-docker.yml

- name: logging admin.pub
  shell: echo "{{GITOLITE_SSH_KEY}}" > /home/ansusersu/gitoliteadmin.pub

- name: create gitolite--docker container
  docker_container: 
    name: gitolite
    image: alex2357/docker-gitolite
    state: started
    ports:
      - "8081:22"
    volumes:
      - "/docker/volumes/gitoliterepositories:/home/git/repositories"
    env:
      SSH_KEY: "{{GITOLITE_SSH_KEY}}"
      KEEP_USERS_KEYS: "dummytext"      
  become: yes 
Run Code Online (Sandbox Code Playgroud)

问题是我只从SSH密钥中获得前几个字符"ssh-rsa".

john@john-VirtualBox:~$ sudo cat /home/ansusersu/gitoliteadmin.pub
ssh-rsa
john@john-VirtualBox:~$ 
Run Code Online (Sandbox Code Playgroud)

我在两种用法中得到完全相同的值{{GITOLITE_SSH_KEY}}.在Docker容器中,我在日志文件中具有完全相同的值.

对于Docker类似的线路工作正常:

docker run -d -p 8081:22 --name gitolite -e SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" -v /docker/volumes/gitoliterepositories:/home/git/repositories alex2357/docker-gitolite
Run Code Online (Sandbox Code Playgroud)

当我看到在我看来,我将无法实现与Ansible,剧本相同的行为与码头工人,因为它认为,其余人员作为另一个额外的变种.有没有办法使它工作?

tec*_*raf 9

适当的引用应解决问题:

ansible-playbook gitolite-docker.yml -e "GITOLITE_SSH_KEY='$(cat roles/gitolite-docker/files/john_rsa.pub)'" --ask-vault-pass
Run Code Online (Sandbox Code Playgroud)

最终使用双引号:

ansible-playbook gitolite-docker.yml -e "GITOLITE_SSH_KEY=\"$(cat roles/gitolite-docker/files/john_rsa.pub)\"" --ask-vault-pass
Run Code Online (Sandbox Code Playgroud)

  • 您还可以将JSON格式与`-e`一起使用,在这种情况下可能用处不大,但是如果要将布尔值或整数传递给Ansible,则非常有用,因为使用`var = value`可以只传递字符串。看起来像这样:`ansible-playbook gitolite-docker.yml -e“ {'GITOLITE_SSH_KEY':'$(cat role / gitolite-docker / files / john_rsa.pub)'}” --skor-vault-pass` 。 (2认同)