ansible的copy模块中content选项的使用,ansiblecopy

ansible的copy模块用来拷贝文件。通常我们将中控机上的一个已有文件,拷贝到远程服务器上。这种场景通常是中控机上要已存这个目标文件。但有时候,总会觉得这些文件放在中控机上也挺凌乱,而且这目标文件要是不小心丢了,在运行这个ansible的playbook任务的时候就会报错。能不能将这个文件的内容就写在playbook里面呢?通过copy模块的content选项是可以实现的。

ansible官网上copy模块的说明地址:http://docs.ansible.com/ansible/latest/copy_module.html
其中,content选项的描述是这样的:

When used instead of src, sets the contents of a file directly to the specified value. For anything advanced or with formatting also look at the template module.
上面的意思就是,用content来代替src选项的话,可以用指定内容来替代本来用src指定的文件的内容。

示例:

#获取tomcat

  • name: synchronize apache-tomcat-client
    synchronize: src=apache-tomcat-client/ dest=/opt/apache-tomcat-client/
    become: true

#配置tomcat的日志切割脚本,及定时任务

  • name: copy content to cut_tomcat_log.sh
    copy:
    content: |
    #!/bin/bash

    log_path=/opt/apache-tomcat-client
    log_dir_name=`date +%Y\-%m`
    log_time=`date +%F -d -1day`
    yesterday_dir=`date +%Y\-%m -d -1day`
    
    cp $log_path/logs/catalina.out $log_path/logs/catalina.out-$log_time
    echo > $log_path/logs/catalina.out
    
    tar_log(){
        tar zcvf $log_time.tar.gz *$yesterday_dir-*  --remove-files
        mv $log_time.tar.gz $yesterday_dir
    }
    
    cd $log_path/logs
    
    if [ -d $log_dir_name ]
        then
        tar_log
    else
        mkdir $log_dir_name
        tar_log
    fi
    

    dest: /root/cut_tomcat_log.sh
    mode: 644
    become: true

  • name: add cut_tomcat_log.sh to crontab
    cron: name=‘add cut_tomcat_log.sh for tomcat’ minute=1 hour=0 job=“sh /root/cut_tomcat_log.sh”
    become: true

#配置tomcat日志清除脚本,及定时任务

  • name: copy content to clear_tomcat_log.sh
    copy:
    content: |
    #!/bin/bash

    LOG_PATH="/opt/apache-tomcat-client/logs/"
    LOG_PATH_VAR="/var/log/httpd/"
    SPACE=`df -h|grep -w / |awk -F '[ %]'+ '{print $5}'`
    if [ $SPACE -ge 75 ];then
        if [ -d $LOG_PATH ];then
              cd /opt/apache-tomcat-client/logs/
              if [ $? -eq 0 ];then
                      find  . -type d -mtime +30 -exec  sudo rm -rf {} \;
                      find  . -type f -mtime +30 -exec  sudo rm -rf {} \;
              fi
        fi
        if [ -d $LOG_PATH_VAR ];then
              cd /var/log/httpd/
              if [ $? -eq 0 ];then
                      find . -type f -mtime +30 -exec  sudo rm -rf {} \;
              fi
        fi
    fi
    

    dest: /root/clear_tomcat_log.sh
    mode: 644
    become: true

  • name: add clear_tomcat_log.sh to crontab
    cron: name=‘add clear_tomcat_log.sh for tomcat’ minute=30 hour=0 job=“sh /root/clear_tomcat_log.sh”
    become: true
    上面是一个获取tomcat,然后配置tomcat日志定时切割和删除的任务。中控机本地并没有cut_tomcat_log.sh和clear_tomcat_log.sh这两个脚本,通过content选项指定内容后,直接在远程目标机上生成出来。这里注意一下,content选项后面有个“|”竖线用来换行,不然生成的文件内容格式可能有问题。

补充:最近发现ansible的shell模块也有类似的写法

You can use shell to run other executables to perform actions inline

  • name: Run expect to wait for a successful PXE boot via out-of-band CIMC
    shell: |
    set timeout 300
    spawn ssh admin@{{ cimc_host }}

    expect “password:”
    send “{{ cimc_password }}\n”

    expect “\n{{ cimc_name }}”
    send “connect host\n”

    expect “pxeboot.n12”
    send “\n”

    exit 0
    args:
    executable: /usr/bin/expect
    delegate_to: localhost

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值