<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:17:53 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>FOLIO Jira</title>
    <link>https://folio-org.atlassian.net</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>1001.0.0-SNAPSHOT</version>
        <build-number>100246</build-number>
        <build-date>07-02-2024</build-date>
    </build-info>

<item>
            <title>[FOLIO-2055] create an Ansible role for backend-module that deploys the container to K8s cluster</title>
                <link>https://folio-org.atlassian.net/browse/FOLIO-2055</link>
                <project id="10290" key="FOLIO">FOLIO</project>
                    <description>&lt;p&gt;&lt;b&gt;Scope&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This issue is scoped to deploying pre-release and release artifacts (commits to master and releases). Deployment of arbitrary commits on feature branches is out of scope. (see 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;FOLIO-2131&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-2131&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;SPIKE: how to deploy containers based on feature branches&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            FOLIO-2131
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
)&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Assumptions&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Jenkins pipeline performs the following steps first:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Builds the source code, runs units tests, build a container&lt;/li&gt;
	&lt;li&gt;A module descriptor for the module has been generated and registered with an upstream module descriptor registry (e.g. folio-registry.aws.indexdata.com)&lt;/li&gt;
	&lt;li&gt;A Docker image for the module is available on a Docker registry (e.g. Docker Hub)&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;&lt;b&gt;Process&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;In broad terms, this is the process that should be followed:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Deploy the Docker image to the K8s cluster. See 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;FOLIO-2069&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-2069&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Deploy Okapi to K8s cluster&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            FOLIO-2069
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
 for a sample Ansible playbook that generates service and deployment YAML from a template and deploys to a K8s cluster. The service DNS name should be the same as the full module ID.&lt;/li&gt;
	&lt;li&gt;Use the Okapi API to pull module descriptors from the upstream repository to the target Okapi instance&lt;/li&gt;
	&lt;li&gt;Post a deployment descriptor to the Okapi &lt;tt&gt;/&amp;#95;/discovery/modules&lt;/tt&gt; API for the module with the URL pointing to the K8s service. &lt;em&gt;Note: if 
    &lt;span class=&quot;jira-issue-macro&quot; data-jira-key=&quot;OKAPI-729&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/OKAPI-729&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Discovery: url pattern (DNS for service)&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10322?size=medium&quot; /&gt;
            OKAPI-729
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-complete jira-macro-single-issue-export-pdf&quot;&gt;Open&lt;/span&gt;
            &lt;/span&gt;
 is resolved, this step will not be necessary.&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;&lt;b&gt;Open questions&lt;/b&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;What is the best way to pass database credentials to the module instance?&lt;/li&gt;
	&lt;li&gt;What (if anything) should be done about tenant data upgrading? (this is relevant for the existing reference environments like folio-snapshot/stable and folio-testing, but OUT OF SCOPE for this ticket)&lt;/li&gt;
	&lt;li&gt;What is the process for cleaning up unused module instances? (see 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;FOLIO-2130&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-2130&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;SPIKE: how to clean up unused container instances&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            FOLIO-2130
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
, Okapi does not clean up externally deployed instances)&lt;/li&gt;
	&lt;li&gt;What is the best way to manage resource utilization for containers? (may also be relevant to 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;FOLIO-2069&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-2069&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Deploy Okapi to K8s cluster&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            FOLIO-2069
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
). See 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;FOLIO-1729&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-1729&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;Use container memory limits to manage memory in reference environments&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10322?size=medium&quot; /&gt;
            FOLIO-1729
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
.&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
        <key id="81268">FOLIO-2055</key>
            <summary>create an Ansible role for backend-module that deploys the container to K8s cluster</summary>
                <type id="10003" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium">Task</type>
                                            <priority id="10001" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p2.svg">P2</priority>
                        <status id="6" iconUrl="https://folio-org.atlassian.net/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10003">Done</resolution>
                                                        <assignee accountid="5fca8bef7cc1030069d4f186">mark.stacy</assignee>
                                                                <reporter accountid="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d">Jakub Skoczen</reporter>
                                    <labels>
                            <label>platform-backlog</label>
                    </labels>
                <created>Fri, 31 May 2019 05:48:08 +0000</created>
                <updated>Wed, 3 Jun 2020 16:39:51 +0000</updated>
                            <resolved>Mon, 29 Jul 2019 18:47:16 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>5</watches>
                                                                <comments>
                                                            <comment id="195698" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Wed, 10 Jul 2019 15:05:56 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5cd423bebc70090d6ce241b1&quot; class=&quot;user-hover&quot; rel=&quot;5cd423bebc70090d6ce241b1&quot; data-account-id=&quot;5cd423bebc70090d6ce241b1&quot; accountid=&quot;5cd423bebc70090d6ce241b1&quot; rel=&quot;noreferrer&quot;&gt;Ian Hardy&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5fca8bef7cc1030069d4f186&quot; class=&quot;user-hover&quot; rel=&quot;5fca8bef7cc1030069d4f186&quot; data-account-id=&quot;5fca8bef7cc1030069d4f186&quot; accountid=&quot;5fca8bef7cc1030069d4f186&quot; rel=&quot;noreferrer&quot;&gt;mark.stacy&lt;/a&gt; Guys, let&apos;s flash out the steps for deploying this module and making use of Okapi&apos;s dependency resolution &amp;#8211; it would involve making a couple calls to the Okapi API to get the deps and then cross-checking them against the discovery endpoint to confirm what is running and what is not. Also, we will need to name the modules with the module name and a version number (and Kubernets has some limitations in terms of naming services).&lt;/p&gt;</comment>
                                                            <comment id="195699" author="5fca8bef7cc1030069d4f186" created="Fri, 19 Jul 2019 22:13:50 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3Ab8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; class=&quot;user-hover&quot; rel=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; data-account-id=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; accountid=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; rel=&quot;noreferrer&quot;&gt;Jakub Skoczen&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5cd423bebc70090d6ce241b1&quot; class=&quot;user-hover&quot; rel=&quot;5cd423bebc70090d6ce241b1&quot; data-account-id=&quot;5cd423bebc70090d6ce241b1&quot; accountid=&quot;5cd423bebc70090d6ce241b1&quot; rel=&quot;noreferrer&quot;&gt;Ian Hardy&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5c706fbb47a54a6728e59df2&quot; class=&quot;user-hover&quot; rel=&quot;5c706fbb47a54a6728e59df2&quot; data-account-id=&quot;5c706fbb47a54a6728e59df2&quot; accountid=&quot;5c706fbb47a54a6728e59df2&quot; rel=&quot;noreferrer&quot;&gt;Wayne Schneider&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f9abc1eb45b2e007453f423&quot; class=&quot;user-hover&quot; rel=&quot;5f9abc1eb45b2e007453f423&quot; data-account-id=&quot;5f9abc1eb45b2e007453f423&quot; accountid=&quot;5f9abc1eb45b2e007453f423&quot; rel=&quot;noreferrer&quot;&gt;John Malconian&lt;/a&gt; PR submitted (copy markdown over to issue)&lt;/p&gt;

&lt;p&gt;Role Accomplishes:&lt;br/&gt;
1. Generate Database Secret, Service, and Deployment YAML from a template and deploys to a K8s cluster. &lt;br/&gt;
2. Post Module Descriptor to Okapi (/_/proxy/modules)&lt;br/&gt;
3. Post Deployment Descriptor (/_/discovery/modules)&lt;/p&gt;

&lt;p&gt;Review: @wafschneider @ihardy @funkymalc &lt;br/&gt;
README: &lt;a href=&quot;https://github.com/folio-org/folio-ansible/tree/FOLIO-2055/roles/module-kubernetes&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/folio-ansible/tree/FOLIO-2055/roles/module-kubernetes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ISSUES&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Database and user creation should be handled with okapi-kubernetes Role. (okapi_modules).&lt;/li&gt;
	&lt;li&gt;Module Descriptor needs to have all information including ENV Variables (metadata.docker_env:[ 
{&quot;name&quot;:&quot;&quot;,&quot;value:&quot;&quot;}
&lt;p&gt;,.....]. Instead of using &lt;a href=&quot;https://github.com/folio-org/folio-ansible/blob/master/group_vars/release&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://github.com/folio-org/folio-ansible/blob/master/group_vars/release&lt;/a&gt;. Fragile tied to Github file along with excess ansible code to collect metadata.&lt;/p&gt;&lt;/li&gt;
	&lt;li&gt;Where is ansible going to run? I executed ansible locally with the use of okapi public ingress for the okapi endpoint (&lt;a href=&quot;https://okapi-demo2.ci.folio.org/_/proxy/modules&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://okapi-demo2.ci.folio.org/_/proxy/modules&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
</comment>
                                                            <comment id="195700" author="5af5e627525ba96b58654f12" created="Thu, 25 Jul 2019 19:57:21 +0000"  >&lt;p&gt;HI &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5fca8bef7cc1030069d4f186&quot; class=&quot;user-hover&quot; rel=&quot;5fca8bef7cc1030069d4f186&quot; data-account-id=&quot;5fca8bef7cc1030069d4f186&quot; accountid=&quot;5fca8bef7cc1030069d4f186&quot; rel=&quot;noreferrer&quot;&gt;mark.stacy&lt;/a&gt; and &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3Ab8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; class=&quot;user-hover&quot; rel=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; data-account-id=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; accountid=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; rel=&quot;noreferrer&quot;&gt;Jakub Skoczen&lt;/a&gt; This showed up in the manual testing queue, but I don&apos;t think there&apos;s anything for us to do. Do you want to close this ticket?&lt;/p&gt;</comment>
                                                            <comment id="195701" author="5f9abc1eb45b2e007453f423" created="Thu, 25 Jul 2019 19:58:57 +0000"  >&lt;p&gt;Updated status to &apos;In Code Review&apos;&lt;/p&gt;</comment>
                                                            <comment id="195702" author="5cd423bebc70090d6ce241b1" created="Mon, 29 Jul 2019 12:57:36 +0000"  >&lt;p&gt;Wayne&apos;s latest changes look good to me, my vote merge them in and handle the last todo (replace module_list with folio_modules) perhaps as part of folio-2187?&lt;/p&gt;

&lt;p&gt;I also noticed that the roles included in meta/main.yml include the common role, which is a bit tricky on k8s since the common role expects to be running on a Debian system. I think I can work around this in the module deploy pipeline temporarily, but this might be another issue to address in 2187.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="81249">FOLIO-2183</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="10721">UXPROD-1827</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is blocked by">
                                        <issuelink>
            <issuekey id="52847">OKAPI-729</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="81266">FOLIO-2054</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="81278">FOLIO-2069</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="81267">FOLIO-2056</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="81347">FOLIO-2130</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="81349">FOLIO-2131</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="79478">FOLIO-1862</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10057" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Development Team</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10144"><![CDATA[Core: Platform]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzx6qn:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="1156">CP: sprint 67</customfieldvalue>
    <customfieldvalue id="1780">CP: sprint 69</customfieldvalue>
    <customfieldvalue id="1158">CP: sprint 68</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10044" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>5.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Fri, 19 Jul 2019 22:13:50 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10025" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>[CHART] Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>