ansible set_fact 在playbook中动态添加变量 (register也可以)

set_fact

    set_fact模块可以自定义facts,这些自定义的facts可以通过template或者变量的方式在playbook中使用。如果你想要获取一个进程使用的内存的百分比,则必须通过set_fact来进行计算之后得出其值,并将其值在playbook中引用。

下面是一个配置mysql innodb buffer size的示例:

- name: Configure MySQL

  hosts: mysqlservers

  tasks: 

    - name: install MySql

      yum: name=mysql-server state=installed

 

    - name: Calculate InnoDB buffer pool size

      set_fact: innodb_buffer_pool_size_mb="{{ ansible_memtotal_mb / 2 }}"

 

    - name: Configure MySQL 

      template: src=templates/my.cnf dest=/etc/my.cnf owner=root group=root mode=0644 

      notify: restart mysql 

 

    - name: Start MySQL 

      service: name=mysqld state=started enabled=yes 

  handlers: 

    - name: restart mysql 

      service: name=mysqld state=restarted


my.cnf的配置示例:

# {{ ansible_managed }}

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted

security risks

symbolic-links=0

 

# Configure the buffer pool

innodb_buffer_pool_size = {{ innodb_buffer_pool_size_mb|int }}M

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

参考:https://www.cnblogs.com/paul8339/p/6159228.html

### 回答1: 您可以使用 Ansible 的 command 模块在远程主机上执行 shell 命令,然后使用 awk 命令处理输出结果来判断是否存在更高版本的系统。 以下是 playbook 的示例代码: ``` - name: Check for higher version in storage hosts: remote gather_facts: no tasks: - name: Get remote system version command: cat /etc/os-release | grep "VERSION_ID" | awk -F '"' '{print $2}' register: remote_version - name: Get local system version command: cat /etc/os-release | grep "VERSION_ID" | awk -F '"' '{print $2}' register: local_version - name: Compare versions fail: msg: "Remote system version {{ remote_version.stdout }} is higher than local system version {{ local_version.stdout }}." when: remote_version.stdout > local_version.stdout ``` 在这个 playbook ,我们使用 command 模块在远程主机和本地执行了相同的命令,将命令的输出结果保存到了变量 remote_version 和 local_version 。然后我们使用 when 语句比较两个版本号,如果远程主机的版本比本地版本高,则使用 fail 模块显示错误信息。 ### 回答2: 要使用Ansible playbook编写检查存储介质是否存在比本机系统更高版本的任务,可以按照以下步骤进行: 1. 首先,需要在Ansible的inventory文件定义存储介质的主机或组。 比如说,在inventory文件定义一个名为[storage]的组,并将存储介质的主机添加到该组。 2. 创建一个新的Ansible playbook文件,例如check_versions.yaml。 3. 在playbook文件,通过hosts字段指定要执行操作的目标主机或组。 例如,将hosts字段设置为[storage],以指定在存储介质检查版本的主机组。 4. 定义一个tasks列表,在其指定要在目标主机上运行的任务。 5. 在tasks列表,使用ansible_facts模块来获取目标主机的操作系统版本信息。 可以使用命令"ansible_facts"来获取所有的主机信息,并通过过滤器选择需要的信息。 例如:facts: "{{ ansible_facts }}" 6. 添加一个条件判断任务,通过比较存储介质的操作系统版本和本机操作系统版本来确定是否存在比本机更高版本。 可以使用Ansible的when语句来实现条件判断。当存储介质的版本比本机版本高时,输出一条消息来表明存储介质存在更高版本。 例如:当"'{{ item }}' > '{{ ansible_distribution_version }}'"为真时,输出一条消息'存储介质存在比本机更高的版本'。 7. 最后,在playbook声明一个名为"check_versions"的play,并将tasks列表添加到该play。 8. 运行Ansible playbook,使用命令"ansible-playbook check_versions.yaml",Ansible将会在存储介质的主机上执行任务,并输出相应的结果。 使用以上步骤,可以编写一个Ansible playbook来检查存储介质是否存在比本机系统更高版本的任务。 ### 回答3: 在使用Ansible Playbook编写时,可以通过使用相关的Ansible模块来查看存储介质是否存在比本机系统更高的版本。 首先,在Playbook的任务添加一个使用适当模块的步骤。可以使用'command'模块或'register'模块执行命令并将输出存储到变量。假设使用'command'模块来执行特定的命令。 接下来,定义一个变量来存储本机系统的版本信息,通过'ansible_facts'查找或使用适当的命令。 然后,使用'command'模块执行命令来获取存储介质的版本信息,并将输出结果存储在另一个变量。 之后,可以使用条件语句来比较两个版本号。可以使用'vars'模块来定义一个新的变量,将存储介质的版本信息与本机系统的版本信息进行比较。 最后,可以添加适当的任务,根据比较结果执行不同的操作。例如,如果存储介质的版本高于本机系统的版本,则执行一些特定的操作或报告结果。 以下是一个简单的示例Playbook: ```yaml --- - name: Check if higher version exists in storage media hosts: localhost gather_facts: true tasks: - name: Get local system version command: <<获取本机系统版本的命令>> register: local_version - name: Get storage media version command: <<获取存储介质版本的命令>> register: storage_version - name: Compare versions set_fact: higher_version_exists: "{{ storage_version.stdout | version_compare(local_version.stdout, '>') }}" - name: Print result debug: msg: "Higher version exists in storage media: {{ higher_version_exists }}" ``` 请注意,上述示例的'<<获取本机系统版本的命令>>'应替换为用于获取本机系统版本的实际命令,'<<获取存储介质版本的命令>>'应替换为用于获取存储介质版本的实际命令。 通过使用Ansible Playbook编写以上步骤,您可以比较存储介质的版本与本机系统的版本,并根据需要执行相关的操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值