ポリシーアクションスクリプトの作成

  • リリースバージョン: Yokohama
  • 更新日 2025年01月30日
  • 所要時間:6分
  • ポリシーアクションスクリプトを使用して、クラウド要求の値を取得、更新、または設定します。

    始める前に

    必要なロール:sn_cmp.cloud_governor または admin。

    このタスクについて

    スクリプトの使用の詳細については、「クラウドスクリプトおよびクラウドスクリプトテンプレート」を参照してください。

    手順

    1. クラウドアドミンポータルで、 ガバナンス > ポリシー.
    2. [ポリシーアクションスクリプト] タブで [新規] をクリックし、一意で意味のある [名前] および [説明] を入力し、フォームに記入して、[送信] をクリックします。
      名前を入力すると、入力した名前を使用する変数を含むスクリプトが表示されます。
      フィールド 説明
      アクションスクリプトカテゴリ 別のカテゴリを選択するか、前のステップで作成したカテゴリをそのまま使用します。
      スクリプト スクリプト内の customScripts 関数を変更します。これだけが、変更する必要があるスクリプトの部分です。

    次のスクリプト例では、ユーザーがユーザーグループに属しているかどうかを判別し、ユーザー指定のアプリケーションサーバーノード名の値を値 MyNodeName でオーバーライドします。
    
    customScript : function(formData){
      var groups = this.parameters.userData.groups; 
        if( groups.length > 0){ 
          formData.App_Server_NodeName = "MyNodeName"; 
        }
      return formData;
    },
    

    この例では乱数を返します。

    
    customScript : function(formData){
      var min = 10000;
      var max = 99999;
      var num = Math.floor(Math.random() * (max - min + 1)) + min;
      formData.randomNumber = num + "";  
      return formData;
    },
    

    次のスクリプト例では、 ベースシステム GlideDateTime クラスを使用して、リース日に 3 時間を追加します。

    
    var SetLeaseShort = Class.create();
    SetLeaseShort.prototype = Object.extendsObject(sn_cmp.PolicyExecutionBase, {
    	customScript : function(formData){
    		// Manipulation of form parameters are supported. Changes in any other attributes
                  // will be ignored.
    		// The data available for manipulation is as follows:
    		// Form Data -  for example: StackName can be accessed through formData.StackName
    		// formData.StackName = "MyStack";
    		// User Data  - for example: User Id can be accessed through this.parameters.userData
    		// if(this.parameter.userData.userId == 'servicenowuserId')
    		// this.info("id = " + formData.StackName);
    		
    		// var leaseValue = now();
    		// leaseValue = leaseValue.setHours(leaseValue.getHours()+4);
    		// formData.LeaseEndDate = leaseValue;
    		
    		if (formData.hasOwnProperty("LeaseEndDate")) {
    			gdt = new GlideDateTime();
    			// 10800 = 3 hours
    			gdt.addSeconds(10800);
    			formData.LeaseEndDate = gdt.getDisplayValue();
    		}	
    		return formData;
    	},
    	execute: function() {
    		if(this.parameters !=  null && this.parameters.formData != null){
            	var inputData = JSON.parse(JSON.stringify(this.parameters.formData));
    		    var outputFormData = this.customScript(inputData);
                if( outputFormData != null){
                    this.parameters.formData = outputFormData;
                }
           	}
    		var output = {};
    		output.answer = this.parameters;
    		return JSON.stringify(output);
    	},
    	type : 'SetLeaseShort'
    });	
    
    var SetLeaseShortObj = new SetLeaseShort(inputAttributes);
    var outputParams = SetLeaseShortObj.execute();
    gs.info( "Output of script is = " + outputParams);
    

    次のスクリプト例では、ユーザー指定の Azure Wordpress DNS 名フィールドを、フォームからスタック名と同じ名前に設定します。

    var WordpressFill = Class.create();
    WordpressFill.prototype = Object.extendsObject(sn_cmp.PolicyExecutionBase, {
    	customScript : function(formData){
    		// Manipulation of form parameters are supported. Changes in any other attributes
            // will be ignored.
    		// The data available for manipulation is as follows:
    		// Form Data -  for example: StackName can be accessed through formData.StackName
    		// formData.StackName = "MyStack";
    		// User Data  - for example: User Id can be accessed through this.parameters.userData
    		// if(this.parameter.userData.userId == 'servicenowuserId')
    		//this.info("id = " + formData.StackName);
    		
    		formData.Azure_Wordpress_v6_vmDnsName = formData.StackName;
    		
    		return formData;
    	},
    	execute: function() {
    		if(this.parameters !=  null && this.parameters.formData != null){
            	var inputData = JSON.parse(JSON.stringify(this.parameters.formData));
    		    var outputFormData = this.customScript(inputData);
                if( outputFormData != null){
                    this.parameters.formData = outputFormData;
                }
           	}
    		var output = {};
    		output.answer = this.parameters;
    		return JSON.stringify(output);
    	},
    	type : 'WordpressFill'
    });	
    
    var WordpressFillObj = new WordpressFill(inputAttributes);
    var outputParams = WordpressFillObj.execute();
    gs.info( "Output of script is = " + outputParams);