Articles of ansible

立即处理程序,或冲洗只有一个处理程序,在Ansible

(与Ansibleangular色中的Callbacks或hooks以及可重用的一系列任务有关 ): Ansible提供了一个方法来刷新通知只有一个处理程序? 像meta: flush_handlers ,但为一个命名处理程序? 还是一种方法来发出处理程序,一旦通知?

从远程主机复制到远程主机时,Ansible挂起

我想将hostA上生成的文件复制到生产服务器,并尝试下面的任务,但Ansible挂起。 我设置了ssh_args=-i ForwardAgent=yes正如在前面的post中所build议的,但是这没有效果。 这里有什么问题? – name: Copy certificate from hostA to production servers synchronize: mode: pull src: /etc/td-agent/ca_cert.pem dest: /etc/td-agent/ca_cert.pem delegate_to: "{{item}}" with_items: groups.production 更新:日志如下: TASK: [td-agent | Copy certificate to sender] <192.168.50.3> ESTABLISH CONNECTION FOR USER: foo <192.168.50.3> EXEC ssh -C -tt -vvv -o ForwardAgent=yes -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=foo -o […]

如何从任务库存中获取主机

我有两个库存,分期和生产。 分段内容: [webserver] 192.168.56.101 #server 1 192.168.56.103 #server 2 生产内容: [webserver] 192.168.56.108 #server test 我从服务器1中提取存档文件,并将其发送到服务器testing,然后将其解压缩。 我的脚本如下: – name: fetch archived file to local machine fetch: src: /tmp/code_release_version_{{ release_version }}.tar.gz dest: /tmp/code_release_version_{{ release_version }}.tar.gz flat: yes tags: test – name: copy archived file to another remote server on /tmp directory copy: src: /tmp/code_release_version_{{ release_version }}.tar.gz dest: […]

ansible的服务模块如何处理服务名称中的冲突?

来自Ansible doc: 支持的init系统包括BSD init,OpenRC,SysV,Solaris SMF,systemd,新贵。 Ansible试图运行该服务的顺序是什么? 如果服务X有一个init.d脚本,并且在/ etc / init中还有一个暴发户脚本呢?

是否有可能在Ansible中asynchronous运行site.yml中定义的angular色而不打开千位terminal?

目前在site.yml中定义了多个angular色: – include: role1.yml – include: role2.yml – include: role3.yml – include: role4.yml – include: role5.yml 并通过发出以下命令同步运行: ansible-playbook -i testing site.yml -u root –vault-password-file ~/.vault_pass.txt 题 如何一次性运行site.yml中定义的angular色? 讨论 它可以通过打开多个terminalasynchronous运行所有angular色并运行: ansible-playbook -i testing playbook1.yml -u root –vault-password-file ~/.vault_pass.txt ansible-playbook -i testing playbook2.yml -u root –vault-password-file ~/.vault_pass.txt ansible-playbook -i testing playbook3.yml -u root –vault-password-file ~/.vault_pass.txt ansible-playbook -i […]

对依赖Ansibleangular色的“合成”默认variables的懒惰评价

我有两个Ansibleangular色,我们称他们为postgres和myservice 。 在我的postgresangular色中,我定义了一些默认variables(在postgres/defaults/main.yml ): postgres_db: pgdb postgres_user: postgres postgres_systemd_docker_service_name: postgres_{{postgres_db}} 在我的postgresangular色中,我从postgres_systemd_docker_service_namevariables创build了一个systemd服务单元文件。 这里的想法是,如果我想为多个服务运行多个postgres docker容器,我可以使用postgres_dbvariables来区分它们。 然后我有myserviceangular色,我依赖于postgresangular色并重写一些默认variables。 在我的myservice/meta/main.yml : dependencies: – {role: docker} – role: postgres postgres_user: "myservice_user" postgres_password: "myservice_password" postgres_db: "myservice" 但是,当我运行使用myserviceangular色的playbook时,它将创build我的systemd单元文件为postgres_pgdb (这是默认值)而不是postgres_myservice 。 如果我在我的myserviceangular色中使用postgres_systemd_docker_service_namevariables,它将被评估为postgres_myservice 。 有没有什么办法可以确保我的postgresangular色中的复合variables以这样的方式被评估:我的myserviceangular色可以覆盖默认值?

在configuration步骤中,Packer将不能正确使用私钥作为SSHauthentication

我使用Packer构buildVirtualBox图像,使用Ansible置备程序设置图像。 构build器步骤创build一个临时用户( ssh_username和ssh_password )。 Ansibleconfiguration程序使用此临时用户运行。 当然,我想摆脱这个用户后,它build立了我们更安全的公共密钥的用户。 所以我添加了第二个Ansibleconfiguration步骤,作为安全用户连接,并删除不安全的用户。 或者至less是这个计划。 但是,通过打包程序的Ansible无法使用此方法实际连接到VM。 以下是packer.json文件的相关部分: "provisioners": [ { "type": "ansible", "playbook_file": "playbooks/image/image.yml", "groups": [ "{{user `ansible_group`}}" ], "user": "vagrant", "extra_arguments": [ "–vault-password-file", "scripts/get-vault-password.sh", "-e", "global_configuration_user={{user `configuration_user`}}", "-e", "global_deployment_user={{user `deployment_user`}}", "-e", "ansible_ssh_pass=vagrant", "-vvvvv" ] }, { "type": "ansible", "playbook_file": "playbooks/image/removeVagrant.yml", "groups": [ "{{user `ansible_group`}}" ], "user": "{{user `configuration_user`}}", "extra_arguments": [ "–vault-password-file", […]

如何从filter_plugin访问inventory_hostname?

在某些情况下,我的自定义filter插件使用ansible.utils.display在Ansible的输出中注入警告: if 'hold' in mydetails: display.warning('%s can be upgraded from %s to %s, but is on hold' % (myp, mydetails['version'], latest)) continue 这个工作和警告显示很好,但缺乏主机名 – 这可能会相当混乱,当一个人的库存很大。 我可以自己插入主机名,但是我想要使用已知为inventory_hostname的string。 我将如何访问该variables?

Ansible收集事实不起作用?

每次我运行一个剧本,ansible会安装一遍又一遍的包,甚至认为它已经安装,所以它是如何工作的呢? ansible-playbook -i hosts site.yml GATHERING FACTS *************************************************************** ok: [192.168.0.2] TASK: [Install via apt] *************************************** changed: [192.168.0.2] => (item=build-essential,python-dev,python-software-properties,python-setuptools) 我的食谱(任务): name: Install via apt action: apt pkg=$item with_items: – build-essential – python-dev – python-software-properties

在Ansible Jinja2filter中强制使用整数types

我有一个Ansible剧本中的以下YAML: offset: "{{ publicip | regex_replace('^.*\\.([0-9]+)$', '\\\\1') | int % (step-1) + 1 }}" cron_minute_list: "{% for i in range(offset, 60, step) %}{{ i }},{% endfor %}" 但是当我运行的剧本,我得到这个错误: fatal: [default] => Failed to template */{{ cron_minute_list | regex_replace('.$', '') }}: Failed to template {% for i in range(int_offset, 60, step) %}{{ i }},{% endfor %}: […]