2016-06-11 6 views
0

아래 코드를 실행하면 오류가 발생합니다. 왜 이런 일이 생길까요? {{ ssh.port }} 또는 {{ ssh.port|int }}에서 값을 얻을 수 있으며 {{ ssh.port|int }}10022으로 바꿀 때 작동합니다.Int()의 int()에 대한 문자가 유효하지 않습니다.

$ ansible-playbook -i staging site.yml 

오류! 예기치 않은 예외 : 기본 10 INT()에 대한 유효하지 않은 문자 : '{{ssh.port | INT}}'

# staging 
[webservers] 
IP_ADDRESS 

[all:vars]                                    
env=staging 

# site.yml 
- include: webservers.yml 

# webservers.yml 
- hosts: webservers 
    remote_user: deploy 
    port: "{{ssh.port|int}}" 
    become: True 
    gather_facts: False 
    vars_files: 
    - group_vars/credentials/{{ env }} 
    roles:                                    
    - common 

# group_vars/all.yml 
ssh: 
    port: 10022 

Ansible : 2.1.0.0, 맥 : 10.11.5

+0

Ansible1.9.6을 사용하여 코드를 실행했을 때 작동합니다. 그래서 나는 잘못된 길을 택 했는가 아니면 Anabilities> = 2.0에 대한 버그인가? – akm

답변

0

이 가능한 버그입니다. 오류가 발생했습니다 here.
아직 재생 속성이 템플리트되지 않았으며 int()가 오류를 발생시킵니다.

그러나 ansible_port: 10022 변수를 group_vars/all.yml 파일에 사용하면 원하는 것을 얻을 수 있습니다. 이것은 자동으로 ssh 포트를이 값으로 설정합니다.

또는 play_context.py을 패치하여 int()를 제거 할 수 있습니다.이 방법은 작동하지만 가능한 단점을 알지 못합니다.

+0

정보를 제공해 주셔서 감사합니다. 그러나 아래처럼 ssh 포트를 변경하고 싶으므로 group_vars/all.yml에서'ansible_port '를 사용하고 싶지 않습니다 .. '- 호스트 : 웹 서버 포트 : 22, - 호스트 : 웹 서버 포트 : 10022' – akm

관련 문제